java - 在用户输入的变量上使用 switch 语句而不知道它的最大值

标签 java

我知道问题陈述可能没有意义,但我不知道如何运作。让我用一个例子来展示:

如果我有这个代码:

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/

相关文章:

java - 如何使用fabric8 java客户端API在Kubernetes中执行滚动更新和回滚部署?

java - H2 数据库 : referring to a table in root schema from a foreign key constraint

java - 将 JLabel 添加到 JMenuBar 并使其占用所有可用空间

java - Android DownloadManager 在某些情况下不起作用

java - 如何扩展Java注解?

java - 需要有关基于用户角色的设计的建议

java - 我的扫描仪不断收到错误 "cannot find symbol"

java - 行程解压

java - JAVA EE WildFly 项目启动时执行的类是什么?

java - BouncycaSTLe PGP 加密错误非法 key 大小