如果我不“删除”数组中间的一个元素,我可以在数组中放置和“删除”元素,也可以打印它们,因为我的代码只在0出现之前显示,如果0是数组中的一个元素,打印就会停止。我试过这样做:
public static void showUsers() {
for (int i = 0; i <= 100; i++) {
if (users[i] == 0 && i == 0) {
System.out.println("There's no users");
//goes back to the main menu
return;
} else if (users[i] == 0) {
//goes back to the main menu
return;
}
System.out.println("List of Users: " + users[i]);
}
//goes back to the menu
return;
}
我也尝试过使用do while循环:
public static void showUsers() {
int i = 0;
if (users[i] == 0 && i == 0) {
System.out.println("There's no users");
//goes back to the main menu
return;
}
do {
if (users[i] == 0) {
i++;
return;
}
System.out.println("List of Users:" + users[i]);
i++;
} while (users[i] == 0 || i <= 100);
//goes back to the main menu
return;
}
因此,如果我创建3个用户,(1,2,3,0,0,0,…),它将打印数字1,2和3,但如果我“删除”数字2,那么数组将变成(1,0,3,0,0,0,…),它将只打印数字1。我试过的两个案子都是这样。
我想要的是,在“删除”数字2之后,打印数字1和3。
我应该改变打印的方式还是“消除”的方式以及如何改变?
2条答案
按热度按时间wz8daaqr1#
首先,为什么你的代码会这样?循环中的代码在循环的每次迭代中都会运行。因此,如果其中有一个if语句,并且if语句的主体包含一个return,那么在任何给定的迭代中,只要if语句为true,方法就会立即返回。
现在,修复你的代码。要跳过给定的迭代,请使用
continue
声明。这使得for循环继续到下一个迭代,但不会从方法返回。对于“没有用户”检查,可以使用布尔变量。将其初始化为true,并且无论何时打印出用户,都将其设置为false。这样,在for循环之后,如果变量仍然为true,就知道没有用户。以下是我对你的代码的两个修订:我们可以在这里做的一个改进是使用增强的for循环。这允许您除去该局部变量
i
(它仍然在内部使用,但我们不担心这里的性能)并且只处理数组元素。以下是我的更新版本:另一个改进是,如果希望“用户列表:”标题仅在有用户时出现。看看你的代码,这似乎是你想要的。要实现这一点,您只需缓冲输出并稍后打印,而不是立即打印。如果使用stringbuilder缓冲输出,则可以在for循环之后检查stringbuilder是否为空,从而消除对布尔变量的需要。下面是我将如何实现这一点:
rnmwe5a22#
你可以用这个方法
IntStream.filter
为此目的:输出: