2014-11-17 7 views
-2

EDIT: У меня есть некоторые исправления в качестве ответа. Мне нужно было использовать другой цикл do-while для разных сценариев в игровом автомате. Я выяснил ответ на этот конкретный вопрос и отправил ответ всем, кто хотел бы использовать это для помощи.не выполнит цикл while while

У меня есть один цикл while, который не будет завершен. Чтобы войти в цикл do while, мне нужно ввести число. Он не запускается, если пользователь ничего не вводит - он даст ошибку несоответствия, если вы введете письмо, которое понятно, но как я могу попасть в цикл без ввода пользователем чего-либо?

Кроме того, будет ли вставлять другой цикл, решить проблему, которая не полностью работает? Я в замешательстве относительно логики, и мой псевдокод ошибочен. Спасибо.

import java.util.Scanner; 
import java.util.Random; 
import java.io.*; 

public class Slot2 
{ 
public static void main(String[] args) throws IOException 
{ 
    int number; 

    System.out.println ("Welcome to the Slot Machine Simulator!"); 
    System.out.println ("\nActions\n1. Start a new game\n2. Scores\n3. Exit"); 
    System.out.print ("\nPlease select an action: "); 

    Scanner keyboard = new Scanner(System.in); 
    int option = keyboard.nextInt(); 

    while (option != 1 && option != 2 && option != 3) 
    { 
    System.out.print ("\nThat is not an option. Please select an item number between 1-3: "); 
    option = keyboard.nextInt(); 
    break; 
    } 

    if (option == 1) 
    { 
     String username; 
     double startingTotal = 100.0; 
     double userTotal = startingTotal; 

     System.out.print ("\nBefore the game begins, please enter your name: "); 
     username = keyboard.next(); 
     System.out.print ("\nGame start! You will begin with $100.00. Enter a negative value to quit the game. Good luck, " + username + "!"); 

     do **//you have to enter a number here to get the 1st print statement,this is the error** 
     { 
      double bet = keyboard.nextDouble(); 
      bet = 0.0; 
      userTotal = startingTotal - bet; 

      System.out.print ("You currently have: $%.2f" + startingTotal + "\nHow much would you like to bet?"); **//this is the part of the loop that works** 

      double winnings = 0.0; 
      double userFinalTotal = 0.0; 

      Random generator = new Random(); 
      int slot1 = generator.nextInt(6); 

      int slot2 = generator.nextInt(6); 

      int slot3 = generator.nextInt(6); 

      String firstSlot = ""; 

      switch (slot1) 
      { 
       case 0: 
        firstSlot = "Cherries"; 
        break; 
       case 1: 
        firstSlot = "Oranges"; 
        break; 
       case 2: 
        firstSlot = "Plums"; 
        break; 
       case 3: 
        firstSlot = "Bells"; 
        break; 
       case 4: 
        firstSlot = "Melons"; 
        break; 
       case 5: 
        firstSlot = "Bars"; 
        break; 
      } 

      String secondSlot = ""; 

      switch (slot2) 
      { 
       case 0: 
        secondSlot = "Cherries"; 
        break; 
       case 1: 
        secondSlot = "Oranges"; 
        break; 
       case 2: 
        secondSlot = "Plums"; 
        break; 
       case 3: 
        secondSlot = "Bells"; 
        break; 
       case 4: 
        secondSlot = "Melons"; 
        break; 
       case 5: 
        secondSlot = "Bars"; 
        break; 
      } 

      String thirdSlot = ""; 

      switch (slot3) 
      { 
       case 0: 
        thirdSlot = "Cherries"; 
        break; 
       case 1: 
        thirdSlot = "Oranges"; 
        break; 
       case 2: 
        thirdSlot = "Plums"; 
        break; 
       case 3: 
        thirdSlot = "Bells"; 
        break; 
       case 4: 
        thirdSlot = "Melons"; 
        break; 
       case 5: 
        thirdSlot = "Bars"; 
        break; 
      } 

      System.out.println ("-------------------------------"); 
      System.out.println ("" + firstSlot + " " + secondSlot + " " + thirdSlot); 
      System.out.print ("-------------------------------"); 

      if (slot1 == slot2 && slot1 == slot3) 
      { 
       winnings = bet * 3; 
       userFinalTotal = userTotal + winnings; 
       System.out.printf ("\nNumber of matches: 3. You win: $%.2f", winnings); 
       System.out.printf ("\nYou currently have: $%.2f", userFinalTotal); 
      } 
      else if ((slot1 == slot2 && slot2 != slot3) || (slot1 == slot3 && slot1 != slot2) || (slot2 == slot3 && slot3 != slot1)) 
      { 
       winnings = bet * 2; 
       userFinalTotal = userTotal + winnings; 
       System.out.printf ("\nNumber of matches: 2. You win: $%.2f", winnings); 
       System.out.printf ("\nYou currently have: $%.2fn", userFinalTotal); 
      } 
      else 
      { 
       System.out.printf ("\nNumber of matches: 0. You win: $%.2f", winnings); 
       System.out.printf ("\nYou currently have: $%.2f", userFinalTotal); 
      }  

     if ((bet < 0) || (userFinalTotal <= 0)) 
     { 
      break; 
     } 

     while (bet > userFinalTotal) 
     { 
      System.out.print("\nYour bet is greater than your current total. Please enter a valid amount: "); 
      bet = keyboard.nextDouble(); 
     } 
     } while (userTotal > 0); 
    } 
} 

}

+1

Вы должны быть понятнее о чем ваш спрашивать, потому что ваш вопрос, кажется, не имеет особого смысла. Помимо несоответствующего «разрыва» в вашем первом цикле (к которому вы, кстати, обращаетесь, кстати?), Пользовательская часть ввода, похоже, правильно делает то, что вы описываете, с первого взгляда. Я не могу поставить «У меня есть цикл, который не заканчивается» и «Как мне попасть в цикл без ввода пользователем чего-либо?» (между прочим) вместе в один согласованный вопрос. –

+0

@Jason C Я думал, заявив, что у меня возникла проблема с циклом do while, а затем комментируя точный цикл while, где произошла ошибка, я был ясен, но извините за путаницу. Я исправлю несоответствующий оператор break в первом цикле; однако, моя реальная проблема, как указано в вопросе, - это цикл while. Он проходит только часть отмеченного комментария (только печатает первый оператор, также отмеченный). – mrkrebs

+0

@JasonC Чтобы изложить вопрос о вводе номера, программа будет работать до тех пор, пока не дойдет до времени. Затем, если я введу число (скажем, 1), оно будет работать только до первого оператора печати в цикле (также отмеченного комментарием). Если бы вы могли объяснить логику в такой ошибке, как это, я бы очень ее оценил - я не хочу повторять такую ​​ошибку снова. – mrkrebs

ответ

-1
Int counter = 0, input = 0; 
While(counter < 10 && input = 0) 
{ 
Thread.sleep(1000); 
Counter++; 
input = Scan.nextInt() 
} 

Не самый большой код, который я сделал это с моего телефона так

+0

Привет, спасибо, что ответили на это. Вы можете объяснить свой ответ? Куда это пойдет и почему я буду использовать его, чтобы исправить это? Я новичок в Java, и я просто посмотрел Thread.sleep и он был использован, чтобы приостановить выполнение в течение короткого периода времени? Извините, я раньше этого не делал[email protected] – mrkrebs

0

Попробуйте изменить username = keyboard.next(); к username = keyboard.nextLine();, я уверен, что он будет работать.

Нет ничего плохого в Вашей петле do-while.


Кроме того, вы не должны объявлять эти переменные внутри цикла while.

String username; 
double startingTotal = 100.0; 
double userTotal = startingTotal; 
+0

Хорошо, спасибо, я думаю, что это, возможно, решило проблему do-while, мне просто нужно исправить другие ошибки, которые исходили от него! – mrkrebs

+0

Я пробовал ваши коды, другие ошибки в основном вызваны объявлением переменных в цикле. Вы можете принять мой ответ, нажав галочку рядом с моим ответом. – user3437460

0

У меня есть PrintWriter заявление в цикле Do-While, чтобы распечатать баллы каждого пользователя, который играет игровой автомат. Тем не менее, я думаю, что из-за этой оценки несколько раз печатаются, когда говорят, чтобы просмотреть оценки (вариант 2). Это из-за используемой переменной или того факта, что она находится в цикле do-while?
импорт java.util.Scanner; import java.util.Random; импорт java.io. *;

public class Slot3 
{ 
public static void main(String[] args) throws IOException 
{ 
    System.out.println ("Welcome to the Slot Machine Simulator!"); 

    int option = 0; 

    //if the user selects a 1 or 2 (does not want to exit) then this loop will run 
    do 
    { 
     System.out.println ("\nActions\n1. Start a new game\n2. Scores\n3. Exit"); 
     System.out.print ("\nPlease select an action: "); 

     Scanner keyboard = new Scanner(System.in); 
     option = keyboard.nextInt(); 
     keyboard.nextLine(); 

     while (option != 1 && option != 2 && option != 3) 
     { 
      System.out.print ("\nThat is not an option. Please select an item number between 1-3: "); 
      option = keyboard.nextInt(); 
      keyboard.nextLine(); 
     } 

     //this will occur if the user selects 1 to play the game 
     if (option == 1) 
     { 
      double money = 100.00; 
      double bet = 0.00; 
      double winnings = 0.00; 
      double score = 0.00; 
      int count = 0; 

      System.out.print ("\nBefore the game begins, please enter your name: "); 
      String username = keyboard.nextLine(); 

      System.out.print ("\nGame start! You will begin with $100.00. Enter a negative value to quit the game. Good luck, " + username + "!"); 

      System.out.printf("\nYou currently have $%.2f.", 100.00); 

      do 
      { 
       System.out.printf("\n\nHow much would you like to bet? "); 
       bet = keyboard.nextDouble(); 

       if ((bet < 0) || (money <= 0)) 
       { 
        break; 
       } 

       while (bet > money) 
       { 
        System.out.print("\nYour bet is greater than your current total. Please enter a valid amount: "); 
        bet = keyboard.nextDouble(); 
       } 

       //create random numbers 
       Random generator = new Random(); 
       int slot1 = generator.nextInt(6); 

       int slot2 = generator.nextInt(6); 

       int slot3 = generator.nextInt(6); 

       String firstSlot = ""; 

       switch (slot1) 
       { 
        case 0: 
         firstSlot = "Cherries"; 
         break; 
        case 1: 
         firstSlot = "Oranges"; 
         break; 
        case 2: 
         firstSlot = "Plums"; 
         break; 
        case 3: 
         firstSlot = "Bells"; 
         break; 
        case 4: 
         firstSlot = "Melons"; 
         break; 
        case 5: 
         firstSlot = "Bars"; 
         break; 
       } 

       String secondSlot = ""; 

       switch (slot2) 
       { 
        case 0: 
         secondSlot = "Cherries"; 
         break; 
        case 1: 
         secondSlot = "Oranges"; 
         break; 
        case 2: 
         secondSlot = "Plums"; 
         break; 
        case 3: 
         secondSlot = "Bells"; 
         break; 
        case 4: 
         secondSlot = "Melons"; 
         break; 
        case 5: 
         secondSlot = "Bars"; 
         break; 
       } 

       String thirdSlot = ""; 

       switch (slot3) 
       { 
        case 0: 
         thirdSlot = "Cherries"; 
         break; 
        case 1: 
         thirdSlot = "Oranges"; 
         break; 
        case 2: 
         thirdSlot = "Plums"; 
         break; 
        case 3: 
         thirdSlot = "Bells"; 
         break; 
        case 4: 
         thirdSlot = "Melons"; 
         break; 
        case 5: 
         thirdSlot = "Bars"; 
         break; 
       } 

       System.out.println ("\n-------------------------------"); 
       System.out.printf ("%-12s%-10s%5s\n", firstSlot , secondSlot , thirdSlot); 
       System.out.print ("\n-------------------------------"); 

       //check how many of the slots match to calculate the winnings 
       if (slot1 == slot2 && slot1 == slot3) 
       { 
        winnings = bet * 3; 
        money -= bet; 
        score = money + winnings; 
        System.out.printf ("\nNumber of matches: 3. You win: $%.2f", winnings); 
        System.out.printf("\nYou currently have: $%.2f", score); 
       } 
       else if ((slot1 == slot2 && slot2 != slot3) || (slot1 == slot3 && slot1 != slot2) || (slot2 == slot3 && slot3 != slot1)) 
       { 
        winnings = bet * 2; 
        money -= bet; 
        score = money + winnings; 
        System.out.printf ("\nNumber of matches: 2. You win: $%.2f", winnings); 
        System.out.printf("\nYou currently have: $%.2f", score); 
       } 
       else 
       { 
        winnings = bet * 0; 
        money -= bet; 
        score = money + winnings; 
        System.out.printf ("\nNumber of matches: 0. You win: $%.2f", winnings); 
        System.out.printf("\nYou currently have: $%.2f", score); 
       }  
      } while ((bet > 0) && (money > 0)); 

      FileWriter fwriter = new FileWriter("scores.txt", true); 
      PrintWriter outputWriter = new PrintWriter(fwriter); 
      outputWriter.printf("\n\n%1s%15s" , "Name" , "Score"); 
      outputWriter.printf ("\n\n%1s%15s" , "----" , "-----"); 
      outputWriter.printf ("\n\n%1s%15s" , username , score); 
      outputWriter.close(); 

      System.out.println("\n\nGame over! Your score has been written to scores.txt, " + username + "!"); 

     } //end of actions for select option 1 

     //option 2 user wants to read their scores 
     if (option == 2) 
     { 
      File myFile = new File("scores.txt"); 

      //if there are no scores to read 
      if (!myFile.exists()) 
      { 
       System.out.println("There are no scores to display at this time."); 
       continue; 
      } 

      File file = new File("scores.txt"); 

      Scanner inputFile = new Scanner(file); 

      while (inputFile.hasNext()) 
      { 
       String username = inputFile.nextLine(); 

       System.out.println(username); 
      } 
      inputFile.close(); 
     } //close option 2 
    } while (option != 3); //close 1st do-while loop 

    if (option == 3) 
    { 
     System.out.print ("\nGoodbye!"); 
     System.exit(0); 
    } 
} 

}

Смежные вопросы