-2

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

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

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

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

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

4

4 回答 4

0

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

于 2013-03-22T06:32:26.827 回答
0

你的程序有五个错误

  1. 您打印不正确( System.out.println("even: " + oddsCounter))。偶数应该打印为偶数计数器

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

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

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

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

完整的工作程序如下。

package com.stackoverflow.test;

导入 java.util.Scanner;

public class Homework7APrinter { public static void main(String[] args) { System.out .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);
}

}

于 2013-03-22T06:46:28.283 回答
0

一些事情-

  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);
于 2013-03-22T06:35:51.087 回答
0

这就是你要找的

 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);
        }
于 2013-03-22T06:37:02.823 回答