关于 Java 函数调用



当我运行此代码时,有人可以向我解释一下,直到我输入第一个键盘输入才得到 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();
}
}

在执行main方法之前初始化test1类的static变量。初始化类时会发生这种情况。

因此,

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

此行

static int k = scan.nextInt();

在类初始化期间运行。它阻塞并等待整数的输入。

此代码在main之前运行,因为它是static初始化。在调用类的第一个方法之前,它必须完成。此时k具有您输入的第一个值。之后,main调用setK,提示另一个输入。

您可以通过从k声明中删除初始化(即= scan.nextInt();部分)来解决此问题。

也许您期望的行为如下:

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命名约定。

最新更新