【问题标题】:Is it possible to declare an array with an array? [duplicate]是否可以用数组声明数组? [复制]
【发布时间】:2016-05-07 13:15:32
【问题描述】:

我正在尝试创建一个数组,允许我使用存储的元素创建另一个单独的数组。

这是我目前所拥有的:

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]; 行,它应该在索引i 处获取names[] 数组的值并将其转换为长度为5 的数组。所以如果names[1] = Ann,它应该创建一个长度为 5 的数组Ann[]。但是,它会抛出一个非法的表达式开始错误。

我也尝试使用临时变量来帮助声明多个数组,但是除了表达式的非法开头之外,我还遇到了更多错误。

显然你不能使用数组或变量来声明其他数组。

有什么方法可以在不使用多维数组的情况下解决这个问题?

提前致谢。

【问题讨论】:

  • 如果你解释一下五元素数组的用途,我们或许可以给你一些选择。
  • @AMACB 提问者特别想避免使用多维数组。
  • 如果您能解释一下您认为这句话的作用会很有帮助:double [] names[i] = new double [5];,特别是您理解 double 的含义。
  • @JimGarrison 提问者认为它会定义一个由names[i] 的值命名的double 数组(即"Ann" -> Ann[])。
  • 所以真正需要的是Map&lt;String,Double[]&gt;,或者更可能是Map&lt;String,Student&gt;,以便适当定义Student

标签: java arrays


【解决方案1】:

要在没有多维数组的情况下做到这一点,只需创建一个 Students 类的数组,该类将保存有关学生的信息,例如 firstNamelastNamegrade 等。

学生班:

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 
}

【讨论】:

  • 这基本上就是我想得到的答案。但是,不要忘记,在初始化数组之后,还需要对数组中的每个元素进行初始化。您的代码当前将抛出 NullPointerExceptions
  • 很好,我更新了答案@CalvinP。
  • 还缺少一个构造函数。在 OP 的情况下,他们可能想要一个将字符串参数作为名称(或 2 个字符串作为第一个,最后一个)
  • @KevinMee 所以基本上只是创建另一个类来帮助存储学生的姓名并将它们制作成单独的数组?我想我可以做到这一点。谢谢!
【解决方案2】:

您似乎正在尝试使用刚刚输入的字符串作为变量名创建一个数组,如下所示:

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

很遗憾(或者也许很幸运),您无法从另一个变量的内容中创建变量。

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

  • 按照 Kevin Mee 在他的回答中提出的建议,使用 Student 类。
  • 使用Map&lt;String, Double[]&gt;,就像在您的问题的 cmets 中建议的 Jim Garrison
  • 使用二维数组。

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

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

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

studentInfo[i][j] = aDoubleNumber;

【讨论】:

    猜你喜欢
    • 2015-08-24
    • 2011-04-17
    • 2015-08-20
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多