我在这里发现ArrayIndexOutOfBounds
错误,但我不知道它在哪里。在代码中,我创建了一个用户输入大小的数组。数组是一个字符串,然后imputs是所有单词。然后要求用户在数组中搜索单词并查看其中有多少次。
有人可以帮忙吗?
import java.util.*;
public class SearchArray {
public static void main (String[]args) {
Scanner scan = new Scanner(System.in);
int row = scan.nextInt();
int col = scan.nextInt();
String search = new String();
String array[][] = new String[row][col];
for(int i = 0; i < row; i++){
for(int j = 0; j < col; j++){
array[i][j] = scan.nextLine();
}
System.out.println(countStrings(array,search));
}
}
public static int countStrings(String[][]array, String search) {
int count = 0;
int row = array.length;
int col = array[0].length;
for(int i = 0; i < col; i++){
for(int j = 0; j < row; j++){
if(array[i][j] == search){
count++;
}
}
}
return count;
}
}
答案 0 :(得分:2)
首先使用scan.next()
代替scan.nextLine()
。
array[i][j] = scan.next();
String是对象,它们总是相同的。所以不要使用==
进行比较。使用.equals()
比较两个字符串。
array[i][j].equals(search);
==
测试引用相等性(它们是否是同一个对象)。
.equals()
测试价值平等(无论是逻辑上和#34;等于&#34;)。
是的,如上所述是其他人的评论,您在最后一个嵌套for
循环中交换了行和列。
应该是:
for(int i = 0; i < row; i++){
for(int j = 0; j < col; j++){
if(array[i][j].equals(search)){
count++;
}
}
}
希望这会有所帮助:)
编辑:
将此行保留在嵌套for循环之外:
System.out.println(countStrings(array,search));
并使用array[0].length
获取行,array[1].length
获取col的长度。
所以整个代码看起来像:
import java.util.*;
public class SearchArray {
public static void main (String[] args) {
Scanner scan = new Scanner(System.in);
int row = scan.nextInt();
int col = scan.nextInt();
System.out.println("Scan the string to be searched!");
String search = scan.next();
String array[][] = new String[row][col];
for(int i = 0; i < row; i++){
for(int j = 0; j < col; j++){
array[i][j] = scan.next();
}
}
System.out.println(countStrings(array, search));
}
public static int countStrings(String[][]array, String search) {
int count = 0;
int row = array[0].length;
int col = array[1].length;
for(int i = 0; i < row; i++){
for(int j = 0; j < col; j++){
if(array[i][j].equals(search)){
count++;
}
}
}
return count;
}
}
答案 1 :(得分:0)
抱歉,我没有足够的声誉点来评论您的跟进。
你无法填充阵列的原因可能是因为
scan.nextInt();
不会使用&#34; \ n&#34;。
您可以通过更改代码来使用换行符来消费\ n,如下所示:
Scanner scan = new Scanner(System.in);
int row = scan.nextInt();
int col = scan.nextInt();
scan.nextLine();