我需要检查数组以查看用户输入是否已存在,并显示是否存在用户输入的消息。第一部分是工作,但我试图为单词检查创建一个方法,我不确定我是否在正确的道路上,欢呼。
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");
}
}
}
答案 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”)方法检查是否存在重复的用户条目。