-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

これはあなたが探しているものです

 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 に答える
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

(getInt%2==1)は実際には奇数のチェックですが、偶数のチェックのはずgetInt%2==0です

于 2013-03-22T06:32:26.827 に答える
0

あなたのプログラムには 5 つの間違いがありました

  1. 間違って印刷していました ( System.out.println("even: " + oddsCounter))。Even は evencounter として出力する必要があります

  2. 10 進形式で平均を取得するには、合計も double または float にする必要があります。

  3. 奇数偶数テストを行う前に、getINT を読み取る必要があります。

  4. 偶数/奇数の計算が間違っていました。getInt%2==0 である必要があります

  5. 最小値と最大値の計算中に if/else を使用しないでください。それは2つの別々の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; int カウント = 0; 二重合計 = 0; int オッズカウンター = 0; intevensCounter = 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);
}

}

于 2013-03-22T06:46:28.283 に答える