Создание и заполнение массива объектов двумя параметрами - PullRequest
0 голосов
/ 25 июня 2019

Я делаю маленькие шаги в работе с объектами и массивами объектов, столкнулся со следующей проблемой, и я не могу понять, что вызывает это. Для некоторого контекста приложение, которое я создаю, является своего рода калькулятором.

Подводя итог, у меня есть два массива, которые уже были заполнены. Первый массив содержит индексы, где начинаются числовые элементы. Второй массив содержит сами элементы. Я хочу создать массив объектов (с двумя атрибутами, атрибуты: индексы и элементы.

int numericElementCounter; // Значение переменной numericElementCounter на данный момент известно и используется для определения длины массивов. int[] IndexBeginning = new int[numericElementCounter]; // Содержит начальные индексы каждого числового элемента. double[] NumericElementsDouble = new double[numericElementCounter]; // Содержит сами элементы.

// Здесь есть цикл for, который заполняет инициализированные выше массивы, но я сомневаюсь, что это часть проблемы, добавит его по запросу.

NumericElements[] NumericElementsObjects = new NumericElements[numericElementCounter]; // Это попытка инициализировать массив объектов.

public class NumericElements {

    int IndexStart;
    double NumericElement;

    public NumericElements(int x, double y) {
    int IndexStart = x;
    double NumericElement = y;
    }

}

//This is the 'for' loop that attempts to fill the array of objects.
for(int n=0;n<numericElementCounter;n++){
            System.out.println("The element starts at: " + IndexBeginning[n]);
            System.out.println("The element itself is: " + NumericElementsDouble[n]);
            NumericElementsObjects[n] = new NumericElements(IndexBeginning[n], NumericElementsDouble[n]);
            System.out.println("The object's IndexStart attribute: " + NumericElementsObjects[n].IndexStart + " The object's numericElement attribute: " + NumericElementsObjects[n].NumericElement);
        }

Например , Ввод: String UserInput = " 234 + 256 + 278 ";

Фактический результат:

The element starts at 2
The element itself is: 234.0
The object's IndexStart attribute: 0 The object's numericElement attribute: 0.0
The element starts at 8
The element itself is: 256.0
The object's IndexStart attribute: 0 The object's numericElement attribute: 0.0
The element starts at 14
The element itself is: 278.0
The object's IndexStart attribute: 0 The object's numericElement attribute: 0.0

Я пытался минимизировать код таким образом, чтобы я предоставлял только то, что нужно, если вы, ребята, чувствуете, что чего-то не хватает, я выложу весь код. Ожидаются атрибуты объектов, часть массива объектов, которые должны быть заполнены. Но они остаются на значении 0/0.0

Ответы [ 3 ]

0 голосов
/ 25 июня 2019

Неверный конструктор, вы должны установить значение атрибутов, используя this

Вот правильный конструктор:

public NumericElements(int x, double y) {
    this.IndexStart = x;
    this.NumericElement = y;
    }
0 голосов
/ 25 июня 2019

В вашем конструкторе NumericElements вы не присваиваете значения полям IndexStart и NumericElement. Вы создаете новые локальные переменные, которые ограничены областью действия для contstructor. Вы можете просто изменить конструктор, как показано ниже, и у вас должно быть то, что вы ищете:

public NumericElements(int x, double y) {
    this.IndexStart = x;
    this.NumericElement = y;
}

или вы также можете сделать:

public NumericElements(int x, double y) {
    IndexStart = x;
    NumericElement = y;
}

В обоих случаях вы получите одинаковый результат. это обычно используется для ссылки на поля и методы объекта того же класса. Это ссылка на тот же объект, для которого вы пытаетесь получить доступ к полям или методам. Код будет отлично работать даже без этого, поскольку Java сделает это за вас.

0 голосов
/ 25 июня 2019

У тебя все хорошо. В вашем конструкторе есть только небольшая проблема.

//here you shouldn't create a new variable, instead you should assign them to the variable inside your classs
public NumericElements(int x, double y) {
   this.IndexStart = x;
   this.NumericElement = y;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...