有人向我解释当我运行此代码时,在输入第一个键盘输入之前,我没有得到Sysout语句吗?
import java.util.Scanner;
public class test1{
static Scanner scan = new Scanner(System.in);
static int k = scan.nextInt();
public static void main(String[] args) {
setK();
System.out.println(" K is: " + k);
}
public static void setK(){
System.out.println("Please input K value");
k = scan.nextInt();
}
}
答案 0 :(得分:3)
static
类的test1
变量在执行main
方法之前初始化。初始化类时会发生这种情况。
因此
static int k = scan.nextInt();
语句在main
方法之前执行,并等待输入。输入输入后,main
开始运行并调用setK();
,打印“请输入K值”。
我不确定这是故意的,因为你的setK()
方法似乎是应该读取输入并将其分配给k的方法。因此,请将您的代码更改为:
import java.util.Scanner;
public class test1{
static Scanner scan = new Scanner(System.in);
static int k;
public static void main(String[] args) {
setK();
System.out.println(" K is: " + k);
}
public static void setK(){
System.out.println("Please input K value");
k = scan.nextInt();
}
}
答案 1 :(得分:1)
这一行
static int k = scan.nextInt();
在类初始化期间运行。它阻塞并等待输入整数。
此代码在main
之前运行,因为它是static
初始化。它必须在调用类的第一个方法之前完成。此时k
具有您输入的第一个值。之后,main
调用setK
,提示输入其他内容。
您可以通过从= scan.nextInt();
的声明中删除初始化(即k
部分)来解决此问题。
答案 2 :(得分:0)
也许你期望的行为如下:
package test;
import java.util.Scanner;
public class ScannerTest {
static Scanner scan = new Scanner(System.in);
static int k;
public static void main(String[] args) {
System.out.println("Please input K value");
k = scan.nextInt();
System.out.println(" K is: " + k);
}
}
顺便说一句,你应该坚持使用Java命名约定。