gpt4 book ai didi

java - 在 Java 中使用 Scanner 和多种方法的正确方法?

转载 作者:太空宇宙 更新时间:2023-11-04 09:03:55 25 4
gpt4 key购买 nike

我有一个带有 main 的控制台应用程序方法以及我从 main 调用的一些方法。在那里,我想询问用户一些输入,为此我使用 Scanner类。

这是我的问题:

我发现没有办法使用Scanner从外部读取输入时main没有随机异常或意外行为。我尝试了两种方法:

  1. 拥有Scanner包含 main 的类中的全局变量。然后我用同样的Scanner在同一类的所有函数中。
  2. 在每个需要输入的函数中,我声明一个新的 Scanner变量,使用它,然后 close在退出函数之前执行此操作。

1.使Scanner尝试读两遍。我的意思是,我有一个 sc.readLine在一个函数中,当我退出该函数时,我有另一个 sc.readLinemain 。我输入一次和两次readLine行被执行,第二行读取空 String .

2.抛出Exception (基类异常)当我调用任何 sc.readLine 时在程序执行期间第二次。

我还注意到除了 readLine 之外的任何其他方法将读取同一行上的各个项目。例如,行 "10 20 30 40"将执行 4 sc.nextInt来电。

TL;DR:你如何使用Scanner在控制台应用程序中?

最佳答案

一种方法:

import java.util.Scanner;

public class Main {
private Scanner scanner = new Scanner(System.in);

public Scanner getScanner() {
return scanner;
}

void fun1() {
Scanner in = getScanner();
System.out.print("Enter a string: ");
System.out.println("You entered: " + in.nextLine());
}

void fun2() {
Scanner in = getScanner();
System.out.print("Enter an integer: ");
int n = 0;
try {
n = Integer.parseInt(in.nextLine());
} catch (NumberFormatException e) {
e.printStackTrace();
}
System.out.println(n + " + 10 = " + (n + 10));
}

public static void main(String[] args) {
Main m = new Main();
m.fun1();
m.fun2();
}
}

示例运行:

Enter a string: Hello world!
You entered: Hello world!
Enter an integer: 25
25 + 10 = 35

另一种方式:

import java.util.Scanner;

public class Main {
static void fun1(Scanner in) {
System.out.print("Enter a string: ");
System.out.println("You entered: " + in.nextLine());
}

static void fun2(Scanner in) {
System.out.print("Enter an integer: ");
int n = 0;
try {
n = Integer.parseInt(in.nextLine());
} catch (NumberFormatException e) {
e.printStackTrace();
}
System.out.println(n + " + 10 = " + (n + 10));
}

public static void main(String[] args) {
Scanner in = new Scanner(System.in);
fun1(in);
fun2(in);
}
}

示例运行:

Enter a string: Hello world!
You entered: Hello world!
Enter an integer: 25
25 + 10 = 35

关于 next()nextInt() 的问题:下面给出的是一次性多个输入的推荐方法。

import java.util.Arrays;
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
boolean valid = true;
System.out.print("Enter some intgers: ");
String strNum = in.nextLine();
String[] strNumArr = strNum.split("\\s+");
int[] numArr = new int[strNumArr.length];
for (int i = 0; i < strNumArr.length; i++) {
try {
numArr[i] = Integer.parseInt(strNumArr[i]);
} catch (NumberFormatException e) {
numArr[i] = Integer.MIN_VALUE;
valid = false;
}
}
System.out.println(Arrays.toString(numArr));
if (!valid) {
System.out.println("Note: invalid inputs have been reset to " + Integer.MIN_VALUE);
}
}
}

示例运行:

Enter some intgers: 10 5 20 15
[10, 5, 20, 15]

另一个示例运行:

Enter some intgers: 4     40 a    20   b   15
[4, 40, -2147483648, 20, -2147483648, 15]
Note: invalid inputs have been reset to -2147483648

检查Scanner is skipping nextLine() after using next() or nextFoo()?有关使用 Scanner 进行控制台输入的更多信息。

关于java - 在 Java 中使用 Scanner 和多种方法的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60454346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com