关于数组的代码是否有意义?

时间:2013-08-09 17:29:33

标签: java arrays

我正在观看加州大学伯克利分校关于用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更改为代码的两倍仍然不会产生任何分数。

我猜教授打算写这个:

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 enter image description here

7 个答案:

答案 0 :(得分:5)

首先,请注意,这将从0/6开始,而不是1/6。其次,教授很可能指的是一个假设的Fraction类,它存储精确的分数(即分子和分母为两个int s); double无法做到这一点。

现在,如果你想使用双打(它不会存储精确的分数本身,而是它们代表的近似数字),你必须使用双除法(而不是整数除法,正如你目前正在执行的那样):

f[i] = i/6.0;

正如@StephenTG指出的那样,Fraction类似乎已实施here

答案 1 :(得分:1)

好吧,如果Fraction类有一个返回doublefloat的方法,那么它实际上可以很好地构建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

答案 2 :(得分:1)

是和否。这样:

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

平均值

  

存储在f数组的位置i上,此分数对象

fFraction[],表示每个索引都包含一个Fraction类型的对象。您需要创建一个新的(new Ftaction(1,6))才能存储1/6。你对 存储的看法是正确的,你只是没有全面了解如何你代表它。

为了您的课程,我认为Fraction是由您的老师创建的类型,并且您必须在项目中包含(正如其他人正确建议的那样,您可能正在搜索this课程)

答案 3 :(得分:1)

这里有分数类: http://www.cs.berkeley.edu/~jrs/61bf98/labs/lab2/Fraction.java

我认为这也是你班级的一部分。 您必须下载此文件并将其添加到项目中。

答案 4 :(得分:0)

您需要创建Fraction类才能创建Fraction个对象的数组。

根据StephenTG的评论,看起来你需要将Fraction.java导入eclipse。

(此Fraction.java有一个main方法用于测试目的。您可以将代码放在该方法中,或者如果要使用自己的main方法,则需要删除该方法。 )

答案 5 :(得分: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;
    }
}

答案 6 :(得分:0)

如果您的Fraction类的constructor带有两个整数值(例如),那么您的第一个代码段才有意义:

class Fraction
{
    private int val1, val2;

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

对于问题的第二部分,您的循环将首先return integer,然后type-castdouble。所以,你的情况下的结果总是为零,即使你知道它不应该。要解决此问题,可以执行以下两行代码中的任何一行。

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

f[i] = (i/6.0);