2015-09-27 2 views
1

Итак, в этой игре для игры в кости, то, что пользователь вводит, должен соответствовать формату xdy, где «x» - это количество кубиков, а «y» - количество сторон кости. Если вход не соответствует формату, программа должна попросить пользователя ввести другой ввод.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); 

Мой вопрос, как я могу сделать проверку на while контура для символа между двумя целыми числами?

ответ

1

Один элегантный способ сделать это было бы с 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

Что делать, если требуется более 9 кубиков и/или матрица с более чем 9 сторонами? Разве '' \\ d + d \\ d + 'не было бы лучшим регулярным выражением для этой цели? Кроме того, почему бы не использовать «Pattern» для захвата числа кубиков и количества сторон матрицы? – Bobulous

+0

@Bobulous хороший момент, спасибо! Отредактировано и улучшено согласно вашему предложению. – Mureinik

0

Отдельные numberOfSides и номер OfDice в две переменные, а затем делать все, что вы хотите с ними.

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