java - 线性搜索数组和字符串

标签 java arrays string

我这里有一个 ArrayIndexOutOfBounds 错误,但我不知道它在哪里。在代码中,我创建一个数组,用户在其中输入大小。数组是一个字符串,输入是所有单词。然后要求用户在数组中搜索一个单词并查看它出现了多少次。

有人可以帮忙吗?

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;   
    } 
}

最佳答案

首先使用scan.next()而不是scan.nextLine()

array[i][j] = scan.next();

see this for difference

字符串是对象,它们总是相同的。所以不要使用 == 进行比较。使用 .equals() 比较两个字符串。

array[i][j].equals(search);

==测试引用相等性(它们是否是同一个对象)。

.equals() 测试值是否相等(它们在逻辑上是否“相等”)。

是的,正如其他人的评论所提到的,您在最后一个嵌套 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获取列的长度。

所以整个代码将如下所示:

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;   
} 
}

关于java - 线性搜索数组和字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42515031/

相关文章:

java - 处理解释器的多参数操作码

java - 打印连续的 BufferedImage

java - 几次文件上传后应用程序没有响应

c++ - 初始化一个字符串数组作为参数

c++ - 从模板分配空指针

string - 如何将非空终止字符数组转换为字符串?

java - 使用按钮使组件不可见

java - 获取非空对象数组

c++ - (c++) 数组元素转换成字符串?

python - 无法跟踪为什么字符串排列未附加到数组排列的全局变量中