2017-09-22 3 views
3

나는 사용자가 제공하는 각 입력이 max 또는 모든 입력 중 min 있는지 확인하고 변수 high 또는 low는 사용자 입력의 최대 및 최소를 결정하는 데 도움이 필요

int inputnum = 0; 
    double sum = 0; 
    double lastinput = 0; 
    double high; 
    double low; 
    double average; 
    Scanner input = new Scanner(System.in); 
    high = 0; 
    low = 0; 
do { 
    System.out.println("Enter a number. Type 0 to quit."); 
    lastinput = input.nextDouble(); //reads input 
    sum += lastinput; //add to sum 
    if (lastinput != 0) { 
     inputnum += 1; //counts number of inputs (except 0) 
    } 
    if (lastinput > high && lastinput != 0) { 
     high = lastinput; 
    } 
    if (lastinput < low && lastinput != 0) { 
     low = lastinput; 
    } 

    average = (sum/inputnum); 

} while (lastinput !=0); //repeat unless user inputs 0 
에 해당 입력을 할당하는 것을 시도하고있다

문제는 값을 지정하지 않고 변수를 선언 할 수 없다는 것입니다 (예 : 0). 사용자가 3, 57을 입력하면 low 값은 여전히 ​​0으로 정의됩니다.

답변

2

문제는 다음과 같은 조건입니다 : 변수 low 처음에 0

if (lastinput < low && lastinput != 0) { 
    low = lastinput; 
} 

공지있다. 낮은 초기화한다 :

  1. 가 감시 값을 사용 그래서 0이 몇 가지 논리적 인 해결책이 될 수 있습니다 실제 최소 0보다 높은 경우, 다음이 low의 값에 영향을주지 않습니다 때문에 사용자 입력은 항상 낮은 있도록 이중의 가장 높은 값은 따라서 low

    double low = Double.MAX_VALUE; 
    
  2. 변경의 가치에 영향을 미치는 조건가있는 경우 : 당신은을 변화시킬 수3210 조건은 초기 값은 lowhigh의 값은 루프 전에 첫 번째 입력에 의해 이니셜 수 0

    if (low==0 || (lastinput < low && lastinput != 0)) { 
        low = lastinput; 
    } 
    
+1

입력이 없으면 두 번째 솔루션은 첫 번째 솔루션의 이상한 동작을 제거합니다 (이 경우 첫 번째 솔루션에는 '낮음>'높음 '이 있음). +1 –

+0

예 @JiriTousek. 그러나 이것은 단순한 경우 일 뿐이며 프로그래머가 원하는 방식으로 처리 될 수 있습니다. 그것은 코더에서 코더에 달려 있습니다. – 97amarnathk

2

low을 0으로 초기화하면 입력 한 값이 모두 커지므로 업데이트되지 않습니다. 가능한 가장 높은 값인 low = Double.MAX_VALUE;에 다른 값을 지정해야합니다.

마찬가지로, 당신은 항상 false 0이 출력으로 남아있을 것입니다 기본 또는 비 음성 입력을위한 다른 조건 lastinput < low에 의해 low에 대한 최대 값을 사용해야합니다

high = Double.MIN_VALUE; 
+1

'double'입니다. :) – nullpointer

+2

@nullpointer right, thanks :) – TDG

+0

몇 가지 테스트 케이스가 있습니다. 이것은 정확히 예상대로 작동합니다. 그러나 '-1', '-2', '-3', '0'을 입력하면 최소값은 '4.9E-324'로 표시됩니다. 무엇이 원인인가? – bigfacts

1

로 높은 초기화해야한다.

double low = Double.MAX_VALUE; 
0

있다는 사실을 설명한다.

관련 문제