【发布时间】:2016-01-22 04:08:49
【问题描述】:
我有一个扫描仪input,在我的Player 课程中由getName() 调用。
public static String getName()
{
System.out.println("Enter your character's name.");
String n = input.nextLine();
return n;
}
但是,当我使用循环来检查我的 RPG 类中的适当玩家输入时,一切正常,直到我进入
“n”或“N”代表
System.out.println("Confirm Character (Y/N)");
confirm = input.next();
循环的工作方式是,如果选择了“n”或“N”,它会再次调用构造函数public Player(String cName, int cStamina, int cDefense, int cStrength, int cAgility, int cIntellect),但是,因为这两个是字符串数据类型,并且构造函数首先调用名称,所以它要么将“n”或“N”识别为名称,或完全跳过整个名称。我该如何解决这个问题?
import java.util.*;
public class RPG
{
static Scanner input = new Scanner(System.in);
private static String confirm;
public static void main(String[] args)
{
System.out.println("*~~~~~~~~~~~~~~*\n{ ~ Pinnacle ~ }\n*~~~~~~~~~~~~~~*");
for (int s = 0; s < 1; s++)
{
Player me = new Player(Player.getName(), Player.getStam(), Player.getDef(),
Player.getStr(), Player.getAgi(), Player.getInt());
for (int i = 0; i < 1; i++)
{
System.out.println("*~~~~~~~~~~~~~~*\n"+Player.name +
"\nStamina: " + Player.stamina +
"\nDefense: " + Player.defense +
"\nStrength: " + Player.strength +
"\nAgility: " + Player.agility +
"\nIntellect: " + Player.intellect +
"\n*~~~~~~~~~~~~~~*");
System.out.println("Confirm Character (Y/N)");
confirm = input.next();
if (confirm.equals("Y") || confirm.equals("y"))
System.out.println("Character Created!");
else if (confirm.equals("N") || confirm.equals("n"))
s--;
else
i--;
}
}
}
}
下面的玩家类
import java.util.*;
public class Player extends Characters
{
static Scanner input = new Scanner(System.in);
public Player(String cName, int cStamina, int cDefense, int cStrength, int cAgility, int cIntellect)
{
name = cName;
stamina = cStamina;
defense = cDefense;
strength = cStrength;
agility = cAgility;
intellect = cIntellect;
}
public static String getName()
{
System.out.println("Enter your character's name.");
String n = input.nextLine();
return n;
}
public static int getStam()
{
System.out.println("Enter your character's stamina.");
int s = input.nextInt();
return s;
}
public static int getDef()
{
System.out.println("Enter your character's defense.");
int d = input.nextInt();
return d;
}
public static int getStr()
{
System.out.println("Enter your character's strength.");
int st = input.nextInt();
return st;
}
public static int getAgi()
{
System.out.println("Enter your character's agility.");
int a = input.nextInt();
return a;
}
public static int getInt()
{
System.out.println("Enter your character's intellect.");
int i = input.nextInt();
return i;
}
public static void flee()
{
}
}
这是一个以Sample Name 作为名字输入的示例输出:
*~~~~~~~~~~~~~~*
{ ~ Pinnacle ~ }
*~~~~~~~~~~~~~~*
Enter your character's name.
Sample Name
Enter your character's stamina.
5
Enter your character's defense.
5
Enter your character's strength.
8
Enter your character's agility.
3
Enter your character's intellect.
2
*~~~~~~~~~~~~~~*
Sample Name
Stamina: 5
Defense: 5
Strength: 8
Agility: 3
Intellect: 2
*~~~~~~~~~~~~~~*
Confirm Character (Y/N)
n
Enter your character's name.
Enter your character's stamina.
2
Enter your character's defense.
3
Enter your character's strength.
6
Enter your character's agility.
4
Enter your character's intellect.
2
*~~~~~~~~~~~~~~*
Stamina: 2
Defense: 3
Strength: 6
Agility: 4
Intellect: 2
*~~~~~~~~~~~~~~*
Confirm Character (Y/N)
y
Character Created!
如您所见,问题出现在Confirm Character (Y/N)之后。
【问题讨论】:
-
你可以使用 input.nextLine() 代替 input.next()
-
@RafaelTeles 将
confirm = input.next();更改为confirm = input.nextLine();恐怕不能解决问题。 -
你能发布你的“玩家”课程吗?
-
我对你的 getName() 方法很感兴趣。它的名字是从哪里来的?或者在第一次调用之后调用它可能出现问题?
-
这是因为 nextInt() 不会将扫描仪移动到下一行,而 nextLine() 会。按照
int stamina = Integer.parseInt(input.nextLine());输入您的整数,您的代码应该可以工作。