线性搜索数组和字符串



我这里有一个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();

请参阅此差异

和字符串是对象,它们总是相同的。因此,不要使用==对其进行比较。使用.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++;
            }
        }
    }

希望这会有所帮助:)

编辑:

将这条线排除在嵌套以进行循环:

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

对不起,我没有足够的声誉点可以评论您的后续行动。您无法填充数组的原因可能是因为 scan.nextInt();不消耗" n"。

您可以通过更改代码以消耗 n的方式来消耗newline char: Scanner scan = new Scanner(System.in); int row = scan.nextInt(); int col = scan.nextInt(); scan.nextLine();

最新更新