我知道问题陈述可能没有意义,但我不知道如何使用它。让我举一个例子:
如果我有这段代码:
URLQueryItem
我遇到的问题是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");
...
}
}
的值是用户从命令行输入的值,当我在for循环中时我不知道它的值。所以在switch语句中我不知道我要编写多少个案例。
在每个case语句中,我想在另一端向我的服务器套接字发送不在case语句中的值。因此,如果案例中的值为someUpperLimit
,我想发送1
等等。是否有其他方法可以执行此操作,因为我不知道在这种情况下需要多少个案例语句。< / p>
答案 0 :(得分:3)
假设您使用的是Java 8+,您可以嵌套一对IntStream
(s),如
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());
}
答案 1 :(得分:1)
您案例中的switch语句是多余的。您只需创建一个ArrayList并使用从1到someUpperLimit
的值填充它。然后在循环中从列表中删除i
元素并将其写入out
。
答案 2 :(得分:1)
您根本不需要使用switch case
语句。根据您的要求,您可以执行以下操作。