Java Scanner 需要多个条目

标签 java java.util.scanner

以下是我用 Java 编写的一些代码,用于在游戏中设置玩家。我为 atk、def 和 hp 设置的扫描仪需要 2-3 个条目。对于凌乱的代码,我深表歉意,我刚刚开始学习 Java。

String NAME;
int ATK;
int DEF;
int HP;
int remainingPoints = 10;
// pick name
System.out.println("Enter name:");
Scanner p2Name = new Scanner(System.in);
NAME = p2Name.nextLine();
// pick type
System.out.println("Choose element theme: (water,fire,ice)");
Scanner p2Type = new Scanner(System.in);
String TYPE = p2Type.nextLine();
// atk
System.out.println("You have ten points to disperse " + "among your atk, def and hp");
System.out.println("Enter atk:");
Scanner p2Atk = new Scanner(System.in);
if (p2Atk.nextInt() <= 10) {
    ATK = p2Atk.nextInt();
    remainingPoints = remainingPoints - ATK;
} else {
    System.out.println("Your entry was invalid, your " + "atk is now five by default.");
    ATK = 5;
    remainingPoints = remainingPoints - ATK;
}
// def
System.out.println("You now have " + remainingPoints + ". Please enter def:");
Scanner p2Def = new Scanner(System.in);
if (p2Def.nextInt() <= remainingPoints) {
    remainingPoints = remainingPoints - p2Def.nextInt();
    DEF = p2Def.nextInt();
} else {
    System.out.println("Your entry was invalid, your " + "def is now one by default.");
    DEF = 1;
    remainingPoints = remainingPoints - DEF;
}
// hp
System.out.println("You now have " + remainingPoints + ". Please enter hp:");
Scanner p2Hp = new Scanner(System.in);
if (p2Hp.nextInt() <= remainingPoints) {
    remainingPoints = remainingPoints - p2Hp.nextInt();
    HP = p2Hp.nextInt();
} else {
    System.out.println("Your entry was invalid, your " + "hp is now one by default.");
    HP = 1;
    remainingPoints = remainingPoints - HP;
}
Player p2 = new Player(NAME, TYPE, ATK, DEF, HP);
System.out.println(p2.n);
System.out.println(p2.type);
System.out.println(p2.atk);
System.out.println(p2.def);
System.out.println(p2.hp); 

最佳答案

每次提示输入时,无需创建新的 Scanner 对象。

提示输入的数据类型,无论是intdouble还是String,您只需要创建Scanner对象即可一次 - 即:对于system.in

但是Java初学者在使用scn.nextInt()时可能会遇到问题。 您可以在提示后放置 scn.nextLine() 来解决该问题。

但我个人更喜欢使用 scn.nextLine()String 形式接收每个输入。如果是 int 输入,只需执行以下操作:

int num = Integer.parseInt(scn.nextLine());

示例:

Scanner scn = new Scanner(System.in);

String name = scn.nextLine();
String type = scn.nextLine();
String spell = scn.nextLine();
int health = Integer.parseInt(scn.nextLine());

关于Java Scanner 需要多个条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31037461/

相关文章:

java - 在线程本地设置 setter getter 类

java - 扫描仪定界符无法按预期使用输入文件 (Java)

java - 将多个输入读取到数组中的一个位置

java - 如何用正则表达式替换最后一个字符为特殊字符的单词

java - 扫描仪类输入不以分隔符结尾

Java 扫描器在处理中不起作用

java - 尝试使用java中的扫描仪读取回车键的敲击作为输入?

java - SinglyLinkedList 中头之后的下一个节点出现 NullPointerException

java - 如何使用kafka解决请求-响应机制?

java - 当 Maven war 插件找不到 webResource 目录时,如何避免构建失败?