我无法读取2d数组中的元素。
要进行情境化,用户需要输入以下内容:
7
1
2
3 1 2
4 3
5 4
6 3
7 5 6
第一个数字是下一个输入的数目(在我的代码中为n)。接下来的每个数字都是一门课程,紧随其后的数字就是它的要求(当然也是课程)。例如,课程3需要课程1和2批准。
我需要计算2D数组中String的出现,但不考虑每个数组的第一个元素(list1 [i] [0])。同样,第一行的list1 [0]并未填充以简化索引调用(这就是为什么我的函数以i = 1开头的原因)。 问题在于它无法识别2d数组中的项,因此计数始终返回0。这是我的功能
static int count(String[][] list, String s, int n) { //n is the number of rows
int x=0;
for (int i=1;i<=n;i++) {
for (int j=1;j<list[i].length;j++) {
if (list[i][j]==s) {
x++;
}
}
}
return x;
}
该函数实际上适用于这样定义的数组:
String[][] list1= {{null},{"1"},{"2"},{"3","1","2"},{"4","3"},{"5","4"},{"6","3"},{"7","5","6"}};
例如,其中count(list1,“ 1”,7)返回1,而count(list1,“ 3”,7)返回2。
但是对于将输入保存为字符串的数组(list2),据说就像list1一样,计数返回0。
我初始化2D数组list2的方式:
String[][] list2 = new String[n+1][];
String[] L1 = new String[n+1]; //just an auxiliary array
for (int j=1; j<=n; j++) {
list2[j] = new String[n+1];
L1[j] = sc.nextLine();
list2[j] = L1[j].split(" ");
}
奇怪的是,如果调用list2的数组或元素,它将返回假定的内容(例如,使用上面的输入,list2 [3] = [“ 3”,“ 1”,“ 2 “]),但该功能不起作用。 我在另一项作业中遇到了相同的问题,这与将数组添加到另一个数组有关,我无法解决,所以我更改了输入的保存方式,但是由于限制,我别无选择。
任何帮助将不胜感激
答案 0 :(得分:2)
在Java中,==
表示用于对象比较的完全相同的对象。对于String
对象,有方法equals
,它覆盖Object类的equals()方法实现。
equals
方法如果object是一个String而不是null并表示相同的字符序列,则返回true。
static int count(String[][] list, String s, int n) { //n is the number of rows
int x=0;
for (int i=1;i<=n;i++) {
for (int j=1;j<list[i].length;j++) {
if (list[i][j].equals(s)) {
x++;
}
}
}
return x;
}
如果相等不区分大小写,请使用if (list[i][j].equalsIgnoreCase(s))
答案 1 :(得分:1)
2个问题:
1:数组的索引为0。在0
而不是1
处开始循环
2:使用.equals()
比较字符串。 从不对对象不使用==
,除非您确切地知道自己在做什么
答案 2 :(得分:0)
尝试使用.equals()将矩阵中的值与字符串s而不是==运算符进行比较