我知道问题陈述可能没有意义,但我不知道如何运作。让我用一个例子来展示:
如果我有这个代码:
Socket socket = new Socket(IP_ADDRESS, PORT_NUMBER);
for (int i = 0; i < someUpperLimit; i++) {
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
switch(i) {
case 1:
out.write("2,3,4");
case 2:
out.write("1,3,4");
case 3:
out.write("1,2,4");
case 4:
out.write("1,2,3");
...
}
}
我遇到的问题是 someUpperLimit
的值是用户从命令行输入的值,当我处于 for 循环中时我不知道它的值。所以在 switch 语句中我不知道我需要写多少个案例。
在每个 case 语句中,我想将 case 语句中没有的值发送到另一端的服务器套接字。因此,如果案例中的值是 1
我想发送 2,3,4
等等。有没有其他方法可以做到这一点,因为我不知道有多少在这种情况下我需要案例陈述。
最佳答案
假设您使用的是 Java 8+,您可以嵌套一对 IntStream
,例如
IntStream.rangeClosed(1, someUpperLimit)
.forEachOrdered(x -> out.write(IntStream.rangeClosed( //
1, someUpperLimit).filter(y -> x != y) //
.mapToObj(String::valueOf).collect(Collectors.joining(","))));
如果你没有使用Java 8+,或者你不理解上面的内容,那么它相当于下面的内容
for (int x = 1; x <= someUpperLimit; x++) {
StringBuilder sb = new StringBuilder();
for (int y = 1; y <= someUpperLimit; y++) {
if (y != x) {
if (sb.length() != 0) {
sb.append(",");
}
sb.append(y);
}
}
out.write(sb.toString());
}
关于java - 在用户输入的变量上使用 switch 语句而不知道它的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43335068/