此行不起作用:input=scan.nextLine();
你应该为程序提供while循环的输入,但它完全忽略了这一行。我不知道这个问题,我只是一个初学者。你能帮忙吗?
import java.util.*;
public class Fantasy2
{
public static void main ( String[] args )
{
String name;
String input="y";
int strength;
int health;
int luck;
int stats;
Scanner scan = new Scanner(System.in);
System.out.println("Welcome!");
System.out.println("Please enter the name of your character:");
name=scan.nextLine();
while(input.equals("y"))
{
System.out.println("Strength (1-10):");
strength=scan.nextInt();
System.out.println("Health (1-10):");
health=scan.nextInt();
System.out.println("Luck (1-10):");
luck=scan.nextInt();
stats=strength+health+luck;
if(stats>15)
{
System.out.println("You gave your character too much points! Do you want to change that?");
input=scan.nextLine();
}
else
{
System.out.println(name + " has these stats now: Strength:" + strength + ", Health: " + health + ", Luck: " + luck);
input="n";
}
}
System.out.println("Congratulation! You created successful your character!");
}
}
答案 0 :(得分:0)
很抱歉,下面发布的声明对原始问题没有帮助,但是input = scan.nextLine();
行对我来说很有用,这是另一个问题。
使用Scanner
后,您必须在scan.nextLine();
后拨打另一个scan.nextInt();
以获取方法scan.nextInt();
无法获取的换行符
这样做
System.out.println("Strength (1-10):");
strength=scan.nextInt();
System.out.println("Health (1-10):");
health=scan.nextInt();
System.out.println("Luck (1-10):");
luck=scan.nextInt();
stats=strength+health+luck;
scan.nextLine(); <--------- added code
答案 1 :(得分:0)
您必须使用nextInt
不消耗的额外新行。您可以选择在最后一次调用newLine
后调用另一个nextInt
或更好,通过nextLine
读取整数输入并解析它:
private int readInteger()
{
int option = 0;
try
{
option = Integer.parseInt(input.nextLine());
}
catch (NumberFormatException e)
{
e.printStackTrace();
}
return option;
}
...
System.out.println("Strength (1-10):");
strength = readInteger();
System.out.println("Health (1-10):");
health = readInteger();
System.out.println("Luck (1-10):");
luck = readInteger();
答案 2 :(得分:0)
尝试使用此代码而不是while循环:
boolean flag=true;
while(flag)
{
System.out.println("Strength (1-10):");
int strength=Integer.parseInt(scan.nextLine());
System.out.println("Health (1-10):");
int health=Integer.parseInt(scan.nextLine());
System.out.println("Luck (1-10):");
int luck=Integer.parseInt(scan.nextLine());
int stats=strength+health+luck;
if(stats>15)
{
System.out.println("You gave your character too much points! Do you want to change that?");
input=scan.nextLine();
}
else
{
System.out.println("has these stats now: Strength:" + strength + ", Health: " + health + ", Luck: " + luck);
input="n";
}
if(input.equals("n"))
flag = false;
}
System.out.println("Congratulation! You created successful your character!");
我不知道这是否是一种更好的方法,但尝试一下。 希望这会有所帮助。
答案 3 :(得分:0)
使用扫描仪
Scanner scan = new Scanner(System.in);
和方法(详见API)
next()
- 读取下一个字符,直到它找到空格(或使用的分隔符。默认为空格)并返回String。
nextInt()
- 读取下一个字符,直到它找到空格(或默认空格使用的分隔符)并将其转换为int并返回。
注意**如果您输入&#39; xyz&#39;你将获得例外,你的程序将终止。
如果您根据自己的计划给出答案(Strength (1-10):)
5 7,那么它将显示5为强度,7为健康。并会要求运气。
nextLine()
将读取所有字符,直到找到行尾(当您输入键盘时)。
这是避免问题的理想实现。
您可以使用nextLine并转换为int,如果不是说错误并要求输入正确的值。
System.out.println("Strength (1-10):");
String str=scan.nextLine();
while (!isNumeric(str)){
System.out.println("Enter Valid Number Strength (1-10):");
str=scan.nextLine();
}
strength = Integer.parseInt(str);
public static boolean isNumeric(String str)
{
return str.matches("-?\\d+(\\.\\d+)?"); //match a number with optional '-' and decimal.
}
例如,当您致电luck=scan.nextInt();
时,用户输入6并输入密钥。 6将按nextInt()
捕获,回车键将按input=scan.nextLine();
捕获。
因此,为了获得下一个输入,您必须再次询问scan.nextLIne()
luck=scan.nextInt();
scan.nextLIne();