2016-01-29 177 views
-2

我想创建一个数组,它将允许我使用存储的元素来创建另一个单独的数组。是否可以用数组声明一个数组?

这是我到目前为止有:

Scanner reader = new Scanner(System.in); 

//variables 
int NumberOfStudents; 

System.out.print("How many students are in the class?: "); 
NumberOfStudents = reader.nextInt(); 
reader.nextLine(); 
//objects 
String [] names = new String[NumberOfStudents];  //Creates an array based on the number of students 

//input 
for (int i = 0; i < NumberOfStudents; i++){ 
    System.out.print("What is student number " + (i+1) + "'s name?: "); 
    names[i] = reader.nextLine(); 
    double [] names[i] = new double [5]; //declares each student name as a separate array 
} 

在此,我也行double [] names[i] = new double [5];,应采取names[]阵列的价值指数i的,把它变成长度5的阵列。因此,如果names[1] = Ann,它应该创建一个长度为5的数组Ann[]。但是,它会引发表达式错误的非法开始。

我试图使用一个临时变量,以协助宣布多个阵列过,但是我获得了更多的错误表达旁边的非法启动。因此显然你不能使用数组或变量来声明其他数组。

有没有办法解决这个问题,而不使用多维数组?

在此先感谢。

+3

如果您讲解五行阵的目的,我们也许能够给你一些选项。 –

+0

@AMACB提问者特别试图避免使用多维数组。 –

+0

如果你能解释你认为这个陈述的作用会有多大帮助:'double [] names [i] = new double [5];',特别是你明白'double'的意思。 –

回答

2

要做到这一点,而不多维数组是通过创建Students类的数组,将举行对学生的信息,如firstNamelastNamegrade

Student类:

public class Student(){ 

    String fname, lname; 
    int grade; 

    public Student(String name){ 
     String[] firstLast = name.split(" "); 
     fname = firstLast[0]; 
     if(firstLast.length>1) lname = firstLast[1]; 
    } 

    public string setFName(String nameOfStudent){ 
     fname = nameOfStudent; 
     return fname; 
    } 

// rest of code implementation 
} 

在当前类:

Student array[] = new Student[NumberOfStudents]; 

那么你可以使用的想法,你已经有

for (int i = 0; i < NumberOfStudents; i++){ 
    System.out.print("What is student number " + (i+1) + "'s name?: "); 
    String studentName = reader.nextLine(); 

    array[i] = new Student(studentName); // initialize the array 
} 
+1

这实际上是我想到的答案。但是,不要忘记,初始化数组后,您仍然需要初始化数组中的每个元素。您的代码目前会抛出'NullPointerException's –

+0

好的结果,我更新了答案@CalvinP。 –

+0

还缺少一个构造函数。在OP的情况下,他们可能会想要一个名称为String的参数(或2个字符串作为第一个,最后一个) –

0

它看起来像您尝试使用刚刚输入的变量名字符串创建一个数组,像这样:

double[] <student_name> = new double[5]; 

不幸的是(或者幸运),你不能创建从另一个的内容变量。

相反,您可以执行下列操作之一:

  • 做什么凯文眉在他的回答已经提出并使用Student类。
  • 使用Map<String, Double[]>,像吉姆·加里森建议,有关你的问题的意见。使用2维数组。

如果你想尝试一个2维数组,你应该;在你当前的类中,定义一个2维数组。

double[][] studentInfo = new double[NumberOfStudents][5]; 

然后你可以引用数组是这样的:

studentInfo[i][j] = aDoubleNumber; 
相关问题