-1

Java での配列の作成に関するカリフォルニア大学バークレー校の講義を見ています。教授は次のコードを提示し、このコードが 1/6、2/6 などの分数を作成すると主張しています (テストできるように main() を追加しました)。

public class Test {
    public static void main(String[] args) {

        Fraction[] f = new Fraction[5];
        for (int i=0; i<5; i++){
          f[i] = new Fraction(i, 6);
        }

    }
}

私はEclipseでこれをテストしています.Fractionクラスがないため、明らかにコードはコンパイルされません.Fractionを2倍に変更しても、コードはまだ分数を生成しません.

私は教授がこれを書くつもりだったと推測しています:

public class Test {
    public static void main(String[] args) {

        double[] f = new double[5];
        for (int i=0; i<5; i++){
          f[i] = (i/6);
        }

    }
}

私の推論は正しいですか?


ソース: https://www.youtube.com/watch?v=wGibp2L5uCc @12:25 ここに画像の説明を入力

4

7 に答える 7

5

まず、これは0/6ではなくから始まることに注意してください1/6。第二に、教授はおそらく、正確な分数 (つまり、分子と分母が 2 つの )Fractionを格納する仮想クラスについて言及しています。これはできません。intdouble

ここで、double を使用する場合 (正確な分数自体を保存するのではなく、それらが表すおおよその数を保存します)、double 除算を使用する必要があります (現在実行している整数除算ではありません)。

f[i] = i/6.0;

@StephenTG が指摘しているように、クラスはここFractionに実装されているようです。

于 2013-08-09T17:31:54.983 に答える
1

はいといいえ。これ:

f[i] = new Fraction(i, 6);

意味

f 配列の位置 i に格納する、この小数オブジェクト

fは、Fraction[]各インデックスにFraction型付きオブジェクトが含まれていることを意味します。new Ftaction(1,6)を保存するには、新しいもの (つまり ) を作成する必要があります1/6を保存するかについては正しかったのですが、それをどのように表現するかについて全体像を把握していませんでした。

クラスのために、それFractionはあなたの先生によって作成されたタイプであり、プロジェクトに含める必要があると思います(他の人が正しく示唆したように、このクラスを検索している可能性があります)

于 2013-08-09T17:34:15.057 に答える
1

ここに分数クラスがあります: http://www.cs.berkeley.edu/~jrs/61bf98/labs/lab2/Fraction.java

これもあなたのクラスの一部だと思います。このファイルをダウンロードしてプロジェクトに追加する必要があります。

于 2013-08-09T17:35:04.137 に答える
1

Fractionクラスに adoubleまたは aを返すメソッドがある場合、実際floatには非常にうまく構築できますint

次に、内部ロジックが処理を行い、正しい型を返します。

次の例を検討してください。

public static void main(String[] args) {
    System.out.println(new Fraction(1, 6).getFraction());
}
static class Fraction {
    private float fraction;
    public Fraction(int num, int den) {
        // TODO check that den != 0, otherwise we're in a world of trouble :D
        fraction = (float) num/den;
    }
    public float getFraction() {
        return fraction;
    }
}

出力:

0.16666667
于 2013-08-09T17:31:01.933 に答える
0

Fractionオブジェクトの配列を作成するには、クラスを作成する必要がありFractionます。

StephenTG のコメントから、Fraction.javaEclipse にインポートする必要があるようです。

(この Fraction.java にはmainテスト用のメソッドがあります。そのメソッドにコードを配置するか、独自のメソッドを使用する場合はそのメソッドを削除する必要がありますmain。)

于 2013-08-09T17:31:25.273 に答える
0

最初のスニペットは、Fractionクラスにconstructor2 つの整数値を取る がある場合にのみ意味があります (例):

class Fraction
{
    private int val1, val2;

    public Fraction(int val1, int val2)
    {
        this.val1 = val1;
        this.val2 = val2;
    }
}

質問の 2 番目の部分では、ループは最初returnに anintegerになり、次にtype-castto になりdoubleます。したがって、そうすべきではないことがわかっていても、結果は常にゼロになります。これを修正するには、次の 2 行のコードのいずれかを実行します。

f[i] = ((i + 0.0)/6);

また

f[i] = (i/6.0);
于 2013-08-09T17:48:11.883 に答える
0

最初にFractionクラスを定義する必要があります。

public class Fraction
{
    int numerator;
    int denominator;

    public Fraction(){}

    /* watch out for a division by zero Exception! 
     * maybe throw a custom exception here
    */
    public Fraction(int n, int d){
        numerator = n;
        denominator = d;
    }

    public float getValue(){
       return numerator * 1.0f/denominator;
    }
}
于 2013-08-09T17:37:29.743 に答える