java中的循环错误

java中的循环错误,java,for-loop,Java,For Loop,我试图创建一个方法,在字符串数组中搜索输入状态并返回索引。如果用户输入的查询不在数组中,我希望它请求一个新的状态进行搜索。现在我陷入了困境。我知道我正在进入一个有效的状态,但它一直在要求一个有效的状态,并且会让我退出循环 多谢各位 public static void main(String[] args) throws FileNotFoundException { String[] stateNames = importFile("stateNames.txt"); Stri

我试图创建一个方法,在字符串数组中搜索输入状态并返回索引。如果用户输入的查询不在数组中,我希望它请求一个新的状态进行搜索。现在我陷入了困境。我知道我正在进入一个有效的状态,但它一直在要求一个有效的状态,并且会让我退出循环

多谢各位

public static void main(String[] args) throws FileNotFoundException {
    String[] stateNames = importFile("stateNames.txt");
    String[] nicknames = importFile("nicknames.txt");
    String[] populations = importFile("population.txt");
    String[] flowers = importFile("flowers.txt");
    String[] Capital = importFile("capitals.txt");
    int index = askState(stateNames);
     System.out.println("The index of your state is"+ index);
}
static final int NUM_STATES = 50;

public static String[] importFile(String fileName) throws
        FileNotFoundException {

    String[] array = new String[NUM_STATES];

    File inputFile = new File(fileName);
    Scanner scanner = new Scanner(inputFile);


    for (int i = 0; i < NUM_STATES; i++) {
        array[i] = scanner.nextLine();

    }
    return array;

}

public static int askState(String[] stateNames) {
    Scanner keyboard = new Scanner(System.in);
    String state;
    int statePosition = -1;
    System.out.println("Please enter a state that you would like to search:");
    state = keyboard.nextLine();
    {
        for (int i = 0; i < NUM_STATES; i++) {
            if (state.equals(stateNames[i])) 
                statePosition = i;
                else {
                System.out.println("Please enter a valid state:");
            state = keyboard.next();
            }}
        return statePosition;

    }

    }
}试试这个:

    public static int askState(String[] stateNames) {
    Scanner keyboard = new Scanner(System.in);
    String state;
    int statePosition = -1;
    System.out.println("Please enter a state that you would like to search:");
    state = keyboard.nextLine();
    {
        for (int i = 0; i < NUM_STATES; i++) {
            if (state.equals(stateNames[i])){ 
                statePosition = i;
                return stateposition;
            }
        }
        System.out.println("Please enter a valid state:");          
    }
    return statePosition;

}

}

您已经习惯了Java中的集合类。如果不需要使用循环,我会将项目导入集合,然后可以询问集合是否存在元素。 见:

虽然在您的情况下这并不重要,但从长远来看,集合的性能要比用蛮力方式搜索数组要好


关于您的具体问题:确保数组中的值与用户输入的值相同。您可以使用一个简单的“equals”和一个只包含一个状态的伪数组来测试它,然后自己输入该状态。

您可以告诉用户,一旦在数组中发现一个与输入状态不相等的项,就立即输入一个有效状态。只有在确定数组中的所有项与输入的状态不同时,才能执行此操作。只有检查了数组中的每个元素,您才会知道。我的建议是:在IndexOfitemArrayString[]数组、字符串项中编写一个方法