【问题标题】:Finding Minimum, Maximum, Evens, Odds, and Average. Java查找最小值、最大值、偶数、赔率和平均值。爪哇
【发布时间】:2013-03-22 06:27:59
【问题描述】:

正如标题所述,我试图找出最大值和最小值、偶数和奇数的数量,以及所有输入数字的平均值。

问题。当我运行我的代码时,我的奇偶计数器似乎读取它们的相反值,奇数会读取偶数输入,偶数会读取奇数输入。至于我的平均值,我不知道它有什么问题,我只知道它只能找到一个真分数的平均值。

我的输出示例将粘贴在最后。

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

任何帮助将不胜感激。谢谢!

【问题讨论】:

  • 您需要在除法之前将总和转换为doublefloat,以获得浮点结果。
  • 我猜应该是 if (getInt%2==0)
  • 这是死代码,它永远不会转到 else { notnull = false; } 因为你的 if 条件是 if(true),所以它永远是 true
  • "even: " + oddsCounter - 这似乎不对。

标签: java average


【解决方案1】:

(getInt%2==1)其实是奇数校验,偶校验应该是getInt%2==0

【讨论】:

    【解决方案2】:

    几件事-

    1. 移动 getInt = scan.nextInt();紧接在 if(true) 条件之后
    2. 求平均值 - 平均值 = (double) sum / (count);
    3. 对于偶数/奇数问题进行此更改 - if (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);
    

    【讨论】:

      【解决方案3】:

      这就是你要找的东西

       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);
              }
      

      【讨论】:

        【解决方案4】:

        你的程序中有五个错误

        1. 您打印不正确 (System.out.println("even: " + oddsCounter))。 Even 应该打印为 evencounter

        2. 您必须将总和设为双精度或浮点数,才能获得十进制格式的平均值。

        3. 在进行奇偶测试之前,您必须读取 getINT。

        4. 偶数/奇数计算错误。它应该是 getInt%2==0

        5. 在计算最小值和最大值时不应使用 if/else。它应该是两个独立的 if

        完整的工作程序如下。

        package com.stackoverflow.test;
        

        导入 java.util.Scanner;

        公共类 Homework7APrinter { 公共静态无效主要(字符串[]参数){ 系统输出 .println("输入一个整数序列。任何非整数都可以退出"); 扫描仪扫描 = 新的扫描仪(System.in); int min = Integer.MAX_VALUE; int max = Integer.MIN_VALUE; 整数计数 = 0; 双倍总和 = 0; int 赔率计数器 = 0; int 偶数计数器 = 0; 诠释 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);
        }
        

        }

        【讨论】:

        • 你好乔,如果我输入 9 3 7 1 q 最大的数字不知何故是 7
        • 嘿用户...这是因为 if else for min max 计算是错误的。我修改了程序。
        猜你喜欢
        • 1970-01-01
        • 2014-06-11
        • 2016-12-29
        • 2015-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-24
        • 2016-01-05
        相关资源
        最近更新 更多