2016-09-05 2 views
1
import java.util.Scanner; 
public class Lab4 
{ 
    public static void main(String[] args) 
    { 
     Scanner in = new Scanner(System.in); 
     System.out.print("Please enter integers (Zero to exit): "); 

     //integers by value 
     int n = in.nextInt(); 
     int evenNumber = -1; 
     int oddNumber = 0; 
     int count = 0; 
     int largest = n; 
     int smallest = n; 
     int counter = 1; 
     int total = 0; 
     int average = 0; 

     //boolean to end loop 
     boolean done = false; 

     //start of loop 
     while (!done) 
     { 
      n = in.nextInt(); 
      total = total + n; 
      //end loop method 
      if (n == 0) 
      { 
       done = true; 
      } 
      //count number of integers entered 
      else 
      { 
      count = count + 1; 
      } 
      //count of even numbers 
      if (n % 2 == 0){ 
       evenNumber = evenNumber + 1; 
      } 
      //count of odd numbers 
      else 
      { 
       oddNumber = oddNumber + 1; 
      } 
      //find min and max integers !NOT WORKING! 
      if (n > largest){ 
      } 
      if (n < smallest){ 

      } 
      if (count > 0){ 
       average = total/count; 
      } 
      else{ 
        System.out.println("No Data Entered."); 
       } 
      counter++; 
     } 
     System.out.println("Total number of integers entered is: "+ count); 
     System.out.println("Total even numbers entered: "+ evenNumber); 
     System.out.println("Total odd numbers entered: "+ oddNumber); 
     System.out.println("The largest integer: "+ largest); 
     System.out.println("The smallest integer: "+ smallest); 
     System.out.println("The average value is: "+ average); 
    } 
} 

위의 코드는 위의 코드와 같습니다. 모든 것을 시도했지만 오류가 발생하지 않았지만 가장 작고 큰 반환이 올바르게 반환되지 않습니다. 최대 정수 만 가져옵니다. 사용자가 음의 정수를 입력하는 경우에만 양수이고 최소값. 어떤 도움이 굉장 할 것입니다!찾기 while 루프의 최대 정수 및 최소 정수

+0

가'내가 everything'을 시도 자동으로 –

+1

@Tim은 최대 및 최소를 추적하는 약간의 헤비급 접근 방식입니다! –

+1

"사용자가 음수를 입력하는 경우 양수가 최소 인 경우 최대 정수 만 가져옵니다."이것은 코드에 표시된 것과 다른 최대 및 최소 초기 값으로 0을 사용했음을 의미합니다. –

답변

3

당신은 각각 smallestlargest를 찾을 수 Math.min(int, int)Math.max(int, int)를 사용할 수 있습니다. count 중 하나만 필요합니다. ,을 사용하여 여러 개의 int 변수를 선언 할 수 있으며 코드를 더 만들려면 +++=을 사용합니다. idiomatic. 그리고 break을 사용하여 루프를 종료 할 수 있습니다. 또한 평균을 결정하기 위해 정수 연산을 수행하지 마십시오. 당신은 조건부 while 루프에서 테스트할당를 수행하여 break을 제거 할 수

// integers by value 
int n = in.nextInt(); 
int evenNumber = 0, oddNumber = 0, count = 0, total = 0; 
int largest = n, smallest = n; 
// start of loop 
while (true) { 
    n = in.nextInt(); 
    // end loop method 
    if (n == 0) { 
     break; 
    } 
    total += n; 
    count++; 
    // count of even numbers 
    if (n % 2 == 0) { 
     evenNumber++; 
    } else { 
     oddNumber++; 
    } 
    largest = Math.max(n, largest); 
    smallest = Math.min(n, smallest); 
} 
System.out.println("Total number of integers entered is: " + count); 
System.out.println("Total even numbers entered: " + evenNumber); 
System.out.println("Total odd numbers entered: " + oddNumber); 
System.out.println("The largest integer: " + largest); 
System.out.println("The smallest integer: " + smallest); 
double average = total/(double) count; 
System.out.println("The average value is: " + average); 

처럼 보일 수 있습니다 것을 함께 퍼팅

while ((n = in.nextInt()) != 0) { 
    total += n; 
    count++; 
    if (n % 2 == 0) { 
     evenNumber++; 
    } else { 
     oddNumber++; 
    } 
    largest = Math.max(n, largest); 
    smallest = Math.min(n, smallest); 
} 
+0

정말로 고맙다. 나는 2 일 동안 그것을 알아 내려고 노력했다. – TheMuffinMan

4

최대 또는 최소를 확인하고 있습니다. 그러나 당신은 임무를 수행하지 않습니다. 이 시도 :

if (n > largest){ 
    largest = n ; 
} 
if (n < smallest){ 
    smallest = n ; 
} 
+1

당신은 또한'n == 0' 일 때 깨뜨릴 필요가있다. –

0

(이것은 또 다른 매우 일반적인 관용구이다) 가능한 다른 해결책은 ListCollections을 사용하는 것입니다.

public static void main(String[] args) { 

    Scanner in = new Scanner(System.in); 
    List<Integer> list = new ArrayList<Integer>(); 

    int evenNumber=0; 
    int oddNumber=0; 
    int total=0; 
    int n; 

    System.out.print("Please enter integers (Zero to exit): "); 

    while(true){ 
     n = in.nextInt(); 
     if(n==0) { 
      break; 
     } else { 
      list.add(n); 
      total += n; 
      if(n%2==0){ 
       evenNumber++; 
      } else { 
       oddNumber++; 
      } 
     } 
    } 

    Collections.sort(list); 

    System.out.println("Total number of integers entered is: "+ list.size()); 
    System.out.println("Total even numbers entered: "+ evenNumber); 
    System.out.println("Total odd numbers entered: "+ oddNumber); 
    System.out.println("The largest integer: "+ list.get(list.size() - 1)); 
    System.out.println("The smallest integer: "+ list.get(0)); 
    System.out.println("The average value is: "+ total/list.size()); 
} 
0

오류가

if (n > largest) { 
    largest = n; // Probably already tried 
} 
if (n < smallest) { 
    smallest = n; // Probably already tried 
} 

갖도록 루프 전에 첫 번째 요소 (nextInt)를 사용하는 불행한 디자인 결정 필요 조합

int total = n; 
int average = n; 

했던 최대 정확하고 최소 초기화 아마도이 감독을 이끌었을 것입니다.

int largest = Integer.MIN_VALUE; 
int smallest = Integer.MAX_VALUE; 

을 0에 나머지를 initalize, 만 루프에서 nextInt 전화 :

또는 당신은 할 수 있었다.

average은 루프 내부에서 사용되지 않으므로 외부에서 확인할 수 있습니다. 당신은 거기 정수 나눗셈을하고, 그래서 반올림 고려해 볼 수 있습니다 : 최소 및 최대 추적 할`는 A 기능이 내장되어 TreeSet`을 사용한 것을 제외하고 ...

int average = count == 0 ? 0 : (total + count/2)/count; 
double average = count == 0 ? 0.0 : ((double) total) count;