Java 为什么我的代码总是允许重复的名称?
我有一个关于编写代码的问题,该代码可以检查用户输入的内容(字符串)是否与数组已存储的字符串重复: 首先,我想指出,我在这里检查了关于重复的问题,但它们要么是通过导入扫描器以外的包来回答的,要么是检查已存储在int或string数组中的重复项。这是不同的:Java 为什么我的代码总是允许重复的名称?,java,arrays,duplicates,user-input,Java,Arrays,Duplicates,User Input,我有一个关于编写代码的问题,该代码可以检查用户输入的内容(字符串)是否与数组已存储的字符串重复: 首先,我想指出,我在这里检查了关于重复的问题,但它们要么是通过导入扫描器以外的包来回答的,要么是检查已存储在int或string数组中的重复项。这是不同的: int numberOfPigs = Integer.parseInt( keyboard.nextLine() ); Pigs pigArray = new pigs[numberOfPigs];
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.");
}
intnumberofpigs=Integer.parseInt(keyboard.nextLine());
清管器PIGRARY=新清管器[清管器数量];
对于(int i=0;i
…代码还没有结束。带有int的for循环在循环到开始之前,我仍然需要通过用户的几个输入,并通过i++输入下一个猪名。代码的其余部分我没有问题,只是每当我运行此代码时,重复的代码仍然允许…任何提示都非常感谢。谢谢
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
中的第一个元素是用户输入的名称,但所有其他元素仍然是null
tempArray[i]=name;
for (int k = i+1; k < pigArray.length; k++){
事实上,您正在将数组中的第一个元素(不是null
(它是用户输入)与所有其他元素(是null
)进行比较!当然,它不会认为任何东西是重复的,因为您是在对照一大堆空白内容检查它
由于用户输入的名称永远不等于null
,因此被错误地解释为“不重复”,并允许通过
System.out.println("The ID is duplicate.");
tempArrays[i] = keyboard.nextLine();
}
System.out.println("Not a duplicate! Yay.");
}
您在代码中犯了两个错误
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
intnumberofpigs=Integer.parseInt(keyboard.nextLine());
清管器PIGRARY=新清管器[清管器数量];
String[]tempArray=newstring[numberOfPigs];//我把这个移到了这里,看到了吗
//评论如下
对于(int i=0;i=0;k--){//您需要向后计数
//您只需检查已输入的重复项
//你做的正好相反
while(tempArray[i].equals(tempArray[k])){
System.out.println(“ID是重复的。”);
tempArray[i]=keyboard.nextLine();
}
System.out.println(“不是重复的!耶。”);
}//k环
}//我循环
谢谢你编辑我的帖子并回答这个问题。我会看看我能做些什么。如果你还在这里,我想问一个问题:我把第二个for循环改为:for(int k=0;int 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