2016-09-30 69 views
0

我想,作爲一個自分配鍛鍊,寫一個簡單的程序,它的生日,並決定在其指定的日期在一週中的一天。該計劃的第一部分決定了年份。我使用的是掃描儀收集用戶輸入,然後一個do-while循環來測試是否輸入是可用的(必須是數字,必須爲四位),如果輸入不符合標準的重複。我試圖輸入1998年,這顯然是一個數字和四位數字,它重複循環,就好像我的輸入無效。我假設在我的do-while循環中存在問題,但我一直無法確定它是什麼。這是有問題的代碼。通過我的掃描儀收集的輸入沒有被處理正確

public static boolean isInteger(String input) 
{ 
    try 
    { 
     Integer.parseInt(input); 
     return true; 
    } 
    catch(Exception e) 
    { 
     return false; 
    } 
} 
public static void main(String[] args) 
{ 
    String year = ""; 
    String yearcorrect = ""; 
    int ylength = year.length(); 
    boolean yearIsYear = true; 
    Scanner scan = new Scanner(System.in); 

    do 
    { 
     System.out.println("Please enter the year of your birth."); 
     year = scan.nextLine(); 
     boolean yearIsNum = isInteger(year); 

     if (yearIsNum = false || ylength != 3) 
     { 
      System.out.println("Input is not a valid year."); 
      yearIsYear = false; 
     } 
     else 
     { 
      System.out.println("You entered the year " + year + ". Is this correct?"); 
      yearIsYear = true; 
      yearcorrect = System.console().readLine(); 
     } 
    } 
    while (yearcorrect != "yes" && yearIsYear != true); 
+1

'yearIsNum = FALSE'意味着你'if'永遠不會通過。 – ChiefTwoPencils

回答

0

的第一個錯誤:

if (yearIsNum = false || ylength != 3) 

應該

if (yearIsNum = false || ylength != 4) 

第二個錯誤:

由於@ChiefTwoPencils指出,yearIsNum = false將分配falseyearIsNum和條件將永遠不會通過。除了......布爾值之外,通常java都可以保護我們免受所有類型的錯誤。爲了避免這樣的錯誤,在未來的(並且使你的代碼更易讀),你可以簡單地使用!yearIsNum,而不是yearIsNum == false或反向值的順序 - >把恆定的第一:false == yearIsNum - >以這種方式,如果你錯過=則編譯器會給你一個錯誤。我個人更喜歡!yearIsNum,因爲它更短,更具可讀性。

第三個錯誤

您錯誤地比較字符串。您必須使用str1.equals(str2)。使用==作爲對象(而字符串是對象)比較它們的引用,而不是它們的值。

例如"a" == new String("a")將等於false

+1

還有他們的不檢查一個布爾值,而是* *賦予它一個假值,這將抵消其他部分的問題。 – ChiefTwoPencils

+0

是的,你說得對。 –

+0

謝謝!我改變了你和ChiefTwoPencils提到的問題,它仍然沒有工作,但是,當我提出「INT ylength = year.length();」在它的內部工作。 – curlycue104