2017-02-11 12 views
0

Я должен выйти из цикла, если пользователь вводит конкретный вход. Но я не могу это сделать, используя цикл if, чтобы вырваться из цикла while. Я также пытался использовать то же условие в цикле while, но это тоже не работает.Невозможно выйти из цикла while.

import java.util.Scanner; 

public class Main { 
    public static void main(String[] args) {  
     String quit; 
     Scanner c = new Scanner(System.in); 

     while (true) { 
      leapOrNot y = new leapOrNot(); 
      System.out.println("press x to stop or any other letter to continue"); 
      quit = c.next(); 
      if (quit == "x" || quit == "X") { 
       break; 
      } 
     } 
    } 
} 

class leapOrNot { 
    final String isLeap = " is a leap year."; 
    final String notLeap = " is not a leap year."; 
    int year; 
    public leapOrNot() { 
     Scanner a = new Scanner(System.in); 
     System.out.println("Enter a year after 1581: "); 
     year = a.nextInt(); 
     /* if (a.hasNextInt() == false) { 
      System.out.println("Enter a 4 digit integer: "); 
      year = a.nextInt(); 
     } 
     couldn't make this condition work either 
     */ 
     while (year < 1582) { 
      System.out.println("The year must be after 1581. Enter a year after 1581: "); 
      year = a.nextInt(); 
      continue; 
     } 

     if (year % 4 == 0) { 
      if(year % 400 == 0 && year % 100 == 0) { 
       System.out.println(year + isLeap); 
      } 
      if (year % 100 == 0) { 
       System.out.println(year + notLeap); 
      } 
      else { 
       System.out.println(year + isLeap); 
      } 
     } 
     else { 
      System.out.println(year + notLeap); 
     } 
    } 
} 
+0

Совет. 'C.next() toLowerCase()' поможет уменьшить равенство –

+0

Не сравнивайте строк с помощью '==' или '='!. Используйте вместо этого метод 'equals (...)' или 'equalsIgnoreCase (...)'. Поймите, что '==' проверяет, соответствуют ли две ссылки на объекты *, которые вас не интересуют. Методы, с другой стороны, проверяют, имеют ли две строки одни и те же символы в одном порядке, и это то, что дело здесь. –

ответ

0

Предполагается использовать String.equals(). Замены ни с одним из этих двух

  • if (quit.charAt(0) == 'x' || quit.charAt(0) == 'X')
  • if (quit.equals("x") || quit.equals("X"))

Любой из вышеперечисленных будет работать нормально.

или просто использовать if(quit.equalsIgnoreCase("x"))

+0

'equalsIgnoreCase' было бы предпочтительнее –