我的任务是在数组中输入名称。如果已经输入了名称,程序必须提醒相关信息并提供以相同号码重新输入播放器。
这是我的代码:
public void enterNames() {
for (int i=0; i<nameOfPlayers.length; i++)
{
do
{
// isDuplicate is a Boolean initialized to false
System.out.println("CHECK": + isDuplicate);
System.out.println("Enter player " + (i+1) + ":");
nameOfPlayers[i] = in.next();
for (int k=0; k<nameOfPlayers.length; k++)
{
if (k!=i && nameOfPlayers[i].equals(nameOfPlayers[k]))
{
isDuplicate = true;
break;
}
}
} while (isDuplicate = false);
}
}
有趣的是,即使我输入一个重复值,它也会被捕获并为isDuplicate指定true,但是当它返回到while循环的开头时,该值再次为false(“CHECK:false”)。
看起来很容易,但我被抓了......
另外,我不想使用HashSet并且只想使用Array。
非常感谢!
编辑:
感谢其他人,我将代码重写为以下内容:
public void enterNames() {
List<String> nameOfPlayersList = new ArrayList<String>();
int i = 0;
for (i=0; i<numberOfPlayers;)
{
while(true)
{
System.out.println("Enter player " + (i+1) + ":");
String input = in.next();
if(!nameOfPlayersList.contains(input))
{
nameOfPlayersList.add(input);
i++;
break;
}
System.out.println("Player " + input + " already exists, please retry");
}
}
}
答案 0 :(得分:1)
您遇到的问题是由于
} while (isDuplicate = false);
应该是(介意双==)
} while (isDuplicate == false);
除此之外,您的代码效率很低。如果真的是你想要的话,你可能会用两个阵列做得更好,否则链表最好。
答案 1 :(得分:1)
您的while
不正确,此
while (isDuplicate = false);
将false
分配给isDuplicate
,其副作用也是评估false
。你看过像
while (isDuplicate == false);
或更短的
while (!isDuplicate);
答案 2 :(得分:1)
回答改革后,使用List添加越来越多没有预定义大小的元素。
将while (isDuplicate == false);
更改为while (!isDuplicate);
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
List<String> nameOfPlayers = new ArrayList<String>();
boolean isDuplicate = false;
int i = 0;
do {
System.out.println("Enter player " + (i + 1) + ": or Q for Quit");
String input = scanner.next();
if (!input.equalsIgnoreCase("Q")) {
if (nameOfPlayers.contains(input)) {
isDuplicate = true;
} else {
nameOfPlayers.add(input);
isDuplicate = false;
}
System.out.println("CHECK : " + isDuplicate);
} else {
break;
}
i++;
} while (!isDuplicate);
}
Enter player 1: or Q for Quit
ankur
CHECK : false
Enter player 2: or Q for Quit
singhal
CHECK : false
Enter player 3: or Q for Quit
ankur
CHECK : true