2013-03-28 4 views
3

Java 클래스에 대한 과제를 도와 줄 수 있다면 크게 감사하겠습니다. 질문의 프롬프트는 다음과 같습니다.Java 루프를 종료하는 방법은 무엇입니까?

음수가 아닌 정수의 목록을 읽고 모든 정수의 가장 큰 정수, 가장 작은 정수 및 평균을 표시하는 프로그램을 작성하십시오. 사용자는 가장 큰 값, 가장 작은 값 및 평균값을 찾는 데 사용되지 않는 음의 센티널 값을 입력하여 입력의 끝을 나타냅니다. 평균은 분수 부분으로 계산되도록 double 유형의 값이어야합니다.

내 코드를 겪고있어 문제는 실행할 때 입력 한 첫 번째 값이 음수하지 않는 한, 루프가있는 경우는 반환 완료되지 않는다는 것입니다 :

최대 수는 입력했다 : 0 최소 입력 수 : 0 입력 한 숫자의 평균은 다음과 같습니다. NaN

도와주세요! 감사. - 샘

코드 : 코멘트에서

while (in>=0) 
{ 
    if (in>max){ 
     max=in; 
    } 
    if (in<min){ 
     min=in; 
    } 
    sum += in; 
    count++; 
    in = keyboard.nextInt(); 
    //Check not needed here, handled by while loop 
    //if (in<0){ 
    //  break; 
    //} 
} 

편집 : 당신은 루프 당신 안에 다시 nextInt을 읽을 필요가

package blah; 
import java.util.Scanner; 
public class blahblah 
{ 
    public static void main(String[] args) 
    { 
     Scanner keyboard = new Scanner(System.in); 
     System.out.println ("Please enter a list of positive integers."); 
     System.out.println ("Please enter a negative integer when finished."); 

     int in = 0; 
     int max = 0; 
     int min = 0; 
     int sum = 0; 
     int count = 0; 
     in = keyboard.nextInt(); 

     while (in>=0) 
     { 
      if (in > max) { 
       in = max; 
      } 
      if (in < min) { 
       in = min; 
      } 
      sum += in; 
      count++; 
      if (in < 0) { 
       break; 
      } 
     } 

     System.out.println("The maximum number entered was: " + max); 
     System.out.println("The minimum number entered was: " + min); 
     System.out.println("The average of the numbers entered was: " + (double)sum/count); 
    } 
} 
+2

루프 안에 - – Randy

+0

의 값을 절대로 변경하지 마십시오 또한'in = max;'를'max = in;'등으로 변경해야합니다. Assignment는 오른쪽 값을 변수에 넣습니다 왼쪽에. – iamnotmaynard

답변

3

과제는 잘못된 방향으로 가고 있었다 당신이 입력을 설정했다 있도록 최소/최대를 입력과 동일하게 설정하는 대신 최소/최대와 같습니다.

+0

이것은 내 결말의 루프를 해결했습니다! 고맙습니다. 그러나 이제는 내 프로그램에서 최대 최소값과 평균값이 모두 0이라고 반환합니다. 내 논리의 문제는 무엇입니까? – Sleepy

+0

@SamPeezick 왜냐하면 당신은 = min 대신에 = –

0

사용자로부터 입력을 다시 읽어야합니다. 대신 :

in = keyboard.nextInt(); 
while (in>=0) { 
    if (in>max){ 
     in=max; 
    } 
    if (in<min){ 
     in=min; 
    } 

    sum += in; 
    count++; 
    if (in<0){ 
     break; 
    } 
} 

사용 :

in = keyboard.nextInt(); 
while (in>=0) { 
    if (in>max){ 
     in=max; 
    } 
    if (in<min){ 
     in=min; 
    } 

    sum += in; 
    count++; 

    // removed if, since loop checks it. 

    in = keyboard.nextInt(); // read on! 
} 
1

이동 내부 입력 의 읽기 루프, 그리고 부정에 휴식 :

while (true) { 
    in = keyboard.nextInt(); 
    if (in < 0) break; 
    // rest of loop 
} 

이 더 나은 appraoch은을 사용하는 것입니다 for 루프는 모든 루프 관련 로직을 멋지게 묶습니다 :

반복 코드를 분리
for (int in = keyboard.nextInt(); in >= 0; in = keyboard.nextInt()) { 
    // your current loop code 
} 

는 반복 코드를 어떤 코드 명확하게하고 이것은 또한 당신이하지 않는 것을 의미

를 읽고 이해하기 쉽게 보내고 만드는 프로그램의 작업에 완전히 전용으로 루프 코드를 잎 int in을 선언해야하며 가능한 한 변수의 범위를 줄이는 것이 좋습니다.이 경우 in은 루프 내에서만 사용되며/사용되는 유일한 장소입니다.

+0

에서 @jlordo 예 - 더 나은 대체 IMHO를 포함하여 이미 다루었습니다 : – Bohemian

+0

왜 안 되죠? (while = keyboard.nextInt())> = 0)'? –

+0

@ PM77-1 * 할 수는 있지만 이런 종류의 구문을 사용하는 것은 좋지 않습니다. CheckStyle 플러그인은이 문제를 고려합니다. 'for' 루프를 사용하는 것에 대한 편집을 참조하십시오. 이것은 명확하고 깨끗합니다. – Bohemian

0

변경 당신은 내가 값을 읽기 위해 사용자로부터

1

당신의 문을 더 많은 값을 받고 수 있도록 in = keyboard.nextInt();을 추가 한 볼 수 있듯이

in = keyboard.nextInt(); 
while (in>=0){ 
    if (in>max){ 
     in=max; 
    } 

    if (in<min){ 
     in=min; 
    } 

    sum += in; 
    count++; 
    in = keyboard.nextInt(); 
} 

에 코드가 있으므로, while 루프 안에 아니다

in = keyboard.nextInt(); 
while (in>=0) 
{ 

} 

변경에 :

,536 첫 번째 항목을 읽고
in = keyboard.nextInt(); 
while (in>=0) 
{ 
    ... stuff ... 
in = keyboard.nextInt(); 
} 
0

동일한 변수 "in"에 값을 넣으십시오.

= max;

다른 방법이어야합니다.

max = in;

관련 문제