我正在进行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
有谁知道我的代码出错了?
重复:
我希望从第一个System.out.print(list.get(i));
获得一个字母的10个字符串值
我还想通过运行第二个System.out.println(list.get(i));
答案 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;分别删除后