Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从控制台将字符串列表添加到arraylist中,程序应在按ctrl+z时打印字符串的相反方向_Java - Fatal编程技术网

Java 如何从控制台将字符串列表添加到arraylist中,程序应在按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

我试图从控制台添加字符串列表,按ctrl+z组合键时,控制台应停止接收输入并按相反顺序打印字符串

我有代码把它们打印回来我想知道循环是怎么写的

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);
}