列表输出不正确
Incorrect Output for List
我正在做有关列表的初学者 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
有人知道我的代码哪里出错了吗?
重复:
我希望从第一个字母开始得到 10 个字符串值,每个字母为一个字母 System.out.print(list.get(i));
我还想通过 运行 宁第二个 System.out.println(list.get(i));
从原始列表中少获得 2 个字符串值
首先,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()))));
}
首先:int i = 0; i <= 10; i++
生成11个字符。
第一个循环将产生 11 个字符(没有换行符)。
第二个循环将产生 9 个字符(带换行符)。
因此您在一行中看到 12 个字符(第一个循环中的 11 个字符 + 第二个循环中的一个字符),然后在下一行中看到 8 个字符
for (int i = 0; i <= 10; i++)
上面的 lop 从 0 到 10 都包括(所以它运行了 11 次)除此之外你的代码看起来不错。将 i<=10 更改为 i<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 和 8
我正在做有关列表的初学者 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
有人知道我的代码哪里出错了吗?
重复:
我希望从第一个字母开始得到 10 个字符串值,每个字母为一个字母
System.out.print(list.get(i));
我还想通过 运行 宁第二个
System.out.println(list.get(i));
从原始列表中少获得 2 个字符串值
首先,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()))));
}
首先:int i = 0; i <= 10; i++
生成11个字符。
第一个循环将产生 11 个字符(没有换行符)。
第二个循环将产生 9 个字符(带换行符)。
因此您在一行中看到 12 个字符(第一个循环中的 11 个字符 + 第二个循环中的一个字符),然后在下一行中看到 8 个字符
for (int i = 0; i <= 10; i++)
上面的 lop 从 0 到 10 都包括(所以它运行了 11 次)除此之外你的代码看起来不错。将 i<=10 更改为 i<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 和 8