【问题标题】:Loop through a counting String value [duplicate]循环计数字符串值[重复]
【发布时间】:2013-11-28 19:40:11
【问题描述】:

我必须显示v10000v10500 范围内的所有服务器名称。
下面是我尝试过的代码,但有时它显示为零。

String template = "v10";
int count = 0;

while (count < 501) {
  String number;        
  if (count < 100) {
    number = "00" + Integer.toString(count);
  } else if(count < 10) {
    number = "0" + Integer.toString(count);
  } else {
    number = Integer.toString(count);
  }
  String server = template + number;
  System.out.println(server);
  count++;
}

但是当我向老板展示这个解决方案时,他只是笑着说:

我可以做得更好。

如何更改我的代码以使其正常工作?我是 Java 新手。

【问题讨论】:

  • 切换你的 if else/if 左右。 count &lt; 10 位于顶部,count &lt; 100 位于底部
  • 你需要一个更有帮助的老板。
  • 总是首先检查最低值,否则它将永远无法进行该测试(9 小于 100 且小于 10,因此您将进入小于 100。我现在将代码更改为小于首先是 10。此外,对于 10 以下的值,您添加 2 个零,对于 100 以下的值,您只添加 1 个零,这样所有值都将有 3 个数字 :-)
  • @RobChurch 你是对的。老年人/老板应该更有帮助。

标签: java string loops integer


【解决方案1】:

我愿意

for(int i = 10000; i <= 10500; i++)
    System.out.println("v" + i);

【讨论】:

  • 请把
  • 这就是我要写的……
【解决方案2】:

这是一条很长的路。更好地使用String.format()
一个可行的解决方案是:

for (int i = 0; i <= 500; i++) {
    String server = String.format("v10%03d", i);
    System.out.println(server);
}

格式字符串是这样构建的:
v10 -> 服务器的字符串模板
%0 --> 你需要的零
3d --> 三位数将被添加

所以你的 int i 将被这样格式化。

【讨论】:

  • 使用 String.format 非常昂贵,而且有点复杂。恕我直言。
  • @PeterLawrey:总的来说,String.format 是一个强大而好的解决方案。但就 OP 的问题而言,您的答案会更合适。
  • @dTDesign:就我而言,彼得的解决方案更好。但我会牢记字符串格式。为此 +1
  • 我同意 String.format 是一种更灵活的解决方案,注意这一点很有用。
【解决方案3】:

所有其他答案都提出了解决此问题的更好方法。我打算自己建议使用格式,但是从 10000 开始的循环也可以:

for (int i = 0; i <= 500; i++) {
    String server = String.format("v10%03d", i);
    System.out.println(server);
}

或者简单(并且更快):

for(int i = 10000; i <= 10500; i++) {
    System.out.println("v" + i);
}

但我认为我们也应该修复 OP 代码中的错误:

while (count < 501){
    String number;

    if(count < 100){
        number = "00" + Integer.toString(count);
    }else if(count < 10){
        number = "0" + Integer.toString(count);
    }else{
        number = Integer.toString(count);
    }
    String server = template + number;
    System.out.println(server);
    count++;
}

我建议改用 for 循环,但这不是问题。问题是测试的顺序。如果count &lt; 100 为假,那么count &lt; 10 也为假。你永远不会进入这个街区。切换 if 语句的顺序。

所以固定代码:

for (int count = 0; count <= 500; count++){
    String number;

    if(count < 10){
        number = "00" + Integer.toString(count);
    }else if(count < 100){
        number = "0" + Integer.toString(count);
    }else{
        number = Integer.toString(count);
    }
    String server = template + number;
    System.out.println(server);
}

【讨论】:

  • 我最喜欢你的第一个解决方案。它实用,显示意图并且易于扩展/重用。
【解决方案4】:

只需使用for 循环:

for(int i = 10000; i <= 10500; i++)
    System.out.println("v" + i);

【讨论】:

  • 晚了几秒钟!
【解决方案5】:
        String template = "v";
        for(int i=10000;i<=10500;i++){
            System.out.println(template+i);
        }

【讨论】:

    【解决方案6】:

    在 for 循环中使用 String.format:

    for (int i = 10000; i <= 10500; ++i) {
        System.out.println(String.format("v%d", i));
    }
    

    这将计算这些整数,并在每个整数前面加上一个“v”。

    【讨论】:

      【解决方案7】:

      您可以从 10000 到 10500 执行 for 并使用各种解决方案将 int(或您使用的任何数字类型)转换为字符串,例如Integer.toString().

      然后您可以使用StringBuilder 连接"v" 和您的结果。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-24
        • 2021-10-06
        相关资源
        最近更新 更多