我有一个看起来像这样的数组
static String[][][] School= new String[1000][20][5];
首先我分配所有的班级名称,之后我将每个班级分配给学生证,然后我可以填写他们的信息。
我该怎么办?我试过它,例如
School[i] = "A1";
但它不起作用。
编辑:或者还有另外一种方法可以保存这三件事吗? (班级名称,学生及其信息)答案 0 :(得分:17)
static String[][][] School= new String[1000][20][5];
考虑具有3维度的图。
因此,当您插入School[0][0][0]="A1"
时,表示您已在0,0,0位置输入了元素。
从0,0,0开始,这将上升至位置1000,20,5。
你可以像这样插入但你有很多元素。
School[0][0][0]="A1"
School[0][0][1]="A2"
School[0][0][2]="A3"
.....
School[0][1][0]="B1"
School[0][1][1]="B2"
School[0][1][2]="B3"
......
在3D数组元素中看起来像
int[3][4][2] array3D
// means Three (4x2) 2 Dimensional Arrays
int[4][2]
//means Four 1 dimensional arrays.
现在如何在3D数组中添加元素?
在开始时,您可以直接使用
int[][][] threeDArray =
{ { {1, 2, 3}, { 4, 5, 6}, { 7, 8, 9} },
{ {10, 11, 12}, {13, 14, 15}, {16, 17, 18} },
{ {19, 20, 21}, {22, 23, 24}, {25, 26, 27} } };
在您的情况下,这是一项非常繁琐的任务,因为您希望在每个位置插入详细信息。
正如您有1000
条记录。
你的数组将包含这样的元素
注意:不建议将3D阵列用于此目的。
建议:使用这三个参数声明一个包含三个Strings
创建构造函数的类,并通过Objects
答案 1 :(得分:3)
我建议您不要使用3D数组,而应创建一个Student
类,其中包含学生的所有信息以及SchoolClass
的A类,其中包含学生列表类的类和名称,您可以保持Array of SchoolClass
以达到目的。
通过这种方式,您可以更好地管理它。
希望这有帮助
答案 2 :(得分:0)
您的阵列无法按照您的预期执行操作。
将数组视为3D数组,每个元素都是一个点。如果您指定一个索引,那么您实际上是在告诉计算机“好的,我想将"A1"
分配给这个数组的片段(在您的示例中,您正在尝试做类似于String[][] elementAtI = "A1";
的东西。现在这没有意义,是吗?
要获取数组中的单个元素,您必须指定所有三个索引,就像在3D空间中指定所有三个坐标来定位点一样:
School[3][4][5] = "A1";
比3D阵列更好的想法是对象。将所有内容打包到数组中是有效的,但这不像有SchoolClass[]
那样可读,其中每个SchoolClass
都有name
和数组Students
,每个{{1}有} Student
,ID
等
答案 3 :(得分:0)
首先,变量字段通常按照惯例以驼峰文本小写开头。
static String[][][] school= new String[1000][20][5];
其次,数组不能像这样工作。 String [] [] []持有{{{entry ...} entry ...}条目...}。
这些条目可能包含重复项,这使得它成为一种不可行的方法,因为您将在同一个数组中获得{"3A", "1", "PersonName"}
和{"3A", "1", "DifferentPersonName"}
。每个数组维度都包含额外的维度
{"3A", {"1", {"PersonName"}, {"DifferentPersonName"}}}
,所以
School[i] = "A1";
是语法错误,因为你必须将String [] []放在String [i] [] []中:
School[i] = {{"A1","PersonName"}};
我相信这里的解决方案是使用HashMaps。重复的条目将相互覆盖。在这种情况下,代码将是:
// The actual HashMap!
static final HashMap<String, HashMap<String, String>> school
=new HashMap<String, HashMap<String, String>>();
/**
* How to use an entry using the above HashSet:
*
* @param className The name of the class.
* @param id The id.
* @param details The details.
*/
void addEntry(final String className, final String id, final String details){
HashMap<String, String>value=school.get(className);
// If the class already exists, use it, otherwise make new HashMap.
(value==null ? value = new HashMap<String, String>() : value)
// Here is how to put in the value mapping.
.put(id, details);
// Put it back in. This updates the entry.
school.put(value);
}
/**
* How to get (iterate through) entries from the above HashSet:
*
* @return An array of students in format "class id details"
*/
String[] getStudentsSet(){
// This is an iterator.
Iterator<Entry<String, HashMap<String, String>>>iterator=
school.entrySet().iterator();
Entry<String, HashMap<String, String>>next;
String now;
// This is for testing
final ArrayList<String>list=new ArrayList<String>();
while(iterator.hasNext()){
// Load new class name
now=(next=iterator.next()).getKey();
Iterator<Entry<String, String>>iteratorlv2=next.entrySet().iterator();
while(iterator.hasNext()){
final Entry<String, String>entry=iterator.next();
/* This is the student from class "now", id "entry.getKey()", and details "entry.getValue()"
* Change this line to what you want, or what you would like to use entries for.
*/
final String student=now+" "+entry.getKey()+" "+entry.getValue();
// This is for testing
list.add(student);
}
}
// This is what prints to the console so you know this thing works.
for(final String o:list) System.out.println(o);
return list.toArray(new String[list.size()]);
}