2013-03-22 231 views
-2

正如標題所述,我試圖找到最大值和最小值,均值和賠率數量以及所有輸入數字的平均值。查找最小值,最大值,平均值,賠率和平均值。 Java

問題所在。當我運行我的代碼時,我的賠率和平均值計數器看起來與它們相反,奇數會讀取偶數輸入,甚至會讀取奇數輸入。至於我的平均水平,我不知道它有什麼問題,我所知道的是它只能找到適當分數的平均值。

我的輸出示例將粘貼在最後。

import java.util.Scanner; 

public class Homework7APrinter 
{ 
    public static void main (String[] args) 
    { 
     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 = Integer.MIN_VALUE; 
     double average = 0; 
     boolean notnull = true; 

     while(scan.hasNextInt()) 
     { 
      if(true) 
      { 
       if (getInt%2==1) 
       { 
        evensCounter++; 
        System.out.println("even: " + evensCounter); 
       } 
       else 
       { 
        oddsCounter++; 
        System.out.println("odd: " + oddsCounter); 
       } 

       getInt = scan.nextInt(); 

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

      sum += getInt; 
      System.out.println("sum " +sum); 
      count++; 
      System.out.println("count " +count); 
      average = 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 
1 //first input 
odd: 1 
sum 1 
count 1 
average 1.0 
2 //second input 
even: 1 
sum 3 
count 2 
average 1.0 
3 //third input 
odd: 2 
sum 6 
count 3 
average 2.0 
4 //fourth input 
even: 2 
sum 10 
count 4 
average 2.0 
q //quit the scan 
smallest: 1 
largest: 4 
even: 2 
odd: 2 
average: 2.0 //average of 1, 2, 3, 4 = sum/n = 10/4 = 2.5 not 2.0 

任何幫助,將不勝感激。謝謝!

+2

你需要之前投下您和作爲'double'或'float'劃分,以獲得浮點結果。 – 2013-03-22 06:30:31

+0

i猜它應該是如果(getInt%2 == 0) – 2013-03-22 06:30:54

+0

這是死代碼,它永遠不會去其他 notnull = false; } 既然你的條件是如果(真),它永遠是真的 – Abi 2013-03-22 06:31:42

回答

0

(getInt%2==1)實際上是奇數校驗,它應該是getInt%2==0用於偶校驗

0

很少東西 -

  1. 移動getInt = scan.nextInt(); (真)條件後立即
  2. 平均使它 - 平均=(雙)總和/(計數);
  3. 對於奇/偶問題做出這種改變 - 如果(getInt%2 == 0)

因此,這裏是你和一些乾淨的上調

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); 
+0

偶奇的問題是,因爲他是在打印錯誤 – Joe2013 2013-03-22 06:48:27

0

這段代碼是什麼youre尋找

while(scan.hasNextInt()) 
     { 

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

       //getInt = scan.nextInt(); 

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

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

有在你的程序錯誤5

  1. 您打印錯誤(System.out.println(「even:」+ oddsCounter))。即使應打印爲偶數計數器

  2. 您必須使總和也是雙精度或浮點數才能得到十進制格式的平均值。

  3. 在進行奇偶測試之前,您必須先閱讀getINT。

  4. 偶數/奇數計算錯誤。它應該是getInt%2 == 0

  5. 在計算最小值和最大值時,您不應該有if/else。它應該是兩個獨立的如果

下面的全部工作程序。

package com.stackoverflow.test; 

import java.util.Scanner;

公共類Homework7APrinter { 公共靜態無效的主要(字串[] args){ 的System.out .println(「輸入整數的序列。任何非整數退出「); 掃描儀掃描新=掃描儀(System.in); INT分鐘= Integer.MAX_VALUE的; INT最大= Integer.MIN_VALUE的; 詮釋計數= 0; 雙總和= 0; INT oddsCounter = 0; INT evensCounter = 0; INT getInt = 0; 雙平均= 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; 
     } 

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

     sum += getInt; 
     // System.out.println("sum " +sum); 
     count++; 
     // System.out.println("count " +count); 
     average = sum/(count); 
     // System.out.println("average " +average); 
    } 
    System.out.println("*****************"); 
    System.out.println("smallest: " + min); 
    System.out.println("largest: " + max); 
    System.out.println("even: " + evensCounter); 
    System.out.println("odd: " + oddsCounter); 
    System.out.println("average: " + average); 
    System.out.println("sum: " + sum); 
    System.out.println("count: " + count); 
} 

}

+0

您好喬,如果我輸入 q 數量最多的是某種7 – user2197917 2013-03-22 08:54:59

+0

嘿用戶......那是因爲別人的分,如果最大計算錯誤。我修改了程序。 – Joe2013 2013-03-25 05:33:50

相關問題