2014-11-17 1 views
1

Для этого кода я хочу имитировать игровой автомат и поместить имя пользователя и десятки игр в текстовый файл под названием scores.txt, чтобы, если пользователь выбирает вариант 2, они могут просматривать их результаты.правильный способ добавления данных в файл в Java

Однако, я получаю много ошибки на моем FileWriter заявлении (линия к концу и промаркирована с комментарием), Particulary тот, который я не понимаю под названием unmappable характера для кодирования CP1252. Из всего, что я проверил, я вижу эту ошибку, когда кто-то использует другой символ, как японский персонаж, - так почему же возникает такая ошибка? Я посмотрел примеры кода, но я еще не научился потоку, попробовал и поймал, или буфера.

Использование FileWriter и PrintWriter может кто-нибудь объяснить мне, как создать объект FileWriter и передать его в объект PrintWriter правильно, а также как правильно считывать данные из этого файла (scores.txt). Большое спасибо заранее, и извините, если это простая ошибка.

Удельные задач:

File file = new File(“scores.txt”); //illegal start of expression 

    if (!file.exists()) 
    { 
     file.createNewFile(); 
    } 

    Scanner inputFile = new Scanner(file); 
    String line = inputReader.nextLine(); 
    FileWriter fwriter = new FileWriter(“scores.txt”, true); //this is where the error CP1252, 
    PrintWriter outputWriter = new PrintWriter(file); 
    outputFile.println(username); 
    outputFile.println(userFinalTotal); 

} 

else if (option == 2) 
{ 
    if (file.exists()) 
    { 
     while (inputFile.hasNext()) 
     { 
      username = inputFile.nextLine(); 
      System.out.println ("Name\n------\n" + name + "\n"); 
      userFinaltotal = inputFile.nextDouble(); 
      System.out.printf("Scores\n------\n$%.2f\n", userFinalTotal); 
      System.out.println(); 
      inputReader.close(); 
     } 

Вот полная программа, чтобы увидеть, где переменные берутся.

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

public class SlotsMachine 
{ 
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 
     { 
      double bet = keyboard.nextDouble(); 
      bet = 0.0; 
      userTotal = startingTotal - bet; 

      System.out.print ("You currently have: " + startingTotal + "\nHow much would you like to bet?"); 

      double winnings = 0.0; 
      double userFinalTotal = 0.0; 

      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(); 
      } 

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

      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); 
      }  
     } while (userTotal > 0); 

     File file = new File(“scores.txt”); //illegal start of expression 

     if (!file.exists()) 
     { 
      file.createNewFile(); 
     } 

     Scanner inputFile = new Scanner(file); 
     String line = inputReader.nextLine(); 
     FileWriter fwriter = new FileWriter(“scores.txt”, true); //this is where the error CP1252 
     PrintWriter outputWriter = new PrintWriter(file); 
     outputFile.println(username); 
     outputFile.println(userFinalTotal); 

    } 

    else if (option == 2) 
    { 
     if (file.exists()) 
     { 
      while (inputFile.hasNext()) 
      { 
       username = inputFile.nextLine(); 
       System.out.println ("Name\n------\n" + name + "\n"); 
       userFinaltotal = inputFile.nextDouble(); 
       System.out.printf("Scores\n------\n$%.2f\n", userFinalTotal); 
       System.out.println(); 
       inputReader.close(); 
      } 
     } 
     else 
     { 
      System.out.println("There are no scores to display at this time."); 
     } 

     System.out.println("Actions:"); 
     System.out.print("1. Start a new game\n2. View scores\n3. Exit "); 

     System.out.println("Please select an action: "); 
     option = keyboard.nextInt(); 
    } 

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

}

+0

Какую ошибку вы получаете? – HedonicHedgehog

+0

Пожалуйста, попробуйте работать через http://ericlippert.com/2014/03/05/how-to-debug-small-programs/ - большинство людей не пробираются через такой абсурдно длинный кусок кода, чтобы найти иглу в вашем стог сена. Если вы выделили свою проблему, вы сможете гораздо лучше выразить свою проблему, и вам будет намного легче помочь вам. –

+0

@ Vucar Timnärakrul Так как он включает в себя вещи из кода, я хотел включить код, чтобы можно было увидеть, какие переменные необходимо включить, если это была ошибка. Я разместил комментарий рядом с линией, в которой была ошибка с указанием ошибки: unmappable character для кодирования CP1252, а также с незаконным запуском выражения и указанием необходимости; где есть. Я попытаюсь добавить конкретный раздел кода вверху с этого момента, спасибо за ввод – mrkrebs

ответ

0

Он компилирует сейчас, единственная проблема заключается в том, что она печатает баллы несколько раз.
импорт 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); 
    } 
} 

}

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

  • Нет связанных вопросов^_^