Java方法将十进制值的ArrayList乘以一个双精度数组以获得一个int数组?

时间:2014-01-21 04:17:17

标签: java arrays arraylist

帮助!我有这个学校作业,希望我通过将宽度(一个ArrayList)乘以长度(一个双精度数组)来编写一个方法来找到矩形区域(一个整数数组)。我对编码非常陌生;我已经尝试了超过五个小时才能使这个工作,但我一直做错了,我根本无法做到这一点。这是我写的方法的代码:

public void calcRectangleArea(int index, ArrayList width, double[] length, int[] area) 
{ 
    double temp = length[index]; 
    for(index = 0; index < length.length; index++) 
    { 
        for(index = 0; index < width.size(); index++) 
        { 
            Object widthObj = (int)width.get(index); 
            area[index] = temp * widthObj; 
        } 
    } 
} 

我们获得的完整入门代码就在这里,如果您需要更多上下文(已注释):http://pastie.org/pastes/916496

非常感谢您在撰写此方法时可以给我的任何帮助。我已经工作了好几个小时而且我无法得到它......

3 个答案:

答案 0 :(得分:0)

数组的长度和arraylist的大小应该是相同的,你必须稍微改变方法逻辑,看看下面的代码片段

public static int[] calcRectangleArea(List<Double> width, double[] length) 
    { 
        int[] area=new int[length.length];
        for(int index = 0; index < length.length; index++) 
        { 
            area[index] = (int) (length[index]*width.get(index));
        }
        return area; 
    } 

调用此方法传递width arraylist和length数组。它将返回整数区域数组

答案 1 :(得分:0)

你真的不需要两个循环。假设width [1]与length [1]相关,你可以在同一个循环中同时遍历两个集合。

这应该有用(我在〜2年内没有写过一行java,所以可能不是100%)

public void calcRectangleArea(int index, ArrayList width, double[] length, int[] area) 
{ 
    //assuming length.length == width.size
    for(index = 0; index < length.length; index++) 
    { 
       int anArea = (int)(width.get(index) * length[index]); 
       area[index]=anArea;

    } 
}

上面的代码再次假设集合的大小是相同的。

答案 2 :(得分:0)

首先,您不需要分配临时变量:

double temp = length[index]; 

...

Object widthObj = (int)width.get(index); 

因为你只会引用一次。直接引用它们:

area[index] = length[index] * (int)width.get(index);

其次,你的for循环是不需要的,并且声明它们是错误的。你试图增加传递给函数的索引(以及两次),这将导致问题。如果您要使用嵌套for循环,则应为每个循环声明一个新的迭代器变量:

for (int i = 0; i < something; i++) {
    for (int j = 0; j < somethingElse; j++) {
        doSomething();
    }
}

然而,在这种情况下,你甚至不需要它们。

此外,当你想要转换int:

时,你不应该创建一个Object
Object widthObj = (int)width.get(index);

应该是

int width = (int)width.get(index);

然而,这一行是不必要的,你不应该这么早地转换为int。

最终,您需要做的只是一行:

area[index] = (int)(length[index] * width.get(index));