2014-10-12 5 views
0

나는 윤년 검사기 인 수업을위한 프로그램을 작성 중이다. 나는 루프가 여전히 무한 루프에 들어간다는 것을 이해하지만 그렇게 작동합니까? Zero는 프로그램을 종료하지 않습니다. 나는 else, if, while, 무엇을 잘못 했는가? 이것은 제 3의 이것을 다시 쓰는 것에 가고, 지금 완전하게 잃어 버렸습니다. -_-. 도움이나 조언을 주시면 감사하겠습니다.내 프로그램의 루프를 빠져 나가는 방법 알아보기

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(); 
} 

프로그램이 출력에 새로운 라인에 무한합니다, 당신의 문제가있다.

윤년인지 확인하기위한 if는 루프 본문 안에 있지 않으므로 0이 아닌 숫자를 입력하더라도 코드는 한 번만 실행됩니다.

무슨 일이 일어나고 있는지 이해하기 위해 주석을 반드시 읽어보십시오, 다음 코드를보십시오 :

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

당신은 대단합니다, 대단히 감사합니다! 나는 루프를 가지고 더 많은 연습을해야한다는 것을 알고있다. 나는 내가 그들을 이해한다는 것을 조금은 걱정한다, 단지 그들의 교수형을 얻는 것처럼 보일 수 없다 :(. 자바 책에서 나는 exersizes를하려고 노력한다. 그러나 그것들조차도 나는 모두를 어떻게 해야할지 알지 못한다. 저자가 각 장의 수준 이상인 프로젝트를 제공하는지 확실하지 않지만, 이것이 나를위한 것이 아닌 것처럼 걱정하고 있습니까? 이해할 때마다 프로젝트를하는 것을 좋아합니다. 나는이 루프 장과 같이 길을 잃는다. (이것은 내가 많은 문제를 안고있는 유일한 것이다.) 나는 어리둥절하게된다. – wwe9112

0

첫 번째 루프는 무한합니다. 내부의 사용자 입력을 읽는 것을 잊었습니다.

+0

도움을 주셔서 감사합니다! 나는 그것을 루프에서 꺼낼 수 없었다. 그러나 나는 네가하는 말을 깨닫는다. 내가 스캐너가 더 좋아지고 있어도 여전히 조금은 iffy입니다! 도와 주셔서 다시 한 번 감사드립니다! – wwe9112

0

사용자가 0을 입력하면 루프가 실행됩니다. 잠시 후 year 값을 변경하지 않았으므로 프로그램이 무한 루프에 멈추게됩니다.

사용자가 0을 입력 할 때까지 계속 입력하라는 메시지를 계속 표시하려고한다고 가정합니다. 그런 다음 입력을 검색하고 처리하는 코드를 둘러 쌀 수 있도록 기본 메소드를 재구성합니다. 그래서 같이 : 올해가 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

도움을 주셔서 대단히 감사합니다! 나는 그것을 고맙게 생각한다. 기술적으로 사용할 수있는 캘린더 유틸리티가 있다는 것을 알고 있지만 결코 사용하지 않기 때문에 사용하지 않으려 고했습니다. 나는 그걸로 엉망으로 만들었지 만, 나는 속임수를 쓰거나 다른 것에 곤경에 빠지기를 원하지 않았다. 나는 명백하게 속임수를 쓰고 있지 않다. 그러나 나는 많은 시간을 보냈고, 나는 너희들에게 물어보기로했다. 도와 줘서 정말 고마워! – wwe9112

관련 문제