【问题标题】:ArrayList and LoopArrayList 和循环
【发布时间】:2015-05-01 16:08:10
【问题描述】:
ArrayList<String> gradeN = new ArrayList<String>();
gradeN.add("one");
gradeN.add("two");
int num2 = 0;
while (num<5){
    gradeN.get(0).concat("*");
    num2++;
}
System.out.println(gradeN.get(0));

这不起作用。 我想要这样的输出:

 one*****

并在循环中执行此操作..

【问题讨论】:

标签: java loops arraylist


【解决方案1】:

你的代码有两个错误:

  1. while 循环中递增的变量与条件中使用的变量不同。

  2. Strings 是不可变的。 String.concat 返回一个不同 String 对象并且不修改原始String。这意味着您的 List 中的值不会被修改。要解决此问题,请使用 List.set 将列表中的旧值替换为新值。

    int num2 = 0;
    while (num2 < 5) {
        String newValue = gradeN.get(0).concat("*");
        gradeN.set(0, newValue);
        num2++;
    }
    

【讨论】:

    【解决方案2】:

    您的问题有些不清楚。你总是想给字符串加 5 星吗?如果是这样,一个带有 5 颗星的常量字符串比循环更有意义。我假设你真的打算对gradeN 的每个元素都这样做?所以是这样的:

    ArrayList<String> gradeN = new ArrayList<String>();
    gradeN.add("one");
    gradeN.add("two");
    
    for (int i = 0; i < gradeN.size(); i++) {
        gradeN.set(i, gradeN.get(i) + "*****");
        System.out.println(gradeN.get(i));
    }
    

    如果添加的星数可能不同,并且您确实想将它们附加到一个循环中,那么您可以使用 StringBuilder 来构建它:

    ArrayList<String> gradeN = new ArrayList<String>();
    gradeN.add("one");
    gradeN.add("two");
    
    int num = 5;
    
    for (int i = 0; i < gradeN.size(); i++) {
        StringBuilder stars = new StringBuilder(gradeN.get(i));
        for (int j = 0; j < num; j++) {
            stars.append('*');
        } 
        gradeN.set(i, stars.toString());
        System.out.println(gradeN.get(i));
    }
    

    【讨论】:

      【解决方案3】:

      一种解决方案是在每个循环中获取gradeN.get(0) 的值并将* 附加到它。

      即:

      int num2 = 0;
      while (num2<5){
       gradeN.set(0, gradeN.get(0)+"*");
      num2++;}
      

      输出:

      one*****
      

      演示:

      http://ideone.com/XQvWqX

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-25
        • 2012-04-07
        • 2013-09-10
        • 2014-06-10
        • 2020-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多