2017-05-08 50 views
1

我已經淘到谷歌和SO沒有運氣到目前爲止。這可能是由於我缺乏知識,也很難知道如何正確搜索我的答案。Java:聲明一個字符串參數的方法

概念,我想有一個期待字符串的方法,然後使用該字符串的代碼塊中,以引導基本System.out.println

import java.util.HashMap; 

public class Restaurant { 
    public static void main(String[] args) { 
     HashMap<String, Integer> restaurantMenu = new HashMap<String, Integer>(); 

     restaurantMenu.put("Turkey Burger",13); 
     restaurantMenu.put("Naan Pizza",11); 
     restaurantMenu.put("Cranberry Kale Salad",10); 

     seePrice("Naan Pizza");  

     /* I want to create a method called seePrice, which expects a string input 
     (which will ultimately be a name of one of the food items on the menu). 
     Then it goes on to use that string input in: 
     System.out.println(restaurantMenu.get(stringinputgoeshere)); 

     So that I can simply type seePrice("Naan Pizza"); 
     and it will display the price in the console 
     */ 

    } 
} 

很多不同的嘗試後,我不能讓這樣的東西基本爲我工作。請原諒我是這樣的新手。所有的幫助表示讚賞。

編輯以下(注意一些多餘的物品,如平方英尺行被加到簡單地進一步良好做法getter和setter方法)

import java.util.HashMap; 
public class Restaurant { 

    //sqft section 
    private double sqft = 0.0; 
    public Restaurant(){ 
    sqft = 500.0; 
        } 
    public Restaurant(double squareFeet){ 
     sqft = squareFeet; 
             } 
    public double getSqft(){ 
    return sqft; 
         } 

    //Menu section 
    private HashMap<String, Double> restaurantMenu = new HashMap<String, Double>(); 
    public int setMenu(HashMap<String, Double> currentMenu){ 
    this.restaurantMenu = currentMenu; 
    return 1; 

                 } 
    public HashMap<String, Double> getMenu(){ 
    return restaurantMenu; 

                 } 

    public static void seePrice (HashMap<String, Double> menu, String food){ 
    System.out.println(menu.get(food)); 
                     } 


    /////////Run Main Section Here 
    public static void main(String[] args) { 

    Restaurant platefulOfCox = new Restaurant(2120.8); 
    System.out.println("The square footage is "+platefulOfCox.getSqft()); 
    HashMap<String, Double> tempMenu = new HashMap <String, Double>(); 
     tempMenu.put("Pizza",10.99); 
     tempMenu.put("Burger",5.95); 
     tempMenu.put("Coke",1.99); 
     platefulOfCox.setMenu(tempMenu); 



     //Price Checker 
     String foodItem = "Coke"; 
     seePrice(platefulOfCox.getMenu(),foodItem); 

    } 
} 
+0

請正確描述你的問題,如果你只是想接受一個字符串的方法然後(public void myMethod(string st){System.out.println(st)})將是你的答案 –

回答

1

你的問題是restaurantMenu的範圍。您不能在主要方法之外訪問它。您需要將其聲明爲該類的成員,或將其作爲參數傳遞給您的seePrice方法。

import java.util.HashMap; 
public class Restaurant { 
    private static HashMap<String, Integer> restaurantMenu; 


    public static void main(String[] args) { 
     restaurantMenu = new HashMap<String, Integer>(); 
     .... 
+1

@Radiodef oops,謝謝 –

+0

謝謝您的回答。它使我走下了學習的道路,如何將它分解成它應有的方式。當然這種方式有更多的用途。 –

1

地圖restaurantMenu不會將任何方法seePrice(String)裏面可以看到,因爲它是一個局部變量的main()方法。您有兩種選擇:

  1. 將地圖作爲第二個參數傳遞給seePrice方法,以便查找價格。
  2. 使restaurantMenu成爲Restaurant類的字段。

第二選項有兩個子選項:使restaurantMenu一個static字段(和seePrice()一個static法)或使之實例字段和在main()方法創建的Restaurant一個實例。如果你打算將這個程序發展到一個玩具的例子之外,所有的東西都會變得容易一些,但是從長遠來看,它的靈活性要小得多。

+0

感謝您的詳細回覆。我編輯了原始問題以包含我現在擁有的內容。它的功能正如我所願,但如果有些事情可能會導致問題,如果這個程序變成了一個更大的事業,並且超出了當前的玩具範例,它會好奇不已。(請注意,我完全打算將餐廳分類放入自己的文件中,而不是像現在一樣將它們放在一起)。 –

+0

@KenParsons - 這已經有了很大的改進。您可能想要將菜單分成一個單獨的類,如Joel在[他的回答](http://stackoverflow.com/a/43838556/535871)中所建議的,將'seePrice()'方法移入該類。例如,您可以在多個餐廳中共享單個菜單,或者爲單個餐廳提供多個菜單(例如,早餐,季節性,週末等)。另外,我建議您將「seePrice()」替換爲'getPrice()'菜單返回一個值;將I/O的業務邏輯(「價格是什麼?」)分開通常會更好。 –

0

你是那裏的大部分。只需將你的HashMap移動到它自己的類中,也許是public class Menu。例如:

import java.util.Map; 
import java.util.HashMap; 

public class Menu { 
    private final Map<String, Integer> restaurantMenu = new HashMap<String, Integer>(); 

    public Menu() { 
     restaurantMenu.put("Turkey Burger",13); 
     restaurantMenu.put("Naan Pizza",11); 
     restaurantMenu.put("Cranberry Kale Salad",10); 
    } 

    public void seePrice(final String item) { 
     System.out.println(restaurantMenu.get(item)); 
    } 
} 

這是一個令人難以置信的簡單實現。考慮通過一種方法而不是在構造函數中添加菜單項,並且您可能需要檢查在打印到系統之前,傳遞到seePrice的項目是否在菜單上。

編輯:從這裏,你main只需創建一個final Menu menu = new Menu()並調用menu.seePrice(item)

+0

謝謝你的所有見解。這裏包含的很好的答案清楚地表明,解決問題的第一步是將散列表映射到主體之外。 現在的問題是我非常快速地移動到我的知識領域之外。我已經通過在整個代碼中的每個可能位置包含這些代碼行來嘗試實現,但我似乎無法完成這些工作。 爲了幫助我理解上下文,你能夠包含整個代碼的副本嗎? –

+0

僅供參考,我收到了一個常見錯誤 '錯誤:無法找到符號 private final Map restaurantMenu = new HashMap ();' –

+0

我已更新我的代碼示例以包含導入並修復語法錯誤。我懷疑我的解決方案會把你帶到你的舒適區之外,但我會看看我能否幫忙。我建議將Menu代碼放入與Main.java(或Restaurant.java,無論您稱爲它的目錄)相同的目錄中的單獨Menu.java中。您應該只需創建一個新的Menu對象並調用它的seePrice方法如上所述。 – Joel