0

私は次のようにプログラム要件を満たすために以下のコードを書きました:

3つの平均3つの整数を読み取り、3つの数値の平均を表示するプログラムを作成します。

入力メモ:3つの整数(非負の整数)がコンソールに入力されます。

出力メモ(プロンプトとラベル):プログラムは、「最初の整数を入力してください。」、「2番目の整数を入力してください。」、「3番目の整数を入力してください。」という文字列で3つの整数の入力を求めます。次に、プログラムはNUMBER1、NUMBER2、およびNUMBER3 = AVGの平均を出力します。ここで、NUMBER1は入力された最初の整数値であり、NUMBER2およびNUMBER3は後続の整数であり、AVGは計算された平均値です。

名前の仕様:アプリケーションクラスはAverage3と呼ばれる必要があります。

私のソースコード:

import java.util.Scanner;
public class Average3 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        int AVG, NUMBER1, NUMBER2, NUMBER3;
        System.out.println("Enter the first integer.");
        Scanner keyboard = new Scanner(System.in);
        NUMBER1 = keyboard.nextInt();
        System.out.println("Enter the second integer.");
        NUMBER2 = keyboard.nextInt();
        System.out.println("Enter the third integer.");
        NUMBER3 = keyboard.nextInt();
        AVG = (NUMBER1 + NUMBER2 + NUMBER3) / 3;
        System.out.println("The average of NUMBER1, NUMBER2, and NUMBER3 = " + AVG);

    }

}

私のプログラムは正常にコンパイルされますが、関連付けられたメソッドを使用してオブジェクトを実装および呼び出すことができたはずですが、どこから始めればよいか悩んでいます。メソッドとオブジェクトを概念的に理解していますが、コードの記述ほどではありません。誰か提案がありますか?

4

4 に答える 4

1

このような単純なタスクのためにオブジェクトを使用したかどうかはわかりません。しかし、あなたが尋ねたので、私はオブジェクトが必要な場合にそれをどのように行うかを説明します、

を含むオブジェクト(クラス)を作成しますArrayList<Integer>。このようにして、3つ以上の数値の平均を計算できます。

このオブジェクトには2つのパブリックメソッドがあります。void addNumber(int number)addNumberは単に配列リストに数値を追加し、double/int getAverage() getAverageはリスト全体をトラバースし、すべての数値を合計して、そのサイズで除算します(-1を忘れないでください)。

メインでは、そのクラスの新しいオブジェクトを作成し、スキャナーをスキャンするたびに、addNumberメソッドを使用して入力された数値を配列リストに挿入します。

オブジェクトを使うように指示されたので、どうしたらいいかと思います。

幸運を!

于 2012-07-22T21:57:45.277 に答える
1

InputDataまず、ユーザーからの入力を格納するクラスを作成します。

class InputData {
    public int number1;
    public int number2;
    public int number3;
}

これ自体が便利な一般的な手法です。複数の関連する値を単一のデータ構造に収集します。main次に、3つの個別の変数の代わりにこのクラスを使用するようにメソッドを書き直すかint、さらに一歩進んでInputDataクラスに動作を追加することができます。追加する明らかな最初の動作は、平均を計算することです。

class InputData {
    public int number1;
    public int number2;
    public int number3;

    public int average() {
        return (number1 + number2 + number3) / 3;
    }
}

mainこれにより、次のように書き直すことができます。

public class Average3 {
    static class InputData {
        public int number1;
        public int number2;
        public int number3;

        public int average() {
            return (number1 + number2 + number3) / 3;
        }
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        InputData input = new InputData();
        System.out.println("Enter the first integer.");
        Scanner keyboard = new Scanner(System.in);
        input.number1 = keyboard.nextInt();
        System.out.println("Enter the second integer.");
        input.number2 = keyboard.nextInt();
        System.out.println("Enter the third integer.");
        input.number3 = keyboard.nextInt();
        System.out.println("The average of NUMBER1, NUMBER2, and NUMBER3 = "
            + input.average());
    }
}

InputData静的内部クラスを作成したことに注意してくださいAverage3。また、同じファイル内の別個の最上位クラス(そうでない場合public)または別個のファイル内のクラスである可能性もあります。

これに対する改善は、クラスint内の個別のフィールドの代わりに配列を使用することです。InputDataプログラムは次のようになります。

public class Average3 {
    static class InputData {
        public int[] numbers;

        InputData(int size) {
            numbers = new int[size];
        }

        public int average() {
            int sum = 0;
            for (int number : numbers) {
                sum += number;
            }
            return sum / numbers.length;
        }
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        String[] prompts = { "first", "second", "third" };
        InputData input = new InputData(3);
        Scanner keyboard = new Scanner(System.in);
        for (int i = 0; i < prompts.length; ++i) {
            System.out.println("Enter the " + prompts[i] + " integer.");
            input.numbers[i] = keyboard.nextInt();
        }
        System.out.println("The average of NUMBER1, NUMBER2, and NUMBER3 = "
            + input.average());
    }
}

ここでは、配列を初期化するためのコンストラクターを追加しInputData、配列のサイズを設定するための引数を指定しました。

次に、入力値の数を動的にする(配列のArrayList<Integer>代わりに使用する)などの追加の改善を導入できます。intしかし、これは割り当ての特定の要件を超えています。一部の人々(実際には多くの人)は、この種の一般化を自動的に行う傾向があります。ただし、エクストリームプログラミングの支持者は、物事を単純に保つ方が一般的に優れていると指摘します。明日、来週、または来月のニーズではなく、今日のニーズに合わせた設計とコードです。

言い換えれば、次の課題が何をもたらすかわからないので、直接の課題を超えて一般化すると、無駄な作業になる可能性があります。

于 2012-07-22T22:33:37.083 に答える
0

これは、非常に単純なクラスを使用してプログラムを作成する方法の簡単な例です。

簡単に変更して、平均を計算する数を尋ねることができます。

/* using default package */

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * The Class Average3.
 */
public class Average3 {

    /** The number list. */
    private List<Integer> numberList;

    /** The sum. */
    private float sum;

    /**
     * Instantiates a new my first class.
     */
    public Average3() {
        this.numberList = new ArrayList<Integer>();
        this.sum = 0;
    }

    /**
     * Adds the integer.
     *
     * @param integer the integer
     */
    public void addInteger(int integer) {
        this.numberList.add(integer);
        this.sum += integer;
    }

    /**
     * Gets the average.
     *
     * @return the average
     */
    public float getAverage() {
        return (this.sum/this.numberList.size());
    }

    /**
     *  Prints the Average.
     */
    public void printAverage() {
        System.out.print("The average of ");
        for(int j = 0; j < this.numberList.size()-1; j++) {
            Integer i = this.numberList.get(j);
            System.out.print(i.toString() + ", ");
        }

        System.out.print("and " + numberList.get(numberList.size()-1));
        System.out.println(" = " + this.getAverage());
    }

    /**
     * The main method.
     *
     * @param args the arguments
     */
    public static void main(String[] args) {
        Average3 myClass = new Average3();

        System.out.println("Enter the first integer.");
        Scanner keyboard = new Scanner(System.in);

        myClass.addInteger(keyboard.nextInt());

        System.out.println("Enter the second integer.");
        myClass.addInteger(keyboard.nextInt());

        System.out.println("Enter the third integer.");
        myClass.addInteger(keyboard.nextInt());

        myClass.printAverage();
    }
}
于 2012-07-22T22:07:03.463 に答える
0

非常に基本的な例として、1つの.javaファイルで、次のような入力を取得して平均を作成する「方法を知っている」クラスを作成できます。

// takes input and stores in a list which it 
// can do mathematical operations on
class InputMath
{
    // ivar to store input
    private List<int> list;

    // contructor
    public AverageInput() {}

    // gets user input and pushes to `list`
    public void getInput(String question) {}

    // works out the average of `list`
    public int average() {}

    // works out the total of `list`
    public int total() {}

    ...
}

次に、「main」関数のように、必要な場所でクラスを使用できます。

import InputMath;

class Main
{
    public static void main(String args)
    {
        InputMath im = new InputMath();

        for(int i=0; i<3; i++)
        {
            im.getInput("Enter number " + (i+1));
        }
        System.out.println(im.average());
    }
}

しかし、コメントの多くが示唆しているように、あなたは本当にいくつかの資料/参考文献/例を読み、「遊んで」する必要があることを示唆しています

于 2012-07-22T22:18:33.837 に答える