2015-10-09 2 views
0

Итак, я пробовал пару вещей с циклом while и не могу заставить его работать, я хочу продолжать запрашивать ввод пользователя до тех пор, пока пользователь вводит число 0, вот код, который я до сих пор, спасибо заранее:Java - Как использовать цикл while, чтобы продолжать запрашивать ввод пользователя

import java.util.*; 

public class Task10 { 

public static void main(String[] args) { 
    System.out.println("Enter a year to check if it is a leap year"); 
    Scanner input = new Scanner(System.in); 
    int year = input.nextInt(); 

    if ((year % 4 == 0) || ((year % 400 == 0) && (year % 100 != 0))) 
     System.out.println(year + " is a leap year"); 
    else 
     System.out.println(year + " is not a leap year"); 

} 

} 
+0

Ваш високосный год логика неверна. – khelwood

ответ

0

Вам нужно сделать что-то, чтобы держать вас входной ход цикла, пока условие остановки не встречается (в вашем случае является то, что, когда пользователь вводит 0)

// First get the scanner object with the input stream 
Scanner sc = new Scanner(System.in); 

// Just using do-while here for no reason, you can use a simple while(true) as well 
do{ 
    int input = sc.nextInt(); // read the next input 
    if (int == 0) { // check if we need to exit out 
     // break only if 0 is entered, this means we don't want to run the loop anymore 
     break; 
    } else { 
     // otherwise, do something with the input 
    } 
} while(true); // and keep repeating 
0

Используйте время цикла выше входной линии, как:

while(true) 

И, используйте if условие break ,

if(year == 0) 
    break; 

Кроме того, условие leap year неправильно в вашем коде. Оно должно быть:

if((year % 100 == 0 && year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)) 
    //its a leap year 
else 
    //its not 

PS: Как и в комментариях, я дам полный код:

import java.util.*; 

public class Task10 { 

public static void main(String[] args) { 
    System.out.println("Enter a year to check if it is a leap year"); 
    while(true){ 
    Scanner input = new Scanner(System.in); 
     int year = input.nextInt(); 
     if(year == 0) 
      break; 
     if((year % 100 == 0 && year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)) 
      System.out.println(year + " is a leap year"); 
     else 
      System.out.println(year + " is not a leap year"); 
    } 
} 

} 
+0

Спасибо, помощник, работал шарм. Все еще привыкнуть к петлям, и это объяснение утонуло! – Imminence

+0

@ Неудобство, хорошо. Просто примите его тогда :) – vish4071

0

Вы должны разместить вход, принимая код внутри цикла в то время как ANED выполнения в то время как петля недо год 0 или меньше.

public static void main(String[] args) { 
     int year = 1; 
     while(year > 0) 
     { 
      System.out.println("Enter a year to check if it is a leap year"); 
      Scanner input = new Scanner(System.in); 
      year = input.nextInt(); 
      if ((year % 4 == 0) || ((year % 400 == 0) && (year % 100 != 0))) 
       System.out.println(year + " is a leap year"); 
      else 
       System.out.println(year + " is not a leap year"); 
     } 


    } 
+0

Зачем вам делать область переменной 'year' локальной' main', когда она никогда не требуется за пределами цикла 'while'?! – vish4071

+0

@ vish4071 он уменьшает количество строк кода, которые нужно записать вместо того, чтобы сначала маркировать значение true, а затем проверять условие, если год равен 0, чтобы разбить цикл. Я чувствовал, что начинаю лучше понять этот способ – NightsWatch

+0

Это это плохая практика. Вы должны попробовать и объявить/определить переменные для использования только тогда, когда они требуются. Сделайте это «правилом большого пальца». Несколько LoC не влияют на проект, но объем переменных и памяти и т. Д. Имеет большое значение. – vish4071

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