我有一个关于编写代码的问题,该代码可以检查用户输入的内容(字符串)是否是数组已存储的字符串的副本:
首先,我想指出我在这里检查了有关重复的问题,但是他们要么通过导入除扫描程序之外的程序包来回答,要么检查已经存在的int或字符串存储数组中的重复项。这是不同的:
int numberOfPigs = Integer.parseInt( keyboard.nextLine() );
Pigs pigArray = new pigs[numberOfPigs];
for (int i = 0; i < pigArray.length; i++){
System.out.println("Pig name: " + (i+1));
String name = keyboard.nextLine();
String [] tempArray = new String [numberOfPigs];
tempArray[i]=name;
for (int k = i+1; k < pigArray.length; k++){
while (tempArray[i].equals( tempArray[k])){
System.out.println("The ID is duplicate.");
tempArrays[i] = keyboard.nextLine();
}
System.out.println("Not a duplicate! Yay.");
}
...代码没有结束。使用int的for循环仍需要在循环回到开头之前经过用户的几个输入并通过i ++接收下一个猪名。代码的其余部分我没有问题,只是每当我运行此代码时,仍然允许重复...任何提示都很感激。谢谢。
答案 0 :(得分:1)
你的代码犯了两个错误。
当你倒计时时,你正在计算你的k循环。
int numberOfPigs = Integer.parseInt(keyboard.nextLine());
Pigs pigArray = new pigs[numberOfPigs];
String[] tempArray = new String[numberOfPigs]; // I moved this here see
// comment below
for (int i = 0; i < pigArray.length; i++) {
System.out.println("Pig name: " + (i + 1));
String name = keyboard.nextLine();
// first problem was you were redeclaring your tempArray here
// thereby erasing previous elements over every iteration of i
tempArray[i] = name;
for (int k = i - 1; k >= 0; k--) { // you need to count backwards
//you only check what was already entered for duplicates
// you were doing the opposite
while (tempArray[i].equals(tempArray[k])) {
System.out.println("The ID is duplicate.");
tempArray[i] = keyboard.nextLine();
}
System.out.println(" Not a duplicate! Yay.");
}// k loop
}// i loop
答案 1 :(得分:0)
int numberOfPigs = Integer.parseInt( keyboard.nextLine() );
Pigs pigArray = new pigs[numberOfPigs];
for (int i = 0; i < pigArray.length; i++){
System.out.println("Pig name: " + (i+1));
String name = keyboard.nextLine();
String [] tempArray = new String [numberOfPigs];
tempArray
现在是一个numberOfPigs
的数组,其中每个元素都是null
。
tempArray[i]=name;
现在tempArray
中的第一个元素是用户输入名称,但所有其他元素仍为null
。
for (int k = i+1; k < pigArray.length; k++){
为什么您使用的是pigArray.length
,但您根本没有在循环中使用pigArray
?
while (tempArray[i].equals( tempArray[k])){
事实上,您正在比较数组中的第一个元素(不是null
(它是用户输入))与所有其他元素( < / em> null
!当然,它不会认为任何是重复的,因为你正在针对一大堆 nothing 检查它。
由于用户输入的名称永远不会等于null
,因此将其错误地解释为&#34;不是重复的&#34;,并允许通过。
System.out.println("The ID is duplicate.");
tempArrays[i] = keyboard.nextLine();
}
System.out.println("Not a duplicate! Yay.");
}