2016-01-22 21 views
1

我有一個掃描儀input這是getName()在我的Player類中調用。Scanner.nextLine();由於循環之前調用之前

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),但是,因爲這兩個是String數據類型,並且構造函數首先調用名稱,它會識別「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)後出現的問題。

+0

你可以使用input.nextLine()而不是input.next() –

+0

@RafaelTeles改變'確認= input.next();''來確認=輸入。 nextLine();'不能解決問題,我害怕。 – Zerukai

+0

你可以發佈你的「玩家」類嗎? –

回答

1

那麼,我發現了一個解決方案,你不知道爲什麼你的問題正在發生。在我們的Player類中不使用static Scanner input = new Scanner(System.in);,而是在每個gets *中創建一個新的掃描器。

這裏有一個建議:

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); 
} 
+0

啊,這似乎工作,非常感謝你。 – Zerukai

+0

我很好奇,所以我看了爲什麼發生這個問題,並找到2個職位,部分解釋了這個問題。 –

+0

http://stackoverflow.com/questions/8441444/java-nextline-skipped-in-runtime-while-working-previously –

相關問題