2017-11-08 14 views
-1

나는 0 범위에서 사용자가 입력 한 숫자의 짝수의 합계를 인쇄하는 프로그램을 만들고 있습니다. 예를 들어, 사용자가 20 번을 입력하면 프로그램은 0과 20 사이의 모든 짝수의 합계를 계산합니다.자바 프로그램 무한 루프 짝수 정수의 합계

번호가 10 인 프로그램을 테스트했을 때 효과적이었습니다. 하지만 다른 숫자 인 35를 사용해 보았는데 무한 루프에 막 달라 붙었습니다. 나는 모든 도움에 감사 할 것입니다. 코드는 아래에 게시됩니다 :

(편집) 피드백을 보내 주셔서 감사합니다! 친구와 이야기를 한 후에, 우리는 그 해결책이 실제로 매우 간단하다는 것을 깨달았습니다. 우리는 단지 그것을 복잡하게 만들고있었습니다. 그래도 모든 제안에 감사드립니다.

//************************************************************** 
// Prints the sum of the even numbers within a range of 0 
// and the integer that the user enters. 
// 
// @me 
// @version_1.0_11.7.17 
//************************************************************** 
import java.util.Scanner; 

public class EvenNumbersSum 
{ 
    public static void main(String[] args) 
    { 
     Scanner input = new Scanner(System.in); 
     int user_num = 2; // variable that stores the user's number 
     int sum; // stores the sum of the needed values 

     System.out.print("Enter an integer greater than or equal to, 2: "); // prompt user for input 
     user_num = input.nextInt(); 

     // checks to see if the value entered is valid or not. 
     while (user_num < 2) 
     { 
      System.out.println("Invalid entry. Must enter an integer greater than or equal to, 2.\n"); 
      System.out.print("Enter an integer greater than or equal to, 2: "); 
      user_num = input.nextInt(); 
     } 

     // starts adding the values 
     for (sum = 0; sum <= user_num;) 
     { 
      if (user_num % 2 == 0) // checks if the number is even 
       sum+=user_num; // add the number to sum 
      else 
       continue; // I thought that I might need this, but ended up changing nothing. 
     } 

     System.out.println(); // extra line for cleanliness 
     System.out.printf("The sum of the even numbers between 0 and %d is %d.", user_num, sum); // prints the result 
    } 
} 
+0

user_num은 for 루프 내에서 변경되지 않습니다. 입력을 다시 받아 들여야합니다. –

+0

for 문에서'term '을'user_num'과 비교하는 이유는? – John3136

+0

'for (sum = 0; sum <= user_num;)'이 맞지 않습니다.'user_num' 번을 반복하고 싶지 않으십니까? 그런 다음이 값을 사용하여 숫자를 합산할지 여부를 결정하십시오. – MadProgrammer

답변

1

왜 루프를 작성하고 있습니까? 효율적인 방법이 있습니다.

Sum of numbers between 1-N = (N(N+1))/2 

Sum of even numbers between 1-N = (N(N+2))/4 

여기서 N = 당신이

참고 짝수 추가하고자하는 때까지 사용자의 입력 번호 부여 : 당신이 그것을로도 있다는 입력 번호 유효성 검사를 추가 할 수 있습니다 (N % 2 == 0) 그것은

0

당신이 상태에서 사용한 변수가 아니라면 오류를 반환 (예 : & user_num) 아무도 홀수의 경우 변경하지 않고 코드가 루프를 끝없는에 붙어. 카운터 변수 (예 : , 1에서 user_num까지)를 사용하고 해당 숫자를 조건에 사용해야합니다. 예 :

// starts adding the values 
    sum = 0; 
    for (int i = 0; i <= user_num; i++) 
    { 
     if (i % 2 == 0) // checks if the number is even 
      sum+=i; // add the number to sum 
    } 
0

for 루프는 이와 같아야합니다.

int total_sum = 0; 
for (int sum = 0; sum <= user_num; sum++) 
     { 
      if (sum % 2 == 0) // checks if the number is even 
       total_sum+=sum; // add the number to total sum 
      else 
       continue; // I thought that I might need this, but ended up changing nothing. 
     } 
// note print total sum 
System.out.println(totalsum); 

입력 한 번호를 계속 확인하는 초기 프로그램은 짝수 또는 홀수입니다. 그리고 합계로 입력 한 숫자. 입력 한 숫자의 합이 항상 두 배로되어 있기 때문에 짝수입니다. 입력 된 숫자가 홀수 인 경우 입력 된 숫자가 홀수 인 경우 무한 루프가됩니다 (홀수) % 2 == 0 항상 거짓이며 else 문을 실행합니다.

+0

입력 해 주셔서 감사합니다. 방금 몇 분 전에 제 코드가 무엇을하는지 깨달았습니다. 나는 그 순간에 막 잡혔고 생각하지 못했을 것 같다. 나는 그것을 고치고 갱신을 시도 할 것이다! – Alphox