Java 如何在数组中循环并检查重复项?
我正在创建一个程序,允许您在一个数组中存储10个项目。我无法让程序执行的是,如果数组中已存在一个输入项,则会给出一个错误Java 如何在数组中循环并检查重复项?,java,arrays,loops,Java,Arrays,Loops,我正在创建一个程序,允许您在一个数组中存储10个项目。我无法让程序执行的是,如果数组中已存在一个输入项,则会给出一个错误 while (no input or duplicated){ ask for a new string if (not duplicated) { store the string in the array break; } } 因此,例如,如果数组看起来像[banana,potato,3,4,yes,
while (no input or duplicated){
ask for a new string
if (not duplicated) {
store the string in the array
break;
}
}
因此,例如,如果数组看起来像[banana,potato,3,4,yes,…],我再次输入banana,它应该说“Item has has has storage”,并要求我重新输入值。我目前拥有的代码是:
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++;
publicstaticvoidmain(字符串[]args){
扫描仪键盘=新扫描仪(System.in);
int stringNumber=0;
String[]stringArray=新字符串[10];
对于(int i=0;i您应该在插入数组之前检查数组中的输入值。您可以编写类似于exists
的方法,该方法接受String[]
&String
作为输入参数,并在字符串数组中查找字符串,如果找到结果,则返回true
否则false
public boolean exists(String[] strs, String search){
for(String str : strs){
if(str.equals(search))
return true;
}
return false;
}
当它线性搜索时,性能将为O(n)。当您获得字符串输入时,您可以创建一个方法,该方法将:
遍历整个数组并检查字符串是否在其中(可以使用equals()
检查字符串的内容)
返回一个布尔值,无论字符串是否在数组中
然后添加一个while结构来重新请求输入
基本上它可以是这样的:
String input = "";
do {
input = keyboard.next();
}while(!checkString(input))
checkString
方法将遍历所有数组(使用for循环添加元素),并返回相应的布尔值
如果不在数组中引入一些顺序,也不使用诸如HashSet之类的附加结构,则必须查看整个数组,并将新项与数组中已存在的每个项进行比较
对我来说,最好的解决方案是使用helperhashset来检查项目是否存在
另请看。当您不想存储重复项时,最好使用。然后使用方法检查元素是否已经存在。如果排序很重要,则使用
如果确实要使用数组,可以为数组编写实用程序方法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.
}
- 要在数组上迭代,请选中
- 要比较字符串,请使用方法
为了避免这种情况,您应该使用数组而不是数组和循环,直到size=10
如果需要保留数组,可以使用
.contains()命令
方法检查数组中是否已存在项。可以使用嵌套循环遍历数组以查看是否存在新输入。最好在函数中执行此操作。执行此操作时,还需要确保不在第一个元素处,否则将出现空指针异常
while (no input or duplicated){
ask for a new string
if (not duplicated) {
store the string in the array
break;
}
}
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++;
}
for(int i=0;i 0){
对于(int j=0;j
我不理解这个问题。到底是什么阻止你检查数组并检查重复项?缺少一些代码将它们添加到集合中,如果集合已经存在,它将不允许你这样做。最后转换为数组(你真的需要一个数组吗?)不要编写自己的printary
-方法。使用System.out.println(Arrays.toString(stringArray));
lngo,问题是我不知道如何循环数组,看看输入字符串值是否已经存在。(我是初学者)这正是我想我应该做的。问题是我已经使用Java两天了,我不知道如何编写这段代码:(我只使用了循环和数组,假设这是学校作业,你不能使用其他数据类型。这段代码中有一个小错误,但我正在修复它!谢谢Matt,这让我对这个程序应该采取的方向有了更好的看法。:)