Java:高分函数

时间:2015-10-05 15:29:40

标签: java

我创建了一个计数游戏,我试图创建一个高分方法。

问题是当选择“Highscore”菜单时程序返回“null”。可能导致这种情况的原因是什么?

import javax.swing.*;
import java.text.DecimalFormat;
import java.util.*;
import java.io.*;

public class Räknesätt {
  public static void main(String[]args) throws IOException {

  DecimalFormat df = new DecimalFormat("0.00");

  int input = Integer.parseInt(JOptionPane.showInputDialog(null, "-------------------------" + "\n\n" + 
                                                                 "1. Spela" + "\n" +
                                                                 "2. Highscores" + "\n" +
                                                                 "3. Avsluta" + "\n\n" +
                                                                 "-------------------------"));                                    
        if(input == 2) {
           String highscores = "";
           int rader = countline("Highscores");
           BufferedReader inström1 = new BufferedReader
                           (new FileReader("Highscores")); 


              for(int i = 0; i <= rader; i++) {
                 highscores = inström1.readLine() + "\n";                  
              }
                 JOptionPane.showMessageDialog(null, highscores);                                                                                                              
        }

        else if(input == 3) {
           System.exit(0);
        }

        else if(input == 1) {

           String namn =  JOptionPane.showInputDialog(null, "Skriv in ditt namn");

           int counter =  0;
           int rätt    =  0;
           int fel     =  0;

           while(counter < 10) {
              int slump1 = 1 + (int)(Math.random()*100);
              int slump2 = 1 + (int)(Math.random()*100);

              List<String> räknesätt = new LinkedList<String>(Arrays.asList("+",
                                                                            "-",
                                                                            "*",
                                                                            "/"));
              int räknesättRand = (int)(Math.random()*4);
              String räknesättStr = räknesätt.get(räknesättRand);                                                                                                                                        
              counter++;                                                                                                                      

                 switch(räknesättStr) {

                    case "+":
                       String svarStr1 = JOptionPane.showInputDialog(null,namn + " räkna ut: " + "\n" + slump1 + " + " + slump2 + " = ");
                       int svar1    = Integer.parseInt(svarStr1);

                          if(svar1 == slump1 + slump2) {
                             JOptionPane.showMessageDialog(null, namn + " du räknade rätt!");            
                             rätt++;
                          }
                          else {
                             JOptionPane.showMessageDialog(null, namn + " du räknade fel!");
                             fel++;   
                          }
                     break;     

                    case "-":
                       String svarStr2 = JOptionPane.showInputDialog(null,namn + " räkna ut: " + "\n" + slump1 + " - " + slump2 + " = ");
                       int svar2    = Integer.parseInt(svarStr2);

                          if(svar2 == slump1 - slump2) {
                             JOptionPane.showMessageDialog(null, namn + " du räknade rätt!");            
                             rätt++;
                          }
                          else {
                             JOptionPane.showMessageDialog(null, namn + " du räknade fel!");
                             fel++;
                          }
                     break;                         

                    case "*":
                    String svarStr3 = JOptionPane.showInputDialog(null,namn + " räkna ut: " + "\n" + slump1 + " * " + slump2 + " = ");
                    int svar3    = Integer.parseInt(svarStr3);

                       if(svar3 == slump1 * slump2) {
                          JOptionPane.showMessageDialog(null, namn + " du räknade rätt!");            
                          rätt++;
                       }
                       else {
                          JOptionPane.showMessageDialog(null, namn + " du räknade fel!");
                          fel++;
                       }
                     break;                 

                    case "/":
                    String svarStr = JOptionPane.showInputDialog(null,namn + " räkna ut: " + "\n" + slump1 + " / " + slump2 + " = ");
                    int svar    = Integer.parseInt(svarStr);

                       if(svar == (double)slump1 / slump2) {
                          JOptionPane.showMessageDialog(null, namn + " du räknade rätt!");            
                          rätt++;
                       }  
                       else {
                          JOptionPane.showMessageDialog(null, namn + " du räknade fel!");
                          fel++;
                       } 

                    break;   

                 }
           }


                    JOptionPane.showMessageDialog(null, "Resultat för: " + namn + "\n\n" +
                                                        "=========================" + "\n" +
                                                        "Antal räknade tal: " + counter + "\n" + 
                                                        "Antal rätt: " + rätt + "\n" +
                                                        "Antal fel: " + fel + "\n" +
                                                        "Rättprocent: " + (double)100*rätt/(rätt+fel) + "%");

                    PrintWriter utström1 = new PrintWriter
                                          (new BufferedWriter
                                          (new FileWriter("Highscores")));

                    utström1.println(namn + ", " + (double)100*rätt/(rätt+fel) + "% rätt");                                      
                    utström1.close();
        }             
  }

  public static int countline (String filnamn)throws IOException {
  BufferedReader inström1 = new BufferedReader
                           (new FileReader(filnamn));
  int lines = 0;                           

     while(inström1.readLine() != null) {
        ++lines;       
     }
     inström1.close();

     return lines;      

  }         
}                   

1 个答案:

答案 0 :(得分:0)

代码正试图通过名称&#39; Highscores&#39;打开不存在文件的句柄。 问题是由以下代码行引起的:

    BufferedReader inström1 = new BufferedReader
                (new FileReader("Highscores"));

解决方案是在程序开始时预先创建此文件并将默认内容写入其中。 这是你如何去做的。

    private static void createHighScoreFile() throws IOException {
        PrintWriter printWriter = new PrintWriter
            (new BufferedWriter
                    (new FileWriter("Highscores")));
        printWriter.write("0\n");
        printWriter.close();
    }

    public static void main(String[] args) throws IOException {

        createHighScoreFile();
        DecimalFormat df = new DecimalFormat("0.00");

还有一个与读取文件内容有关的问题。 for循环中的条件尝试从文件中读取一个额外的行,结果总是为null。它需要以这种方式修复。

    for (int i = 0; i <= rader; i++) {

    for (int i = 0; i < rader; i++) {