切换用户输入变量的语句,而不知道它的最大值

时间:2017-04-11 00:58:28

标签: java

我知道问题陈述可能没有意义,但我不知道如何使用它。让我举一个例子:

如果我有这段代码:

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>

3 个答案:

答案 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语句。根据您的要求,您可以执行以下操作。

  1. 将ArrayList从1填充到someUpperLimit。
  2. 对于从1到someUpperLimit的每个i ..发送除Array之外的ArrayList中的所有元素。