Java 如何从控制台将字符串列表添加到arraylist中,程序应在按ctrl+z时打印字符串的相反方向
我试图从控制台添加字符串列表,按ctrl+z组合键时,控制台应停止接收输入并按相反顺序打印字符串 我有代码把它们打印回来我想知道循环是怎么写的Java 如何从控制台将字符串列表添加到arraylist中,程序应在按ctrl+z时打印字符串的相反方向,java,Java,我试图从控制台添加字符串列表,按ctrl+z组合键时,控制台应停止接收输入并按相反顺序打印字符串 我有代码把它们打印回来我想知道循环是怎么写的 public class Names { public static void main(String[] args) { ArrayList<String> list = new ArrayList<String>(); Scanner sc = new Scanner(System
public class Names {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
Scanner sc = new Scanner(System.in);
String one = sc.next();
String two = sc.next();
String three = sc.next();
String four = sc.next();
list.add(one);
list.add(two);
list.add(three);
list.add(four);
//System.out.println("size of list is :" +list.size());
for (int i = list.size()-1; i >=0; i--) {
System.out.println(list.get(i));
}
}
}
我刚刚修复了你的代码以避免异常。如果您输入了两行,扫描仪将在ArrayList中添加两行,然后for循环将在列表中循环并向后打印
假设您输入了8行,for循环将循环7、6、…0。根据您的代码,for循环将启动max-1 8-1=7,然后它将匹配条件7>0;如果条件匹配,它将打印ArrayList的值。好吧,您有一些东西是反向的 首先,CTRL+Z将使正在运行的进程置于后台,并停止在Linux上运行。你可能不想这样;我建议您停止对某些终端值进行输入,比如空字符串 其次,您希望无限期地将输入输入到列表中,而不仅仅是四个元素。您声明的四个字符串变量充其量是毫无意义的,它们会分散您对真实意图的注意力。你在这里的关键时刻是避免永远接受输入;当它们输入空字符串时停止它们。下面是一个片段/示例:
while(sc.hasNextLine()){
final String s = sc.nextLine();
if(!"".equals(s)) {
list.add(s);
} else {
break;
}
}
其他一切看起来都很好您的循环可以反向运行。我只需通过将字符串添加到第一个位置来向后添加它们,然后打印代码就大大简化了:
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
Scanner sc = new Scanner(System.in);
for(String s = sc.next(); !s.isEmpty(); s = sc.next())
list.add(0, s);
for (String s : list)
System.out.println(s);
}
哪个环路?你的代码中的那个?好奇-为什么ctrl+z?你有一个无限循环。我已经在我的机器上测试过!!这段代码只工作一次,但如果尝试重新运行它,它将不会给出输出。我必须关闭程序并重新启动它。我相信ctrl+z将终止进程,显然它将杀死正在运行的java类。从性能角度看,这是非常昂贵的。您必须对输入列表中的每个元素进行N次数据移位,而顺序插入是恒定时间。打印代码确实大大简化了,但我看不出其他语法有任何害处;这感觉就像是为了可读性而牺牲性能。@Makoto是的,当然它是为了可读性而牺牲性能的,所有好的代码都应该如此,尤其是初学者代码。早期优化更糟糕。让我们记住,您提到的缓慢插入部分将在几微秒内执行-我怀疑有人会称之为缓慢。
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
Scanner sc = new Scanner(System.in);
for(String s = sc.next(); !s.isEmpty(); s = sc.next())
list.add(0, s);
for (String s : list)
System.out.println(s);
}