#java #arrays #methods #constructor #field
#Ява #массивы #методы #конструктор #поле
Вопрос:
Я только начал работать с Java несколько недель назад, и сегодня я попытался написать программу, которая способна вычислять средний IQ чисел, которые может ввести пользователь. Я написал два класса, IQ и IQTester (IQTester = только основной). Теперь моя проблема в том, что всякий раз, когда я хочу что-то вычислить в методе compute() (например, среднее значение массива) , весь массив пуст. Кто-нибудь знает, как я могу «передать» массив из конструктора в метод compute()?
package IQProgramm; public class IQ { private int values[] = new int[10]; private double average; public IQ(String numbers) { this.values = values; String[] values = numbers.split(";"); System.out.println("Calculate: "); System.out.println("You've input the following numbers: "); for (int i = 0; i lt; values.length; i) { System.out.print(values[i] " "); } System.out.println("n"); } public void compute() { for (int i = 0; i lt; values.length; i) { System.out.println(values[i]); } } }
package IQProgramm; import java.util.Scanner; public class IQTester { public static void main(String[] args) { Scanner readIQ = new Scanner(System.in); System.out.println("Please enter your numbers: "); String numbers = readIQ.nextLine(); IQ iq = new IQ(numbers); iq.compute(); } }
Комментарии:
1. Вы не хотите переходить от конструктора к
compute
, вы хотите хранить данные вvalues
поле вместоvalues
локальной переменной, созданной в конструкторе.
Ответ №1:
У вас есть 2 разных массива с именем values
, вот почему он плохо работает.
Первое, определенное здесь String[] values = numbers.split(";");
, видно только в конструкторе. Если вы хотите установить значение того, которое доступно в остальной части класса IQ ( private int values[] = new int[10];
), вам необходимо отредактировать его с помощью
this.values[i] = Integer.parseInt(values[i])
this
относится к переменным значениям класса IQ.
Рекомендуется не иметь 2 значения с одинаковым именем. Вы можете изменить String[] values
имя valuesStr
, например, на.
Конструктор с исправлением:
public IQ(String numbers) { String[] valuesStr = numbers.split(";"); System.out.println("Calculate: "); System.out.println("You've input the following numbers: "); for (int i = 0; i lt; valuesStr.length; i) { this.values[i] = Integer.parseInt(valueStr[i]) System.println(this.values[i] " "); } System.out.println("n"); }