Как получить доступ к массиву из конструктора

#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"); }