2013-10-26 2 views
2

Мне нужно несколько всех значений в массиве 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. 
+0

Что вы имеете в виду под «новый массив, который я буду использовать, чтобы вычесть из другого массива»? –

+0

@ Lutz Horn Я еще не включил эту часть, но мне нужно будет сделать массив зависимостей (умножая детей на 3000 для каждого ввода), а затем вычесть из другого массива, который содержит валовой доход для каждого пользователя, который будет приводят к созданию другого массива под чистым доходом ... по какой-то причине наш инструктор хочет получить массив для каждого типа данных – prodo

ответ

4

В вашем примере вы умножаете массив своих детей, но возвращаете новый массив. Вам нужно умножить свой новый массив на ваш дочерний массив.

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, но в этот момент каждый индекс массива не был инициализирован, поэтому мы действительно не знаем, какие значения там.

+0

, где бы я инициализировал возвращаемое значение? Могу ли я изначально изменить второй метод? – prodo

+0

Уточнить ответ для вас – Tyler

+0

Хорошо, теперь я понимаю, спасибо, но как бы получить содержимое usernumChild другому методу? Я думал, что это будет многократно (usernumChild, 3000)? Возможно ли, чтобы я просто избавился от второго метода и выполнил алгоритм в основном, поэтому мне не нужно пропускать массив? В настоящий момент ключевым является простота. – prodo

0

В вашей второй цикл он должен быть:

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

Также убедитесь, что все значения children[i] уступают чем ((2^31 - 1)/number) +1

+0

hmm Я пробовал это и все еще получаю system.print [I @ 4a3a6e5c – prodo

+0

@prodo Это означает, повторно напечатайте ссылку созданного массива int. Для печати вашего массива вы можете создать цикл for и распечатать все значения или использовать 'System.out.println (Arrays.toString (myArray));' –

+0

Мне нужно идти по пути создания цикла, поэтому вы предлагаете создать расширенный цикл? поместив значения depndExemp в a for (int reprint: depndExemp) {System.out.println (перепечатка)} – prodo

1

Вам необходимо изменить

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

в

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

Вы действительно не должны создать новый массив в методе (и вы также возвращение старого без каких-либо изменений). Так просто сделать

public static int[] multiply(int[] children, int number) { 
    for(int i = 0; i < children.length; i++) { 
     children[i] = children[i] * number; 
    } 
    return children; 
} 
+0

Могу ли я сделать умножение без создания нового метода?Я хотел бы попытаться сохранить эту программу как можно более чистой и простой. На этом этапе осталось 36 часов, чтобы работать над этим, и многое другое, необходимое для достижения конечного результата, выглядит мрачным, если не сказать больше! – prodo

+0

Да, вы можете, но лучше иметь несколько методов, чем один огромный, так что это правильный дизайн. Правило большого пальца состоит в том, что каждый метод должен соответствовать экрану –

1

Если я правильно понимаю ваш вопрос:

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

Должен быть изменен на

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

Учитывая вы возвращаете array, не children.

3

Использование Java 8 потоков может быть столь же просто, как:

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

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

} 
Смежные вопросы