2015-09-27 2 views
1

Donc, dans ce jeu de dés, les entrées de l'utilisateur doivent suivre le format de xdy, où "x" est le nombre de dés et "y" est le nombre de côtés du dé. Si l'entrée ne suit pas le format, le programme devrait demander à l'utilisateur de mettre une autre entrée.Dice Rolling Game

public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    Scanner user_input = new Scanner(System.in); 

    String input; 
    System.out.println("Please enter the number and type of dice to roll in the format <number>d<sides>."); 
    input = user_input.nextLine(); 

    while() 
      { 
      System.out.println("Input is not valid. Please enter a new input"); 
      input = user_input.nextLine(); 
      } 

    Random randomGenerator = new Random(); 
    int randomInt = randomGenerator.nextInt(5); 

Ma question est, comment puis-je faire la vérification de la boucle while pour un caractère entre deux entiers?

Répondre

1

Une façon élégante de le faire serait un Pattern:

Pattern p = Pattern.compile("\\d+d\\d+"); 
input = user_input.nextLine(); 

while (!p.matcher(input).matches) { 
    System.out.println("Input is not valid. Please enter a new input"); 
    input = user_input.nextLine(); 
} 
+0

Que faire si plus de 9 dés, et/ou une matrice avec plus de 9 côtés est souhaitée? "\\ d + d \\ d +" ne serait-il pas une meilleure expression régulière à cette fin? Aussi, pourquoi ne pas utiliser le 'Pattern' pour capturer le nombre de dés et le nombre de côtés du dé? – Bobulous

+0

@Bobulous bon point, merci! Edité et amélioré selon votre suggestion. – Mureinik

0

numberOfSides séparé et un numéro OfDice en deux variables, puis faire ce que vous voulez avec eux.

String input="6d3"; 
int numSides=Integer.parseInt(input.split("d")[0]); 
int numDice=Integer.parseInt(input.split("d")[1]);