列表的输出不正确

时间:2015-01-12 13:16:01

标签: java list output

我正在进行Lists的初学Java教程,并提出以下问题

// 1) Declare am ArrayList of strings
// 2) Call the add method and add 10 random strings
// 3) Iterate through all the elements in the ArrayList
// 4) Remove the first and last element of the ArrayList
// 5) Iterate through all the elements in the ArrayList, again.

以下是我的代码

import java.util.ArrayList;
import java.util.Random;

public class Ex1_BasicArrayList {

    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<String>();
        for (int i = 0; i <= 10; i++){
            Random rand = new Random();
            String alphabet = "abcdefghijklmnopqrstuvwxyz";
            StringBuilder sb = new StringBuilder();
            sb.append(alphabet.charAt(rand.nextInt(alphabet.length())));
            String randy = sb.toString();
            list.add(randy);
        }
        for (int i = 0; i <  list.size(); i++){
            System.out.print(list.get(i));
        }   
        list.remove(0);
        list.remove(list.size()-1);

        for (int i = 0; i < list.size(); i++){
            System.out.println(list.get(i));
        }
    }
}

我已设法生成输出,但它不正确:(

对于我的第一个System.out.print(list.get(i));我试图获得10个字符串值的输出,但我得到12个。

示例输出:nhgacqhlejph

当我运行第二个System.out.println(list.get(i));时,我得到8个字符串值的输出,如果我在列表中以10开始,但是我有12个,这是正确的,所以这意味着删除了4个值:/

示例输出:

g
a
c
q
h
l
e
j

有谁知道我的代码出错了?

重复:

  1. 我希望从第一个System.out.print(list.get(i));获得一个字母的10个字符串值

  2. 我还想通过运行第二个System.out.println(list.get(i));

  3. 从原始列表中减少2个字符串值

3 个答案:

答案 0 :(得分:4)

首先,for循环应停在i=9而不是i=10。因此循环应该如下:

for (int i = 0; i < 10; i++){

其次,在删除第一个和最后一个元素后打印列表时,您不打印新行以区分两个输出。您可以在它们之间添加println,以便它们分开:

for (int i = 0; i <  list.size(); i++){
    System.out.print(list.get(i));
}   
System.out.println();
list.remove(0);
list.remove(list.size()-1);

说完这个之后,你的实现效率不高,因为它在循环的每次迭代中创建StringBuilder以及Random对象。您只能创建一个Random对象,以便在每次迭代时使用它。您也不需要StringBuilder开头。该程序可以简化为以下内容,例如:

ArrayList<String> list = new ArrayList<String>();
Random rand = new Random();
String alphabet = "abcdefghijklmnopqrstuvwxyz";
for (int i = 0; i < 10; i++){
    list.add(String.valueOf(alphabet.charAt(rand.nextInt(alphabet.length()))));
} 

答案 1 :(得分:2)

首先:int i = 0; i <= 10; i++生成11个字符。 第一个循环将产生11个字符(没有换行符)。 第二个循环将产生9个字符(带换行符)。

因此,您会在一行中看到12个字符(第一个循环中的11个,第二个中的一个),然后在下一行中看到8个字符

答案 2 :(得分:2)

for (int i = 0; i <= 10; i++)    

上面的lop从0到10都包括(所以它运行了11次)除此之外你的代码看起来很好。将 i&lt; = 10 更改为 i&lt; 10

我重写了该程序,您可以将其用于测试

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class Ex1_BasicArrayList {

    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<String>();
        for (int i = 0; i < 10; i++){
            Random rand = new Random();
            String alphabet = "abcdefghijklmnopqrstuvwxyz";
            StringBuilder sb = new StringBuilder();
            sb.append(alphabet.charAt(rand.nextInt(alphabet.length())));
            String randy = sb.toString();
            list.add(randy);
        }

        printList(list);  

        // Remove Elements
        list.remove(0);
        list.remove(list.size()-1);

        printList(list);
    }

    /**
     * @param list
     */
    private static void printList(List<String> list) {
        System.out.println("List size:"+list.size());
        System.out.println("List="+list);
        for(String listElement: list){
            System.out.println(listElement);
        }
    }
}

该计划的输出是

List size:10
List=[k, g, i, a, g, k, s, s, x, t]
k
g
i
a
g
k
s
s
x
t
List size:8
List=[g, i, a, g, k, s, s, x]
g
i
a
g
k
s
s
x

注意 列表条目随着随机选择而变化,但大小将为10&amp; 8删除之前&amp;分别删除后