我必须使用二维数组。阵列中行槽的最大长度为100.通常,这些阵列槽中的5-20个将被填充而不是更多,但是,我必须将我的代码构建为最多100行。我的问题是,有没有办法只遍历已设置的数组插槽,在最后一个未设置的空插槽之前停止?
//initialize array
String[][] variables = new String[numVariables][100];
//System.out.printf("%s \n", numVariables);
for(int i=0; i < numVariables; i++){
//reads in variable line
String variableLine = fin.nextLine();
//turn variable line into array
varArray = variableLine.split(" ");
numRules = Integer.parseInt(varArray[0].replaceAll("\\s",""));
for(int j=0; j < numRules+1; j++){
variables[i][j] = varArray[j+1];
System.out.printf("%s ", variables[i][j]);
}
System.out.println("\n");
}
//**LATER IN MY CODE ****//
//ITERATE THROUGH 'variables' array and PRINT OUT ONLY VALUES THAT ARE SET
答案 0 :(得分:3)
如果按照从0到100的顺序填充数组。如果前51个元素填充了字符串,那么您可以使用:
for(int i=0; i < numVariables; i++){
for(int j=0; j < numRules+1; j++){
if (variables[i][j] == null)
break;
System.out.printf("%s ", variables[i][j]);
}
}
答案 1 :(得分:1)
如果您不需要空值,为什么还要存储空值? String[][]
是一个String数组数组 - 这些内部数组不需要具有相同的长度。因此,您可以使用所需的元素数创建每个内部数组:
//initialize array
String[][] variables = new String[numVariables][];
//System.out.printf("%s \n", numVariables);
for(int i=0; i < numVariables; i++){
//reads in variable line
String variableLine = fin.nextLine();
//turn variable line into array
varArray = variableLine.split(" ");
numRules = Integer.parseInt(varArray[0].replaceAll("\\s",""));
variables[i] = Arrays.copyOfRange(varArray, 1, numRules - 1);
}
然后迭代:
for (String[] var : variables) {
for (String s : var) {
System.out.print(s);
}
System.out.println();
}
答案 2 :(得分:0)
您可以使用List<String>
数组,也可以跟踪所有行的长度。
int [] rowLength = new int[numVariables]
for(int i=0; i < numVariables; i++){
/* ... */
numRules = Integer.parseInt(varArray[0].replaceAll("\\s",""));
// store the number of slots in variable[i]
rowLength[i] = numRules+1;
/* ... */
}
然后,您只从零到行的长度(rowLength[i]
)进行迭代。
第三种方法(和我喜欢的方法)是不指定数组中行槽的长度:
String [][] variables = new String[numVariables][];
然后计算了numRules:
variables[i] = new String[numRules+1];
答案 3 :(得分:0)
鉴于您所描述的情况,您可能最好使用其他数据结构,但看到您不能,您可以记录已更改的值。
因此,您可以保留每行长度的数组,并在那里搜索每行。
String[][] variables = new String[numVariables][100];
int rowLength[] = new int[numVariables];
//...
// get and record the rowLength
//...
for(int x=0; x < numVariables; x ++) {
for(int y=0; y < rowLength[x]; y ++) {
// do your stuff
}
}
}
或者您可以使用地图或ArrayList来跟踪包含数字的每个位置。