2015-11-22 3 views
0

Итак, я делаю игру для школьного проекта, а также требования и все, что сделано, но я пытаюсь добавить больше, добавив систему высоких баллов. В игре есть несколько трудностей, и я стараюсь сделать независимый высокий балл для каждой игры, так что, например, если вы получите высокий балл 10 на простом, то идите играть в игру на среднем уровне, ваш высокий балл «10. У меня был высокий балл, когда у всех было только один балл, но теперь, когда я пытаюсь сделать их независимыми, я не могу заставить его работать. Вот некоторые из кода (я, очевидно, не буду публиковать все это. Если вам нужен какой-либо другой код, кроме того, что я предоставил, дайте мне знать.Java - попытка перезапустить сканер

Итак, вот код, который получает высокий балл из текстового файла, и если файл еще не создан/он еще не создан, он делает его, а затем заполняет необходимую информацию, чтобы установить текущий высокий балл в ноль.

Примечание: Я делаю не считаю, что это проблема, потому что эта часть делает то, что он должен.

boolean fileLoop = true; 
    while(fileLoop) { 
     try { 
      scan = new Scanner(new FileReader(highScores)); 
      scan.useLocale(Locale.US); 
      //System.out.println(scan.next()); 
      while(scan.hasNext()) { 
       //System.out.println("loop is working"); 
       if(easy) { 
        if(scan.next().toLowerCase().equals(qm + "easy" + qm)) { 
         if(scan.hasNextDouble()) { 
          highestScore = scan.nextDouble(); 
          System.out.println(highestScore); 
          //System.out.println("easy score worked"); 
         } 
        } 
       } 
       else if(medium) { 
        if(scan.next().toLowerCase().equals(qm + "medium" + qm)) { 
         highestScore = scan.nextDouble(); 
         //System.out.println("medium score worked"); 
        } 
       } 
       else if(hard) { 
        if(scan.next().toLowerCase().equals(qm + "hard" + qm)) { 
         highestScore = scan.nextDouble(); 
         //System.out.println("hard score worked"); 
        } 
       } 
       else if(extreme) { 
        if(scan.next().toLowerCase().equals(qm + "extreme" + qm)) { 
         highestScore = scan.nextDouble(); 
         //System.out.println("extreme score worked"); 
        } 
       } 
      } 
      fileLoop = false; 
     } 
     catch(FileNotFoundException e) { 
      highScores = new File("highScores.txt"); 
      try { 
       writer = new BufferedWriter(new FileWriter(highScores)); 
       writer.write(qm + "Easy" + qm + " " + "0.0"); 
       writer.write("\n" + qm + "Medium" + qm + " " + "0.0"); 
       writer.write("\n" + qm + "Hard" + qm + " " + "0.0"); 
       writer.write("\n" + qm + "Extreme" + qm + " " + "0.0"); 
      } 
      catch (Exception f) { 

      } 
      finally { 
       try { 
        writer.close(); 
       } catch (Exception e1) { 
        e1.printStackTrace(); 
       } 
      } 
     } 

Именно этот код, который является пр oblem. Когда я тестирую его, он говорит, что scan.hasNext() является ложным.

if(scoreCounter > highestScore) { 
      System.out.println("IF WORKED"); 
      try { 

       scan = new Scanner(new FileReader(highScores)); 
       writer = new BufferedWriter(new FileWriter(highScores)); 
       while(scan.hasNext()) { 
        System.out.println("WHile works"); 
        if(easy) { 
         System.out.println("if worked"); 
         if(scan.next().toLowerCase().equals(qm + "easy" + qm)) { 
          writer.write(qm + "Easy" + qm + " " + String.valueOf(scoreCounter)); 
          System.out.println("easy score worked"); 
         } 
        } 
       } 
      } 
      catch (Exception e) { 
       e.printStackTrace(); 
      } 
      finally { 
       try{ 
        writer.close(); 
       } 
       catch (Exception e) { 

       } 
      } 
     } 

Теперь, поправьте меня, если я ошибаюсь, но я думал, что делает scan = new Scanner(new FileReader(highScores)); сброса сканера, так что бы начать с верхней снова. Кроме того, когда я сохраняю его как есть, он полностью удаляет все в тестовом файле.

Заранее спасибо за любую помощь

ответ

0

Вы не можете иметь открытый файл для чтения с одним сканером и для записи с BufferedWriter в то же время. Писатель сжимает содержимое файла.

+0

Итак, как бы вы посоветовали мне это сделать? – Ryan

+0

Исправление. Есть ли какой-нибудь другой способ сделать это, используя ту же концепцию, что и сейчас. Поскольку я знаю, как я могу это сделать, у которого будет переменная для каждой трудности, прочитайте файл один раз, чтобы сохранить значения в указанных переменных, а затем после завершения игры перепишите весь файл. Но есть ли способ сделать это, используя только одну переменную, как сейчас? – Ryan

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