Я новичок программист Java, пытающийся использовать классы, определенные в другом файле. Итак, я написал эти два .java файлы:Как сделать массив из класса, определенного внутри другого класса
Во-первых, есть MyLibrary.java:
package mymainprogram;
public class MyLibrary {
public class MyRecord {
int number;
char letter;
}
public static int TriplePlusThree(int input_number) {
return ((input_number*3) + 3);
}
}
Затем MyMainProgram.java:
package mymainprogram;
import java.util.Scanner;
public class MyMainProgram {
public static void main(String[] args) {
Scanner keyread = new Scanner(System.in);
System.out.print("Enter Number to Process: ");
int num = keyread.nextInt();
int result = MyLibrary.TriplePlusThree(num);
System.out.println("3x + 3 = "+result);
String letters = "ABCDEFGHIJ";
MyLibrary.MyRecord[] TenRecs = new MyLibrary.MyRecord[10];
for (int i = 0; i < 10; i++) {
TenRecs[i].number = i; //NullPointerException here
TenRecs[i].letter = letters.charAt(i);
}
}
}
у меня не было проблема в том, чтобы метод работал нормально; теперь моя цель - создать массив, в котором каждый член массива имеет целое число и символ. (Примечание: я не ищу лучших способов достижения этой цели, я просто использую этот тривиальный пример, чтобы попытаться заставить это работать).
Когда я попытался запустить мою программу, я получил:
java.lang.NullPointerException
Я исследовал это и нашел this page, который говорит:
If we try to access the objects even before creating them, run time errors would occur. For instance, the following statement throws a NullPointerException during runtime which indicates that [this array] isn't yet pointing to [an] object. The objects have to be instantiated using the constructor of the class and their references should be assigned to the array elements in the following way.
studentArray[0] = new Student();
Итак, я пытался сделать это в моей основной программе:
MyRecordArray[0] = new MyLibrary.MyRecord();
но дает эту ошибку:
an enclosing instance that contains MyLibrary.MyRecord is required
Это сообщение об ошибке привела меня к this Stack Exchange question, который говорит:
you have to create an object of X class (outer class) and then use objX.new InnerClass() syntax to create an object of Y class.
X x = new X();
X.Y y = x.new Y();
Таким образом, в соответствии с этим ответом, я добавил эти две линии к моей программе:
MyLibrary mylibrary = new MyLibrary();
MyLibrary.MyRecord myrecord = mylibrary.new MyRecord();
Эти строки не дают никаких предупреждений или ошибок компиляции, поэтому я чувствую, что на один шаг ближе, но я все еще пытаюсь понять, как создать массив. Я знаю, хочу ли я сделать массив целых чисел, я бы просто сделать это:
int[] TenInts = new int[10];
Итак, я пробовал такие вещи, как:
myrecord[] TenRecs = new myrecord[10];
MyRecord[] TenRecs = new MyRecord[10];
Но ничего не работает, и я чувствую, Теперь я хватаюсь за соломинку. У меня возникает ощущение, что правильный набор глаз может решить это довольно быстро.
Допустим, это забавный синтаксис. Я просто пытался следовать синтаксису этого другого ответа, который собрал 50 upvotes. –