检查数组中的值

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

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

对。 你已经清楚地看到了一个糟糕的思维过程,所以让我们清楚一下并重新思考。

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

  • 解决方案

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

    public static void main(String[] args)

    如果我是你,我会避免直接从这里调用方法。 如果这样做,每个方法都需要是静态的,这是对类function范围的无意义调整。 在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. } } 

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

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

     Set words = new HashSet(); 

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

    编辑

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

     Arrays.sort(words); boolean isAlreadyAdded = Arrays.binarySearch(words, newWord) >= 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()方法调用它。

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