Java扫描程序输入if语句

时间:2014-04-10 18:06:59

标签: java if-statement java.util.scanner

此行不起作用: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!");
  }
}

4 个答案:

答案 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();