2013-03-23 2 views
-1

제목에 명시된 바와 같이 최대 값과 최소값, 평균값과 확률값, 그리고 입력 된 모든 숫자의 평균을 찾으려고합니다.부정확 한 가장 큰 입력

문제가 있습니다. 내 코드를 실행하면 내 확률과 동등한 카운터가 반대쪽을 읽는 것처럼 보이고 홀수는 짝수 번째 입력을 읽고 심지어 홀수 입력을 읽습니다. 나의 평균에 관해서는, 나는 그것이 무엇이 잘못 되었는가에 대한 단서를 가지고 있지 않다. 나는 그것이 알맞은 분율의 평균만을 발견 할 것이라는 것을 안다. I 입력이 종료로

또한, 나는 마지막에 붙여 넣을 수 있습니다 내 가장 많은 내 출력의 214XXXXXXXX

예를 얻을.

System.out.println("Enter a sequence of integers. Any non-integer to quit"); 
Scanner scan = new Scanner(System.in); 
int min = Integer.MAX_VALUE; 
int max = 0; 
int count = 0; 
int sum = 0; 
int oddsCounter = 0; 
int evensCounter = 0; 
int getInt; 
double average = 0; 

while (scan.hasNextInt()) { 

    getInt = scan.nextInt(); 
    if (getInt % 2 == 0) { 
     evensCounter++; 
     System.out.println("even: " + evensCounter); 
    } else { 
     oddsCounter++; 
     System.out.println("odd: " + oddsCounter); 
    } 

    if (getInt < min) { 
     min = getInt; 
    } else if (getInt > max) { 
     max = getInt; 
    } 

    sum += getInt; 
    System.out.println("sum " + sum); 
    count++; 
    System.out.println("count " + count); 
    average = (double) sum/(count); 
    System.out.println("average " + average); 
} 

System.out.println("smallest: " + min); 
System.out.println("largest: " + max); 
System.out.println("even: " + oddsCounter); 
System.out.println("odd: " + evensCounter); 
System.out.println("average: " + average); 

결과 :

Enter a sequence of integers. Any non-integer to quit 
9 //input 1 
odd: 1 
sum 9 
count 1 
average 9.0 
3 //input 2 
odd: 2 
sum 12 
count 2 
average 6.0 
7 //input 3 
odd: 3 
sum 19 
count 3 
average 6.333333333333333 
1 //input 4 
odd: 4 
sum 20 
count 4 
average 5.0 
q //input 5: QUIT 
smallest: 1 
largest: 7 //This should be 9 
even: 0 
odd: 4 
average: 5.0 

결과 2 : 어떤 도움을 주시면 감사하겠습니다

Enter a sequence of integers. Any non-integer to quit 
q //quit 
smallest: 2147483647 //This should be 0 
largest: 0 
even: 0 
odd: 0 
average: 0.0 

. 고맙습니다!

답변

0

첫 번째

9에는 할당되지 않았습니다. 9 < min부터 코드는 min = getInt;을 평가하고 else if 부분을 건너 뜁니다.

그것은해야한다 : 숫자 minmax 모두가 될 수

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

if (getInt > max) 
{ 
    max = getInt; 
} 

때문입니다. 둘째

smallest: 2147483647 //This should be 0 

당신이 문자를 입력하지만 (int로 입력을뿐만 아니라 저장) getInt = scan.nextInt();를 사용하여 정수로 스캔하기 때문에 이런 일이.

입력에서이 스캔을 먼저 String으로 수정할 수 있습니다. 그런 다음 입력이 int인지 확인하려면 method을 작성하여 입력이 int인지 아닌지를 판별하십시오. :

public static boolean isInteger(String s) 
{ 
    try 
    { 
     Integer.parseInt(s); 
    } 
    catch(NumberFormatException e) 
    { 
     return false; 
    } 
    // only got here if we didn't return false 
    return true; 
} 

그런 다음 계산을하기 전에 입력이 정수인지 확인하십시오.

+0

내가 동안을 가져야한다 (isInteger (scan.nextLine())) – user2197917

+0

그래. 내 어리석은 실수 : | –

+0

새 코드가 첫 번째 입력을 완전히 건너 뜁니다. 그래서 내가 가지고있는 동안 (isInteger (scan.nextLine())) 난 아직도 두 번째 문제를 얻이 수없는 것 – user2197917

0

getInt가 max보다 큰지 확인하기 전에 다른 항목을 제거하십시오. 두 조건을 모두 확인해야하므로 다른 위치에 두지 마십시오.

0

다른 문제에 관해서는 min을 0으로 초기화해야합니다. 그런 다음 입력이 첫 번째인지 확인하고, 그렇다면 min을 설정하십시오. 위의 코드

boolean isFirst = true; 
while (scan.hasNextInt()) { 

getInt = scan.nextInt(); 
if(isFirst) 
{ 
    min = getInt; 
    isFirst=false; 
} 
//Rest of your code 

}

+0

이렇게하면 가장 작은 intger를 0으로 계속 읽습니다. Hmm – user2197917

+0

while 루프가 min을 scan.nextValue()로 입력하고 isFirst = false를 설정할 때 부울'isFirst = true'를 정의하십시오. . –

+0

새 코드를 확인할 수 있습니까? 새로운 답변 끝 – user2197917

0
if (getInt < min) { 
     min = getInt; 
    } else if (getInt > max) { 
     max = getInt; 
    } 

변경은 아래에 언급 한 바와 같이. 두 조건을 모두 확인하여 다른 조건으로 변경해야합니다.

는 경우에 - 조건이 만족되면 다른 경우

해당 문은 실행하고 나머지 조건은 평가되지 않습니다. 그동안 루프에 대한

if (getInt < min) { 
     min = getInt; 
    } 
if (getInt > max) { 
     max = getInt; 
    } 
+0

시퀀스 -3, -2, -1에 넣으면 출력은 가장 작을 것이다 : -3, 가장 큰 : 0 – user2197917

+0

@ user2197917 if() if() if not if() else if(). if() else if()는 적절한 문장 하나만 실행합니다. if()를 한번 사용해보십시오. –

+0

고마워요! 알 겠어! – user2197917