编写一个提示输入数字并从该数字倒数的Java程序

时间:2018-09-22 21:16:57

标签: java

我必须编写一个代码,提示用户输入数字,并且应该从数字倒数到0。我得到了这样的代码: 有三个必需的函数,main(),doCountDown()和 等一下()。 (可选)第四个功能将执行用户 相互作用。 到目前为止,这就是我所拥有的。没有错误,代码将运行。但是,倒数并不止于0,而是连续倒数为负数。我不确定从这里去哪里。

import java.util.Date;
import java.util.Scanner;

public class Code {

    public static void main(String[] args) {
        System.out.println("Count down how many seconds? ");
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        sc.close();
        doCountDown(num);
    }
    public static void doCountDown(int num){
        for(int i=num;i<=num;i--){
            System.out.println(i);
            waitASec();
        }
    }
    private static void waitASec() {
        long t = new Date().getTime();
        long t1=t+1000;
        for(;t<t1;) {
            t = new Date().getTime();
        }
    }

}

4 个答案:

答案 0 :(得分:2)

您的doCountDown方法应该检查条件递减直到for-loop中的0。即i>=0

public static void doCountDown(int num){
    for(int i=num;i>=0;i--){
        System.out.println(i);
        waitASec();
    }
}

答案 1 :(得分:0)

看一下for循环的中间部分,i <= num。这是确定循环何时终止的部分。这就是说,只要i小于或等于num,循环就会继续。我开始等于num,在每个循环结束时,我将i减1(i--)。所以我将永远小于num,因此您的循环将永远继续。

尝试改用for(int i = num; i> = 0; i-)。

答案 2 :(得分:0)

当然倒数永远不会结束。因为i <= num始终为true。以此更改您的逻辑;

public static void doCountDown(int num){
    for(int i=num;i>= 0;i--){
        System.out.println(i);
        waitASec();
    }
}

答案 3 :(得分:0)

您在for循环条件中遇到一个小错误,这是错误的根源,我对代码进行了一些修改

import java.util.Scanner;

public class Code {

public static void main(String[] args) {
    System.out.println("Count down how many seconds? ");
    Scanner sc = new Scanner(System.in);
    int num = sc.nextInt();
    //sc.close();
    doCountDown(num);
    sc.close();//move here otherwise you might get null pointer exception
}
public static void doCountDown(int num){
    for(int i=num;i>=0;i--){//It should count down to zero (replaced num with 0)
        System.out.println(i);
        waitASec();
    }
}
private static void waitASec() {
    try {
        Thread.sleep(1000);//This approach better than java.util.Date
    } catch (InterruptedException ex) {
        ex.printStackTrace();
    }
}

}