0

我需要检查数组以查看用户输入是否已经存在,并显示一条消息,说明它是否存在。第一部分正在工作,但我试图创建一个检查单词的方法,我不确定我是否走在正确的道路上,干杯。

 import java.util.Scanner;

public class InputLoop {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        String array[] = new String[10];
        int num = array.length, i = 0;
        System.out.println("Enter a word");
        for (i = 0; i < num; i++) {
            while (scan.hasNextInt()) // while non-integers are present...
            {

                scan.next(); // ...read and discard input, then prompt again
                System.out.println("Bad input. Enter a word");

            }

            array[i] = scan.next();
            WordCheck();
        }
    }

    public void WordCheck(String[] i) {
        Scanner scan = new Scanner(System.in);
        System.out.println("Enter another word");

        if (scan.next().equals(array[i])) {
            System.out.println("The word has been found");
        } else {
            System.out.println("The word has not been found");
        }

    }

}
4

4 回答 4

4

对。你显然已经经历了一个糟糕的思考过程,所以让我们清理一下,重新思考一下。

  • 第一步:你想接受一些用户输入
  • 第二步:将其与所有以前的用户输入进行比较,看看它是否存在。
    • 如果存在,则返回一条消息,指示该值已被输入。
    • 否则忽略输入并继续执行
  • 重复第一步。

解决方案

所以,让我们回顾一下你已经拥有什么,以及你需要如何改变它。

public static void main(String[] args)

如果我是你,我会避免直接从这里调用方法。如果你这样做,每个方法都需要是静态的,这对你的类的功能范围进行毫无意义的调整。在 main 方法中创建类的新实例,并将此代码移动到类的构造函数中。这将消除使每个方法都成为静态的需要。

Scanner scan = new Scanner(System.in);
String array[] = new String[10];

System.in好的,您已经创建了一个从流中获取输入的扫描仪对象。从键盘输入时,这是一件合理的事情。您还创建了一个数组来包含每个项目。如果您只希望用户能够输入 10 个值,那么这很好。就个人而言,我会使用ArrayList,因为这意味着您可以根据用户的需要接收尽可能多的用户输入。

其次,您需要一个函数来比较输入与所有其他输入。你目前所拥有的显然是行不通的,所以让我们再试一次。

您将需要一些输入,userInput和一个集合来比较它,allInputs

allInputs需要从程序中的任何点都可以访问,因此将其设置为字段而不是局部变量可能是明智的。

然后,因为您将 userInput 与所有值进行比较,所以您将需要一个 foreach 循环:

for(String s : allInputs)
{
    if(s.equals(userInput))
    {
       // Output message code.
    }
}

现在的诀窍是把它装进一个适用于这个程序的循环中。这取决于您,因为我们不是代码编写服务。希望我的回答能让你走上正轨:)

于 2013-03-07T22:23:52.723 回答
1

一个简单的解决方案是使用Set

Set<String> words = new HashSet<String>();

使用方法添加单词add()并检查是否已经使用contains(word)方法添加了单词。

编辑

如果必须使用Arrays,您可以保持数组排序并进行二进制搜索:

Arrays.sort(words);
boolean isAlreadyAdded = Arrays.binarySearch(words, newWord) >= 0;
于 2013-03-07T22:26:29.980 回答
0

您将不得不遍历整个数组并检查 scan.next() 是否等于其中任何一个 - 如果是则返回 true - 如下所示:

String toCheck = scan.next();
for (String string : i) { //For each String (string) in i
    if (toCheck.equals(i)) {
        System.out.println("The word has been found");
        return;
    }
}
System.out.println("The word has not been found");

这假设您调​​用WordCheck(),将数组传递给它 - 此方法也必须是静态的,您才能从该main()方法调用它。

于 2013-03-07T22:22:02.123 回答
0

您可以使用 arraylist.contains("name") 方法检查是否存在重复的用户条目。

于 2017-08-20T17:37:22.327 回答