检查数组中的值

时间:2013-03-07 22:06:15

标签: java arrays

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

 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 个答案:

答案 0 :(得分: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.
    }
}

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

答案 1 :(得分:1)

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

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

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

修改

如果必须使用Arrays,则可以对数组进行排序并进行二分查找:

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

答案 2 :(得分: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()方法调用它。

答案 3 :(得分:0)

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