2016-04-02 87 views
0

我正在練習Java,並且遇到了一些奇怪的問題,或者應該說出問題。Java不會從掃描器輸入中返回字符串

當我編譯下面的代碼,它說java的行號:錯誤:

missing return statement.

如果我刪除,我有return "not valid"的評論,它編譯。

現在,這是另一個問題進來。當我通過我輸入作爲AB,它返回無效的init_configfinal_config字符串。但是當我通過"A""B"到其他功能(other("A", "B")具體的回報這是"C"返回/打印。

我不知道,如果這個問題還是在於我的輸入法。我init_config和final_config的數據I輸入應該是字符串值,是否正確?我不確定Scanner是否是一個很好的字符串輸入方法。但是,如果我打印兩個輸入它工作正常,所以我不確定它是數據丟失還是字符串引用丟失時它被傳遞。

我也試過更換init_config = in.next()init_config = in.nextLine()但它並沒有任何區別。

是否需要在函數的末尾編譯代碼爲return "not valid",或者我可以通過某種方法繞過此代碼嗎?我怎樣才能使用Scanner輸入法傳遞字符串數據而沒有任何損失?

這裏是我的代碼:

import java.util.Scanner; 
public class towerGen 
{ 
    public static void main(String[]args) 
    { 
     Scanner in = new Scanner(System.in); 
     String init_config, final_config; 

     System.out.print("Enter initial configuration: "); 
     init_config = in.next(); 

     System.out.print("Enter final configuration: "); 
     final_config = in.next(); 

     System.out.print(other(init_config, final_config)); 

    } 

    public static String other(String src, String dest) 
    { 
     if (src=="A" && dest=="B") 
      return "C"; 
     if (src=="B" && dest=="A") 
      return "C"; 
     if (src=="B" && dest=="C") 
      return "A"; 
     if (src=="C" && dest=="B") 
      return "A"; 
     if (src=="A" && dest=="C") 
      return "B"; 
     if (src=="C" && dest=="A") 
      return "B"; 
    //return "not valid"; 
    } 
} 
+2

永遠不要用'=='測試字符串總是使用'equals'方法。 –

+0

謝謝。 @ Jean-BaptisteYunès – mickey4691

回答

1

Is it necessary to compile the code with the return "not valid" at the end of the function?

是的,它是。因爲編譯器認識到如果輸入字符串不符合您列出的任何條件,就沒有任何可返回的內容,這是非void方法中的錯誤。

此外,在您的other方法中,比較字符串時,應該使用src.equals("A")而不是src == "A"

+0

這很好。我不知道.equals()我整天都在搜索,但也許我的術語不正確。謝謝。 – mickey4691

0

我覺得你很可能得到了來自上面的討論,即答案,

Use equals method instead of ==. Because == checks if the both the object references are referring to the same object and not the contents inside it.

想回答爲什麼它的工作,當你調用的函數等("A", "B"),因爲它帶來了進入畫面的概念字符串池,值得注意。

But when I pass "A" and "B" to other function (other("A", "B") the specific return which is "C" is returned/printed.

當我們創建一個String對象沒有new運營商(也稱爲字符串文字),它使用字符串池中獲取該對象。如果不存在,它將創建並將其放入字符串池中。字符串池是共享的。如果我們使用new運算符,它將始終創建一個新的String對象,即使存在一個也不會引用該對象。

當您調用other("A", "B")時,這裏的參數指向字符串池中的字符串對象。然後在other(..)方法中,當您執行像src=="A"這樣的檢查時,它會返回true,因爲src和「A」都指向池中的相同字符串對象。

要測試這個,你可以試試System.out.print(other(new String("A"), "B"));,這將再次返回無效

有關更多信息,請參閱java string with new operator and a literal

+0

這是非常好的。謝謝。 – mickey4691