2014-10-12 1 views
0

Я пишу программу для класса, которая является проверкой високосного года. У меня есть петля, работающая от того, что я понимаю, однако она все еще идет в бесконечный цикл? Zero не завершает программу. Я пытался использовать else, если, если, хотя, что я сделал неправильно? Это мой третий шаг, переписывая это, и я полностью потерялся сейчас. Любая помощь или советы будут оценены.Cant выяснить, как выйти из цикла моей программы

import java.util.Scanner; 


public class LeapYearChecker { 
public static void main(String[] args){ 
    System.out.println("Please enter a date to find out if the year is a leap year."); 
    Scanner userInput = new Scanner(System.in); 
    int year = userInput.nextInt(); 

    while(year == 0) 
    { 
     System.out.println(); 
    } 
    if (year < 1582){ 
     System.out.println("Please enter a date after 1582. The date you entered was" + year + "."); 
    }if((year % 4 == 0) && (year % 100 !=0) || (year % 400 == 0)){ 
       System.out.println("That is a leap year"); 
      }else{ 
       System.out.println(year +" is not a leap year."); 
      } 
     } 

} 
+1

Вы реальная потребность узнать петли может быть [это] (http://stackoverflow.com/questions/26287356/learning-basic-loops) может помочь с базовым пониманием. – StackFlowed

ответ

0
while (year == 0) 
{ 
    System.out.println(); 
} 

Там ваша проблема, если год 0, ваша программа будет бесконечно выходу A новой линии.

Кроме того, ваш ifs для проверки, является ли он високосным годом, не находится внутри тела цикла, поэтому, даже если вы вводите ненулевой номер, код будет запускаться только один раз.

Попробуйте следующий код, не забудьте прочитать комментарии, чтобы понять, что происходит:

public static void main(String[] args) 
{ 
    Scanner in = new Scanner(System.in); 
    int year = -1; //Give your int a default value so the main loop will execute 
    while (year != 0) //-1 not equal to zero, so your code will start 
    { 
     System.out.print("Please enter a year: "); //Now we get the value of the year 
     year = in.nextInt(); //Put it into our variable 
     if (year < 1582) //And if it's less than 1582 
     { 
      if (year != 0) 
       System.out.println("Year must not be less than 1582!"); //Notify the user, unless they are exiting the program 
      continue; //restart the while loop, this is quite a useful statement! 
     } 
     if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) //Check if it's a leap year 
      System.out.println("That is a leap year!\n"); 
     else 
      System.out.println("That is not a leap year :(\n"); 
     //End of the loop, so it goes back to the beginning, which asks the user again for the year 
     //So if you enter 0 next the program will close 
    } 
} 
+0

Ты потрясающий, большое спасибо! Я понимаю, что мне нужно больше тренироваться с петлями. Я немного волнуюсь, я имею в виду, что я их понимаю, просто не могу понять их. (В моей Java-книге я стараюсь делать exersizes, но даже тем, с кем мне сложно узнать, что делать на всех Я не уверен, что автор дает проекты, которые превышают уровень каждой главы или что-то такое, но меня беспокоит, как будто, возможно, это не для меня? Я люблю делать проекты, когда понимаю их, но когда-либо Я потерялся, как эта глава цикла (это единственный, с которым у меня было много проблем). Я взволнован – wwe9112

0

Первый цикл бесконечен. Вы забыли прочитать вход пользователя внутри.

+0

Спасибо за помощь! Я не мог вытащить его из петли; но я понимаю, что вы говорите. Я все еще немного уверен в сканерах, хотя я поправляюсь! Еще раз спасибо за помощь! – wwe9112

0

Ваша петля запускается только в том случае, если пользователь вводит 0. И как только они это сделают, ваша программа будет застревать в бесконечном цикле, так как вы не изменили значение year внутри вашего времени.

Я предполагаю, что вы хотите, чтобы пользователь продолжал вводить цифры до тех пор, пока они не войдут в 0? Затем я бы реструктурировал ваш основной метод, чтобы он окружал код, в котором вы извлекаете и обрабатываете ввод. Как так:

System.out.println("Please enter a date to find out if the year is a leap year."); 
Scanner userInput = new Scanner(System.in); 
int year; 

do { 
    year = userInput.nextInt(); 

    /** 
    * Print some message based input. 
    */ 
} while (year != 0); // Loop until user enters 0 
+0

Большое вам спасибо за помощь! Я ценю это. Я знаю, что есть утилита каландра, которую вы можете технически использовать, но я не хотел ее использовать, так как он никогда не проходил ее. Я испортил это, но я не хотел беспокоиться об обмане или что-то еще. Я, очевидно, не обманываю LOL, но я провел много часов и все еще получал одинаковые проблемы, поэтому решил попросить у вас ребят! Большое вам спасибо за помощь! – wwe9112

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