我很难读取2d数组中的元素。
要实现上下文化,用户提供如下输入:
7
1
2
3 1 2
4 3
5 4
6 3
7 5 6其中第一个数字是下一个输入的数目(在我的代码中为n)。每一个第一个数字都是一门课程,后面的数字是它的要求(课程也是如此)。例如,课程3需要课程1和2获得批准。
我需要计算2D数组中字符串的出现情况,但不考虑每个数组(list1i)的第一个元素。此外,第一行list1没有填充以使索引调用更容易(这就是为什么我的函数以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元素,它将返回应该返回的内容(例如,使用上面的输入,list23="3“、"1”、"2"),但函数就是不能工作。我在另一个家庭作业中也遇到了同样的问题,这与将数组添加到另一个数组有关,我无法解决这个问题,所以我改变了保存输入的方式,但现在由于限制,我别无选择。
如有任何帮助,将不胜感激。
发布于 2019-05-06 00:22:41
在Java中,==意味着用于对象比较的完全相同的对象。对于String对象,有方法equals,重写对象类等于()方法实现。
如果对象是字符串,而不是null,并且表示相同的字符序列,则equals方法返回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))
发布于 2019-05-06 00:17:58
2问题:
1:数组是0索引的。从0开始循环,而不是1
2:使用.equals()比较字符串。不要对对象使用==,除非您知道自己在做什么
发布于 2019-05-06 00:14:24
尝试使用.equals()将矩阵中的值与字符串s而不是==运算符进行比较
https://stackoverflow.com/questions/55997373
复制相似问题