2010-01-28 5 views
2

Я пишу цикл, который выйдет, когда сканер получит значение «конец» строки. Однако при тестировании с «конечным» значением цикл продолжается. Логически, если file = input, то if (file == "end") является ложным, хотя я набрал конец! Есть ли видимые ошибки в моем коде?Вход сканера Java неравный к себе?

String file = ""; 
    Scanner in = new Scanner(System.in); 
    ArrayList<Integer> fileInput = new ArrayList<Integer>(); 

    while(file!="end") { 
     // Scan for filename/end program 
     System.out.println("Provide the name of a file in the \"bin/\" folder, i will assume it's .txt"); 
     file = in.nextLine(); 

     System.out.println("." + file + "."); 
     if(file!="end") { 
      file= "bin/" + file + ".txt"; 

      // start reading 
      try { 
       // If file found then carry on 
       BufferedReader openFile = new BufferedReader(new FileReader(file)); 
       fileInput = readIn(openFile); 
       int lowerBound = getLower(fileInput); 
       int upperBound = getUpper(fileInput); 

       System.out.println("Lower Bound: " + lowerBound); 
       System.out.println("Upper Bound: " + upperBound); 

       // file not found 
      } catch (FileNotFoundException e) { 
       System.out.println("File not found!"); 
      } 
     } 
    } 
    System.out.println("Goodbye!"); 
    System.exit(0); 

ответ

5

В Java вы должны использовать .equals() для равенства строк; в противном случае это сравнительное сравнение.

String s1 = "end"; 
String s2 = "end"; // different string in memory 
s1 == s2   // false: not the same string 
s1.equals(s2)  // true: have the same characters 
"end".equals(s1) // also true 
"end" == s1   // false 

И да, это отстой.

+0

У него есть '(! (File.equals (" end ")))' в его коде –

+1

На самом деле все строковые литералы интернированы, поэтому в этом случае 's1 == s2' вернет true. – danben

+0

А это проблема. Я попробовал .equals, но использовал его неправильно! Спасибо. – Graeme

2

Я думаю, ваша проблема здесь:

if(file!=file2) { 
    file= "bin/" + file + ".txt"; 

Если вы вводите «конец» в два раза, вы перезаписать file до следующей проверки.

Кроме того, я думаю, что вы хотите

if(!file.equals(file2)) { 
    file= "bin/" + file + ".txt"; 

Edit: в ответ на ваш комментарий, просто переходя от == "end" к .equals("end") должны это сделать.

+0

Извините, я дал вам неправильный код. Код, над которым я фактически работаю, выше. Эта строка должна быть просто файлом! = "End". то же самое с утверждением while. – Graeme

+0

Даже при этом вы должны иметь 'if (! File.equals (" end "))' –

Смежные вопросы