我必须编写一个代码,提示用户输入数字,并且应该从数字倒数到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();
}
}
}
答案 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();
}
}
}