Java: хранение данных в массиве объектов из диалога JOptionPane - PullRequest
0 голосов
/ 18 апреля 2010

Мне нужно знать, как я могу вставить данные в объекты внутри массива объектов, используя мои уже созданные методы Set.

Мне нужно знать, как мне это сделать через пользователя, я имею в виду диалог ввода JOptionPane

student[] s = new student[5];

for (int i=1 ; i <= s.length ;i++) {
    s[i] = new student(i,"AAA","Ecommerce",0.0);
}

for (int i=1; i<=s.length;i++) {
    name = JOptionPane.showInputDialog("Please Write Name for student n " + i);
    major = JOptionPane.showInputDialog("Please Write Major for student n " + i);
    gpa = Double.parseDouble(JOptionPane.showInputDialog("Please Write GPA for student n " +i));

    s[i] = new student(i,name,major,gpa);  
}

Я попытался сделать здесь переменные, которые получают данные от пользователя по JOptionPane, но кажется, что я использую только мой уже созданный конструктор, а не методы Set.

Мне нужно использовать методы, потому что внутри него есть некоторый проверочный код.

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 18 апреля 2010

Не используйте значения в качестве параметров конструктора.

Используйте только неявный конструктор, который будет выделять память. Что касается методов набора, напишите их как:

public void setName(String name) { this.name = name; }

В этом наборе методов введите код подтверждения . Ваш класс должен иметь личные атрибуты, которые точно соответствуют параметрам вашего конструктора.

Затем измените line s[i]=new student(i,name,major,gpa); с

s[i] = new Student();
s[i].setNumber(i);
s[i].setName(name);
s[i].setMajor(major);
s[i].setGpa(gpa);

Надеюсь, это то, что вы имели в виду

Редактировать: Или продолжайте использовать конструкторы и проверяйте параметры ДО того, как вы создадите новый экземпляр Student

1 голос
/ 18 апреля 2010

Это не так понятно, но на самом деле вы хотите инициализировать студента, не добавляя его в массив, пока не убедитесь, что поля верны

Student[] s = new Student[5];
String name, major;
double gpa;
boolean isCorrect = false;
Student currentStudent;

// in your code there is i = 1, is it intended or mistake?
for (int i=0; i <= s.length; i++)
{
  currentStudent = new Student();

  while (!isCorrect)
  {
    name = JOptionPane.showInputDialog("Please Write Name for student n " + i);
    isCorrect = currentStudent.setName(name);

    if (!isCorrect)
      JOptionPane.showMessageDialog(null, "Errors in validating name!");
  }

  isCorrect = false;
  while (!isCorrect)
  {
    major = JOptionPane.showInputDialog("Please Write Major for student n " + i);
    isCorrect = currentStudent.setMajor(major);

    if (!isCorrect)
      JOptionPane.showMessageDialog(null, "Errors in validating major!");
  }

  isCorrect = false
  while (!isCorrect)
  {
    gpa = Double.parseDouble(JOptionPane.showInputDialog("Please Write GPA for student n " +i));
    isCorrect = currentStudent.setGPA(gpa);

    if (!isCorrect)
      JOptionPane.showMessageDialog(null, "Errors in validating GPA!");
  }

  s[i] = currentStudent;
}

Этот подход будет продолжать запрашивать у пользователя одно и то же поле, пока оно не будет правильным ... конечно, вашим установщикам нужно будет возвращать логическое значение, равное false, если проверка не удалась.

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