2013-11-22 52 views
0

非常新的Java和奇怪爲什麼這個while語句不會結束,即使當從掃描儀輸入是「N」,從而評估表達式爲false。雖然循環與掃描儀表達繼續儘管錯誤評估

import java.util.*; 

public class addSongs { 

    public static void main (String[]args){ 

     Scanner songAdd = new Scanner(System.in); 
     Scanner addContinue = new Scanner(System.in); 
     String ceaseAdd = new String(); 
     ceaseAdd = "Y"; 

     while(ceaseAdd != "N") 
      System.out.println("Enter track title"); 
      String newSong = songAdd.nextLine(); 
      MP3_catalogue.title.add(newSong); 
      System.out.println("Enter artist name"); 
      String newArtist = songAdd.nextLine(); 
      MP3_catalogue.artist.add(newArtist); 
      System.out.println("Enter duration"); 
      String newDuration = songAdd.nextLine(); 
      MP3_catalogue.duration.add(newDuration); 
      System.out.println("Would you like to add another song? Y/N"); 
      ceaseAdd = addContinue.nextLine().toUpperCase(); 
    } 

} 
+5

將'String'值與'String'的equals方法進行比較,而不是'=='或'!='。 – rgettman

+2

這:http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java應該幫助你理解*爲什麼* @ rgettman的評論是正確的。 – knoight

+0

你的代碼和你正在發生的事情的描述沒有加起來。你甚至說輸入「N」時它仍然運行。有了這個代碼,你永遠不會爲'ceaseAdd'輸入任何東西,它只會輸出永久性的「輸入曲目標題」。 –

回答

0

在java中,您不會比較字符串與「==」。 「==」會檢查它是否是完全相同的對象,而不是它是否具有相同的值。 要檢查它是否具有平等的文字,你必須使用

string.equals() 

在您的例子就應該是這樣的:

public static void main (String[]args){ 

Scanner songAdd = new Scanner(System.in); 
Scanner addContinue = new Scanner(System.in); 
String ceaseAdd = new String(); 
ceaseAdd = "Y"; 

while(!ceaseAdd.equals("N")) 
    System.out.println("Enter track title"); 
    String newSong = songAdd.nextLine(); 
    MP3_catalogue.title.add(newSong); 
    System.out.println("Enter artist name"); 
    String newArtist = songAdd.nextLine(); 
    MP3_catalogue.artist.add(newArtist); 
    System.out.println("Enter duration"); 
    String newDuration = songAdd.nextLine(); 
    MP3_catalogue.duration.add(newDuration); 
    System.out.println("Would you like to add another song? Y/N"); 
    ceaseAdd = addContinue.nextLine().toUpperCase(); 
} 
2

除了字符串檢查已經指出。缺少{}。適當的縮進你的代碼看起來是這樣的:

while(ceaseAdd != "N") 
    System.out.println("Enter track title"); 
String newSong = songAdd.nextLine(); 
MP3_catalogue.title.add(newSong); 
System.out.println("Enter artist name"); 

沒有{}while只適用於第一線。它應該是這樣的:

while(!ceaseAdd.equals("N")){  
    System.out.println("Enter track title"); 
    String newSong = songAdd.nextLine(); 
    MP3_catalogue.title.add(newSong); 
    System.out.println("Enter artist name"); 
    String newArtist = songAdd.nextLine(); 
    MP3_catalogue.artist.add(newArtist); 
    System.out.println("Enter duration"); 
    String newDuration = songAdd.nextLine(); 
    MP3_catalogue.duration.add(newDuration); 
    System.out.println("Would you like to add another song? Y/N"); 
    ceaseAdd = addContinue.nextLine().toUpperCase(); 
}