我正在创建一个程序,允许您在数组中存储10个项目。我无法让程序执行的操作是,如果数组中已存在其中一个输入项,则会出错。
所以,例如,如果数组看起来像[香蕉,马铃薯,3,4,是的......]并且我再次输入香蕉,它应该说“项目已经存储”并要求我重新输入值。我目前的代码是:
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
int stringNumber = 0;
String[] stringArray = new String[10];
for (int i = 0; i <= stringArray.length; i++) {
out.println("\nEnter a string");
String input = keyboard.next();
stringArray[stringNumber] = input;
out.println("\"" + stringArray[stringNumber] + "\"" + " has been stored.");
PrintArray(stringArray);
stringNumber++;
答案 0 :(得分:3)
当您不想存储重复项时,最好使用HashSet
。然后使用HashSet#contains()
方法检查元素是否已存在。如果排序很重要,请使用LinkedHashSet
。
如果您真的想使用数组,可以为数组编写实用程序方法contains()
。传递数组,并搜索值。
public static boolean contains(String[] array, String value) {
// Iterate over the array using for loop
// For each string, check if it equals to value.
// Return true, if it is equal, else continue iteration
// After the iteration ends, directly return false.
}
String#equals(Object)
方法。答案 1 :(得分:3)
您可以使用嵌套循环遍历数组以查看新输入是否存在。在函数中执行此操作会更好。此外,在执行此操作时,您需要确保您不在第一个元素,否则您将获得空指针异常。
for (int i = 0; i <= stringArray.length; i++) {
boolean isInArray = false;
System.out.println("\nEnter a string");
String input = keyboard.next();
if (i > 0) {
for (int j = 0; j < stringArray.length; j++) {
if (stringArray[j].equalsIgnoreCase(input)) {
isInArray = true;
break;
}
}
}
if (!isInArray) {
stringArray[stringNumber] = input;
} else {
System.out.println("\"" + stringArray[stringNumber-1] + "\""
+ " has been stored.");
}
PrintArray(stringArray);
stringNumber++;
}
答案 2 :(得分:1)
获得String输入后,您可以创建一个方法:
equals()
检查字符串的内容)基本上它看起来像这样:
String input = "";
do {
input = keyboard.next();
}while(!checkString(input))
checkString
方法将遍历所有数组(使用for循环,就像添加元素一样)并返回相应的boolean
值。
答案 3 :(得分:0)
在插入之前,您应该检查数组中的输入值。您可以编写exists
之类的方法来接受String[]
&amp; String
作为输入参数,并在String数组中找到该字符串,如果找到结果,则返回true
else false
。
public boolean exists(String[] strs, String search){
for(String str : strs){
if(str.equals(search))
return true;
}
return false;
}
在线性搜索时性能为O(n)。
答案 4 :(得分:0)
如果不在数组中引入某些顺序而不使用HashSet的附加结构,则必须查看整个数组并将新项与数组中已存在的每个项进行比较。
对我来说,最好的解决方案是使用帮助程序HashSet检查项目是否存在。
另请查看this question。
答案 5 :(得分:0)
为了避免你应该使用Set
而不是数组并循环直到size = 10.
如果您需要保留数组,可以使用.contains()
方法检查该项目是否已存在于数组中。
答案 6 :(得分:0)
while (no input or duplicated){
ask for a new string
if (not duplicated) {
store the string in the array
break;
}
}