Вызывается конструктор для каждого созданного класса - PullRequest
0 голосов
/ 18 марта 2020

Мой вопрос касается использования массивов объектов. Для каждого объекта, который я создал, затем установите входные значения сканера. Это связано с тем, что выходные данные показывают значения в конструкторе для каждого созданного объекта. Каждый объект, вызываемый с помощью функции get, отображает одинаковые значения. Я хочу, чтобы у каждого объекта были свои значения.


 public GuitarSpecifications() {

        this.guitarColor = "Red"; 
        this.numStrings = 6;
        this.guitarLength = 28.2;
        this.guitarManufacturer = "Gibson";
    }

Код выше показывает мой созданный мной конструктор. Цель этого конструктора - установить значения любых переменных, которые еще не установлены сканером.

//This code was tested and worked. Creating the instance of the objects
    public static void instanciateAll(GuitarSpecifications[] guitarSpecifications) {
        for (int i = 0; i < guitarSpecifications.length; i++) {
            if (guitarSpecifications.length != 0) {
                guitarSpecifications[i] = new GuitarSpecifications();
            } else {
                System.out.println("Array of objects not created");

            }
        }
    }

Этот код выше показывает, что мои объекты создаются.

//Setting the values of the instantiated objects
     public static void setAll(GuitarSpecifications[] guitarSpecifications, Scanner input) {

        for (int index = 0; index < guitarSpecifications.length; index++) {
            System.out.println("Enter guitar color: ");
            String gColor = input.next();
            guitarSpecifications[index].setGuitarColor(gColor);

            System.out.println("Enter guitar length: ");
            double gLength = input.nextDouble();
            guitarSpecifications[index].setGuitarLength(gLength);

            System.out.println("Enter number of strings on guitar: ");
            int gStrings = input.nextInt();
            guitarSpecifications[index].setNumStrings(gStrings);

            System.out.println("Enter guitar manufacturer: ");
            String gManufacturer = input.next();
            guitarSpecifications[index].setGuitarManufacturer(gManufacturer);

        }
        input.close();
  }

Код выше показывает мои настройки значений.

//Displays the values entered from user input from setAll function
    public static void displayAll(GuitarSpecifications[] guitarSpecifications) {

        for (int i = 0; i < guitarSpecifications.length; i++) {
            System.out.println(guitarSpecifications[i].getGuitarManufacturer());
            System.out.println();
            System.out.println(guitarSpecifications[i].getGuitarColor() + "\n");
            System.out.println(guitarSpecifications[i].getNumStrings() + "\n");
            System.out.println(guitarSpecifications[i].getGuitarLength() + "\n");

            System.out.println("**********************************************\n");

        }

    }

Наконец, мой вывод с вызовами функции get из класса GuitarSpecifications. Это показано в приведенном выше коде.

run:
Enter guitar color: 
Black
Enter guitar length: 
87.4
Enter number of strings on guitar: 
7
Enter guitar manufacturer: 
Fender

Приведенный выше код является фактическим вводом

Gibson

Red

6

28.2

**********************************************

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


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

1 Ответ

0 голосов
/ 18 марта 2020

Вы еще не написали свои конструкторы, и вам не следует жестко кодировать значение привязка в конструкторе без аргументов. Создайте полностью квалифицированный конструктор, а затем вызовите его со своими жестко закодированными значениями (в идеале, конечно, в качестве констант) в качестве сквозного конструктора:

public GuitarSpecifications()
{
    // of course, these values are meaningless, there is no reason
    // for a "default" guitar to be a red Gibson, the only real default
    // would be the number of strings.
    this("Red", 6, 28.2, "Gibson");
}

public GuitarSpecifications(
  String color,
  int stringCount,
  float length,
  String manufacturer)
{
    this.guitarColor = color; 
    this.numStrings = stringCount;
    this.guitarLength = length;
    this.guitarManufacturer = manufacturer;
}

Теперь, если вы вызываете new GuitarSpecification(), он создает это довольно бесполезно жестко закодированный, но вы также можете назвать его с реальными значениями, которые вы получили от вашего сканера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...