数组内部的数组:迭代无法识别其中的字符串

时间:2019-05-05 23:52:47

标签: java arrays iteration 2d

我无法读取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 “]),但该功能不起作用。 我在另一项作业中遇到了相同的问题,这与将数组添加到另一个数组有关,我无法解决,所以我更改了输入的保存方式,但是由于限制,我别无选择。

任何帮助将不胜感激

3 个答案:

答案 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而不是==运算符进行比较