java 检查数组中的值

s1ag04yj  于 2023-01-15  发布在  Java
关注(0)|答案(4)|浏览(145)

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

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

    }

}
gorkyyrv

gorkyyrv1#

好吧。你显然陷入了一个糟糕的思考过程,所以让我们清理一下记录,重新考虑一下。

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

解决方案

那么,让我们回顾一下您已经拥有了什么,以及您需要如何更改它。
public static void main(String[] args)
如果我是你,我会避免直接从这里调用方法。如果你这样做,每个方法都需要是静态的,这对你的类的功能范围来说是一个毫无意义的调整。在main方法内部创建一个你的类的新示例,并将此代码移到类的构造函数中。这将消除使每个方法都是静态的需要。

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

好了,你已经创建了一个scanner对象,它从System.in流中获取输入。当从键盘获取输入时,这是一个合理的做法。你还创建了一个数组来包含每一项。如果你只想让用户能够键入10个值,那么这是可以的。就个人而言,我会使用ArrayList,因为这意味着您可以根据用户的需要接收任意多的用户输入。
第二,你需要一个函数来比较输入和所有其他输入,你现在所拥有的显然不起作用,所以让我们再试一次。
您将需要一些输入userInput和一个集合来将其与allInputs进行比较。
allInputs需要可以从程序中的任何一点访问,因此将其设置为字段而不是局部变量可能是明智的。
然后,因为要将userInput与所有值进行比较,所以需要一个foreach循环:

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

现在的诀窍是把它放进一个循环里,这个循环和这个程序一起工作,这取决于你。

nbysray5

nbysray52#

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

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

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

  • 编辑 *

如果你必须使用Arrays,你可以保持数组排序,并做一个二进制搜索:

Arrays.sort(words);
boolean isAlreadyAdded = Arrays.binarySearch(words, newWord) >= 0;
busg9geu

busg9geu3#

你必须遍历整个数组,检查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()方法调用它。

nlejzf6q

nlejzf6q4#

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

相关问题