Это потому, что вам нужно явно указать, какой номер Atom
вы печатаете. В вашем для l oop правильная печать будет выглядеть так:
System.out.println(a[i].number + " " + a[i].symbol + " " + a[i].fullname + " " + a[i].weight);
НО проблема еще не решена.
Ваш println показывает только последний результат, потому что метод display () зависит от экземпляра типа Atom
. Если вы не создадите экземпляр объекта Atom
, метод display () не будет работать, как вы это сделали здесь:
Atom ob = new Atom ();
ob.display (arr, n);
Теперь метод display () имеет ссылку на объект ob, и когда вы печатаете обычный number
, symbol
, fullname
и weight
, фактическим результатом будут значения атрибута ob
.
Теперь реальная проблема начинается здесь:
ob.inputmany (arr, n);
Прежде всего: вы инициализировали массив типов Atom
. Теперь вам нужно инициализировать текущий объект a[i]
почти так же, как вы делали с массивом: a[i] = new Atom()
в начале для l oop.
И, как я уже говорил, один раз вы устанавливаете значение для простых атрибутов number
.. weight
, оно устанавливает значение для текущего объекта, который вызывается методами inputmany
. Вам снова нужно указать, какие значения атрибутов объекта вы устанавливаете:
В вашем для l oop с inputmany
, пожалуйста, измените number
на a[i].number
и то же самое для остальных.
Вот мой подход к вашей проблеме:
public class Atom {
int number;
String symbol;
String fullName;
float weight;
static void createAtoms(Atom[] a) {
Scanner sc = new Scanner(System.in);
for (int i = 0; i < a.length; i++) {
a[i] = new Atom();
System.out.print("Enter atomic number : ");
a[i].number = sc.nextInt();
System.out.print("Enter symbol : ");
a[i].symbol = sc.next();
System.out.print("Enter full name : ");
a[i].fullName = sc.next();
System.out.print("Enter atomic weight : ");
a[i].weight = sc.nextFloat();
System.out.print("\n");
}
}
static void displayAtoms(Atom[] a) {
for (int i = 0; i < a.length; i++) {
System.out.println(a[i].toString());
}
}
@Override
public String toString() {
return "Atom{" +
"number=" + number +
", symbol='" + symbol + '\'' +
", fullName='" + fullName + '\'' +
", weight=" + weight +
'}';
}
public static void main(String[] args) {
Atom[] atoms;
Scanner sc = new Scanner(System.in);
System.out.print("Enter n: ");
int atomsNumber = sc.nextInt();
atoms = new Atom[atomsNumber];
createAtoms(atoms);
displayAtoms(atoms);
}
}
Обратите внимание на ключевое слово static
, которое означает, что нет необходимости объекта Atom
для вызова метод. Вашим методам не нужен параметр int n
, потому что у вас есть опция .length
для получения длины массива. И вместо записи всех атрибутов в ваш println, вы можете переопределить метод toString()
и вызвать его для for l oop для каждого Atom
.
PS : пожалуйста читать соглашения об именах . Они очень полезны в будущем :)