3

我需要将数组中的所有值乘以 3000,这反过来会创建一个新数组,我将使用该数组从另一个数组中减去。我试图创建一个单独的方法来为我做到这一点,但我在相乘数组中得到的只是一堆奇怪的数字和符号?

这是我写的代码

public static void main(String[] args)
{    
    int numberOfTaxpayers = Integer.parseInt(JOptionPane.showInputDialog("Enter how many users you would like to calculate taxes for: ");
    int[] usernumChild = new int[numberOfTaxPayers];
    for (int i = 0; i < usernumChild.length; i++)
    {
        usernumChild[i] = Integer.parseInt(JOptionPane.showInputDialog("Enter number of children for user "+ (i+1) +": "));
    }//this for loop finds out the number of children per user so we can later multiply each input by 3000 to create an array that determine dependency exemption for each user
int[] depndExemp = multiply(usernumChild, 3000);//this was the calling of the multiply method... somewhere here is the error!!
}//end main method 
public static int[] multiply(int[] children, int number)
{
    int array[] = new int[children.length];
    for( int i = 0; i < children.length; i++)
    {
       children[i] = children[i] * number;
    }//end for
    return array;
}//this is the method that I was shown in a previous post on how to create return an array in this the dependency exemption array but when I tested this by printing out the dependency array all I received were a jumble of wrong numbers.
4

6 回答 6

5

在您的示例中,您将 children 数组相乘但返回您的新数组。您需要将新数组乘以子数组。

1 public static int[] multiply(int[] children, int number)
2 {
3     int array[] = new int[children.length];
4     for( int i = 0; i < children.length; i++)
5     {
6         array[i] = children[i] * number;
7     }//end for
8     return array;
9 }

您收到奇怪符号的原因是因为您正在返回未初始化的值。数组本身是在第 3 行分配的,但此时数组的每个索引都没有被初始化,所以我们真的不知道那里有什么值。

于 2013-10-26T15:52:50.260 回答
3

使用 Java 8 流可以很简单:

public static int[] multiply(int[] children, int number) {

    return Arrays.stream(children).map(i -> i*number).toArray();

}
于 2017-02-08T06:59:22.900 回答
2

您真的不必在您的方法中创建新数组(并且您还返回旧数组而不做任何更改)。所以就这样做

public static int[] multiply(int[] children, int number) {
    for(int i = 0; i < children.length; i++) {
        children[i] = children[i] * number;
    }
    return children;
}
于 2013-10-26T15:44:27.490 回答
1

你需要改变

children[i] = children[i] * number;

 array[i] = children[i] * number;
于 2013-10-26T15:44:20.193 回答
1

如果我正确理解您的问题:

children[i] = children[i] * number;

应改为

array[i] = children[i] * number;

考虑到你是回来的array,不是children

于 2013-10-26T15:44:38.270 回答
0

在您的第二个 for 循环中,它应该是:

for(int i = 0; i < children.length; i++){
       array[i] = children[i] * number;
}//end for

还要确保 的所有值children[i]都低于((2^31 - 1)/number) +1

于 2013-10-26T15:44:17.910 回答