当前位置: 首页 > 知识库问答 >
问题:

Scanner.NextLine();在“由于循环而需要”之前调用

彭鸿文
2023-03-14

我有一个扫描器输入,它由我的Player类中的GetName()调用。

public static String getName()
{
  System.out.println("Enter your character's name.");
   String n = input.nextLine();
  return n;
}
System.out.println("Confirm Character (Y/N)");
confirm = input.next();

循环的工作方式是,如果选择了“n”或“n”,它将再次调用构造函数公共播放器(String cName,int cStamina,int cDefense,int Cstength,int cAgility,int Cintellict)。但是,由于这两种类型是字符串数据类型,构造函数首先调用一个名称,因此它要么将“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--;  
      }
  }
  }
}

下面的Player类

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!

如您所见,问题出现在确认字符(Y/N)之后。

共有1个答案

呼延景同
2023-03-14

嗯,我找到了解决你问题的办法,我不知道你的问题为什么会发生。不是在我们的Player类中使用static Scanner input=new Scanner(system.in);,而是在每个gets中创建一个新的Scanner*。

这里有一个建议:

public static Player createPlayerFromConsole() {
    Scanner input = new Scanner(System.in);

    System.out.println("Enter your character's name.");
    String name = input.nextLine();

    System.out.println("Enter your character's stamina.");
    int stamina = input.nextInt();

    System.out.println("Enter your character's defense.");
    int defense = input.nextInt();

    System.out.println("Enter your character's strength.");
    int strength = input.nextInt();

    System.out.println("Enter your character's agility.");
    int agility = input.nextInt();

    System.out.println("Enter your character's intellect.");
    int intellect = input.nextInt();

    return new Player(name, stamina, defense, strength, agility, intellect);
}
 类似资料:
  • 问题内容: 我的程序规格如下。1.所有四个数字都不同。2.千位数字是十位数的三倍。3.数字是奇数。4.数字的总和是27。我遗漏了整个程序的一些代码。它具有干净的编译器,但运行时会自动终止。我认为问题出在数据类型的转换中。 问题答案: 仅此一项就确保了while循环将永远不会进入,因为它是false。while循环中的任何内容都没有任何区别,因为它将永远不会执行。 你可能想写 除了此错误外,您的情况

  • 问题内容: 我创建了一个for循环,该循环循环了元素出现在容器中的次数。for循环从HTML捕获一些数据,并创建一个JSON url,然后将返回一个值。然后应将该值添加到适当位置的HTML中。 问题似乎是for循环在进行所有Ajax调用之前完成,因此仅将最后一个值添加到HTML。我以为可以确保readystate等于4,但是该解决方案不起作用。我还尝试将完整而不是成功用作Ajax事件。有什么见解吗

  • 我的程序规范如下。1.所有四位数都不同2.千位中的数字是十位中数字的三倍3.数字是奇数。4.数字之和是27。我遗漏了整个程序的一些代码。它有一个干净的编译,但当它运行时会自动终止。我认为问题出在数据类型的转换上。

  • 我正在编写一个python游戏,它有以下功能可以向用户询问。 最多可以有4名玩家(最少1名玩家,最多4名玩家) 它会问玩家的名字。如果名称已存在,程序将提示“名称已在列表中”,并要求再次输入名称 如果播放器在播放器名称输入中输入空字符串,它将退出。 它会询问玩家想要玩多少n个随机数字(使用randint(开始,停止)。最多只允许3位数字 我知道我必须使用

  • 我遇到了一个循环问题,我必须输入两次温度才能启动循环。我想我知道问题在哪里,只是不知道如何解决。我已经编写了总共三周的代码,所以我在这方面完全是个初学者。 这是我有问题的代码部分: 我想你明白我的意思了。我唯一能让循环工作的方法就是重复int.Parse(Console.ReadLine()),但也许还有另一种修复方法可以修复必须输入两次温度的问题? 真希望有人能帮我解决这个问题。

  • 编写在非方法中,这段代码有什么不同吗... 也就是说,这两者的行为是相同的吗? 第二个代码片段没有阻塞正在执行的线程(非方法调用)而第一个代码片段阻塞了线程),这是否正确?