【问题标题】:Java integer listJava 整数列表
【发布时间】:2011-07-19 07:22:50
【问题描述】:

我正在尝试让 java 通过一个数字列表。 它选择第一个,将其作为输出,等待/睡眠 2000 毫秒,然后将下一个作为输出,等待 2000 毫秒,等等。

它们不应该排在后面,所以当我的列表是: 10 20 30 40 50

它不应该作为输出:10 20 30 40 50。 但只有 50 个。

如果能重演就更好了。

到目前为止我尝试过:

List<Integer> myCoords = new ArrayList<Integer>();
myCoords.add(10);
myCoords.add(20);
myCoords.add(30);
myCoords.add(40);
myCoords.add(50);
Iterator<Integer> myListIterator = someList.iterator(); 
while (myListIterator.hasNext()) {
    Integer coord = myListIterator.next();     
}

但这没有计时器,我不确定这是否只会显示“20”或“10 20 30 40 50”作为输出。 而且我真的不知道如何在这个 :s 中放置睡眠/等待命令和重复命令(如果重复命令已经存在,可能会忽略它)

编辑 Tyvm all,我现在可以继续编写其余的代码了 :)

【问题讨论】:

  • 这个程序没有任何输出。
  • 另外,你自相矛盾。先说It chooses the first one, gives this as output, ... and then give the next one as output,然后再说It should not give as output: 10 20 30 40 50. But just 50.
  • @Brian Roach 他的意思是它倒带并重写该行。 (\r)
  • @mathepic - 令人印象深刻,如果没有你指出,我无法从问题中提取出来。

标签: java


【解决方案1】:

要插入睡眠命令,您可以使用 Thread.sleep(2000)。所以代码是:

List<Integer> myCoords = new ArrayList<Integer>();
myCoords.add(10);
myCoords.add(20);
myCoords.add(30);
myCoords.add(40);
myCoords.add(50);
Iterator<Integer> myListIterator = someList.iterator(); 
while (myListIterator.hasNext()) {
    Integer coord = myListIterator.next();    
    System.out.println(coord);
    Thread.Sleep(2000);
}

这将输出: 10 20 30 40 50

如果你想要一个接一个的数字,你可以使用: System.out.print(coord +" " );如果你想重复这部分,你可以把它放在另一个while循环中。

List<Integer> myCoords = new ArrayList<Integer>();
myCoords.add(10);
myCoords.add(20);
myCoords.add(30);
myCoords.add(40);
myCoords.add(50);
while(true)
    Iterator<Integer> myListIterator = someList.iterator(); 
    while (myListIterator.hasNext()) {
        Integer coord = myListIterator.next();    
        System.out.print(coord + " ");
        Thread.Sleep(2000);
    }
}

这将输出:10 20 30 40 50 10 20 30 40 50 ... 并且在您终止程序之前永远不会停止。

编辑:您必须将 sleep 命令放在 try catch 块中

【讨论】:

  • 那么我在那段代码中进行了哪些更改以使其只是重写以前的数字? System.out.print(coord + " "); ?和“尝试捕捉块”?以你刚刚写的方式,那个字符串对我来说看起来不错:P
  • 啊,比如:try{ Thread.sleep(2000); }catch(Exception e){ // 处理异常... };而不是 Thread.Sleep(2000);
  • 关于重写,或者你的意思是它正在重写之前的输出?
  • 'try and catch block' 在这里是相关的,因为方法 sleep 可能会抛出异常。您可以在这里了解更多信息:download.oracle.com/javase/tutorial/essential/exceptions
  • 啊,所以它会变成:(请参阅我在这个问题中的第二篇文章)
【解决方案2】:

有效的代码,但输出是:

10
20
30
40
50

所以:

    List<Integer> myCoords = new ArrayList<Integer>();
    myCoords.add(10);
    myCoords.add(20);
    myCoords.add(30);
    myCoords.add(40);
    myCoords.add(50);
    for (Integer number : myCoords) {
        System.out.println(number);
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

【讨论】:

    【解决方案3】:

    如果你想在控制台重写一行,打印一个控制字符\r(回车)。

    List<Integer> myCoords = new ArrayList<Integer>();
    myCoords.add(10);
    myCoords.add(20);
    myCoords.add(30);
    myCoords.add(40);
    myCoords.add(50);
    Iterator<Integer> myListIterator = myCoords.iterator(); 
    while (myListIterator.hasNext()) {
        Integer coord = myListIterator.next();     
        System.out.print("\r");
        System.out.print(coord);
        Thread.sleep(2000);
    }
    

    【讨论】:

    【解决方案4】:

    所以它会变成:

    List<Integer> myCoords = new ArrayList<Integer>();
    myCoords.add(10);
    myCoords.add(20);
    myCoords.add(30);
    myCoords.add(40);
    myCoords.add(50);
    while(true)
        Iterator<Integer> myListIterator = myCoords.iterator(); 
        while (myListIterator.hasNext()) {
            Integer coord = myListIterator.next();    
            System.out.print("\r" + coord);
            try{
        Thread.sleep(2000);
      }catch(Exception e){
       // handle the exception...
      }
        }
    }
    

    【讨论】:

    • 删除以前的结果:System.out.print("\r" + coord);
    • :哦,嗯..我还能如何让它重写你认为的先前结果?
    • with System.out.print(coord + " ");而不是 System.out.print("\r" + coord);也许?
    • 而不是someList.,而是你的列表 - 意思是 -> ` Iterator myListIterator = myCoords.iterator(); `
    • 您使用的是什么操作系统,您在哪里打印? "\r" 适用于 Linux/Mac 终端(已测试),应该适用于 Windows 控制台。但是,如果您在某些 IDE(NetBeans、Eclipse)中查看输出,那么它可能无法正常工作。
    【解决方案5】:

    让我们使用一些 java 8 特性:

    IntStream.iterate(10, x -> x + 10).limit(5)
      .forEach(System.out::println);
    

    如果您需要存储数字,您可以将它们收集到一个集合中,例如:

    List numbers = IntStream.iterate(10, x -> x + 10).limit(5)
      .boxed()
      .collect(Collectors.toList());
    

    并添加了一些延迟:

    IntStream.iterate(10, x -> x + 10).limit(5)
      .forEach(x -> {
        System.out.println(x);
        try {
          Thread.sleep(2000);
        } catch (InterruptedException e) {
          // Do something with the exception
        }  
      });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-23
      • 1970-01-01
      • 1970-01-01
      • 2012-03-21
      • 2017-06-02
      • 2012-04-09
      • 1970-01-01
      相关资源
      最近更新 更多