在Array中搜索Term Finder

时间:2016-03-22 02:07:21

标签: java

以下是代码:

import java.util.Scanner;

public class Finder {


public static void main(String[] args) {

    Scanner scnr = new Scanner(System.in);

    String [] names = new String[5];
    String searchTerm = "";

    for (int i = 0; i <= names.length - 1; i++) {
        System.out.print("Enter a name: ");
        names[i] = scnr.next();
    }

    System.out.println();
    System.out.print("Enter a name to search for: ");
    searchTerm = scnr.next();

    for (int i = 0; i <= names.length - 1; i++) {
        if (searchTerm.equals(names[i])) {
            System.out.println(searchTerm + " found!!");
        }
        else {
            System.out.println(searchTerm + " not found!!");
        }
    }  

}

}

我在第二个for循环中处理if / else语句,当我添加语句的else部分时,它返回:

输入名称:Luke

输入名称:Kassy

输入名称:Chloe

输入名称:Jon

输入名称:Jake

输入要搜索的名称:Chloe

Chloe没找到!!

Chloe没找到!!

克洛伊找到了!!

Chloe没找到!!

Chloe没找到!!

我不确定为什么它只是没有说&#34; Chloe发现!!&#34;而不是它说的是什么?

1 个答案:

答案 0 :(得分:4)

现在使用您的代码,当您循环查找元素&#34; Chloe&#34;在names数组中,无论如何,您都会遍历每个元素并打印出一个语句。 &#34;小克&#34;是names[2],但您的循环首先检查names[0]names[1]。由于他们不是&#34; Chloe&#34;,它将打印&#34; Chloe未找到&#34; (if语句的else部分)。一旦到达names[2],它就会找到&#34; Chloe&#34; if if语句的if部分将被执行,打印出&#34; Chloe找到&#34;。但是你的循环不会就此停止,因此循环将查看names[3]names[4]并打印出&#34; Chloe未找到&#34;因为他们都不等于&#34; Chloe&#34;。简单的解决方法是仅打印&#34; Chloe未找到&#34;当循环结束而没有找到&#34; Chloe&#34;并且只打印&#34; Chloe发现&#34;当在循环中间时,&#34; Chloe&#34;找到了。有很多方法可以做到这一点,但我建议的一种方法是在循环完成后使用布尔变量进行检查以查看&#34; Chloe&#34;被发现与否。

boolean termFound = false;
for (int i = 0; i <= names.length - 1; i++) {
        if (searchTerm.equals(names[i])) {
            System.out.println(searchTerm + " found!!");
            termFound = true;
            break;//if term is found, you can break out of the loop early
        }

}  
if(!termFound){ //if searchTerm was not found
        System.out.println(sertTerm + " not found!!");
}