-1

找不到问题,正如您在“readFile”方法中看到的那样,我试图查看问题是否是扫描仪读取了一个字符串,但是当我编译程序时它会说文本文件的名称,scores.txt ,而不是内容。已经为此工作了大约3个小时,dayum。

package pointSystem;

import java.io.*;
import java.lang.*;
import java.util.*;

import main.Gooftw;

public class HighscoreManager {

    private int currentHighScores[] = new int[5];
    private int newScore = Gooftw.getScore();
    private int temp;

    //private Formatter formatter;
    private Scanner sc;
    private String file = "scores.txt";
    File outfile;
    FileOutputStream fop = null;

    public HighscoreManager () {
        System.out.println("Hello World!");
        try {
            //formatter = new Formatter(file);

            sc = new Scanner(file);

        } catch(Exception e){
            System.out.println("you have an error");
        }

        //Read current highscores to game

    }

    public void readFile(){
        int i = 0;
        String values [] = new String [5];
        while(sc.hasNext()) {
            values[i] = sc.next();
            System.out.println(values[i]);
            /*System.out.println(sc.nextInt());
            currentHighScores[i] = sc.nextInt();
            System.out.println(currentHighScores[i]);*/
            i++;
        }

        this.closeFile();

        /*for(i=0;i<5;i++) {
            System.out.println(currentHighScores[i]);       
        }
        /*while(sc.hasNext()){
            String a = sc.next();
            String b = sc.next();
            String c = sc.next();

            System.out.printf(a,b,c);
        }*/
    }

    public void addRecords(){

        try{
        outfile = new File(file);
        fop = new FileOutputStream(outfile);

        if(!outfile.exists()){
            outfile.createNewFile();
        }
        for(int i = 0; i<5; i++){
            //formatter.format("%s \n", currentHighScores[i] );
            fop.write(currentHighScores[i] );

        }
        //fop.flush();
        fop.close();

        }catch(IOException e){
            e.printStackTrace();
        } finally {
            try{
                if(fop!=null){
                    fop.close();
                }

                }catch (IOException e){
                    e.printStackTrace();
                }
            }
        }


        //formatter.close();



    public void compareScores(){

        if(newScore > currentHighScores[0]){
            temp = currentHighScores[0];
            currentHighScores[0] = newScore;
        }
        for(int y = 1 ; y<5 ; y++){
            if(temp < currentHighScores[y]){

                temp = temp + currentHighScores[y];
                currentHighScores[y] = temp - currentHighScores[y];
                temp = temp - currentHighScores[y];
            }
        }

    }

    public void closeFile(){
        sc.close();
    }
}
4

1 回答 1

0

您得到的是文件名而不是文件名,因为您传递了作为文件名的字符串。

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html#Scanner(java.lang.String)

public Sc​​anner(String source) 构造一个新的 Scanner,它产生从指定字符串扫描的值。参数: source - 要扫描的字符串

你想要这个构造函数:

public Sc​​anner(InputStream source, String charsetName) 构造一个新的 Scanner,生成从指定输入流扫描的值。流中的字节使用指定的字符集转换为字符。

使用此构造函数创建文件输入流:

public FileInputStream(String name) throws FileNotFoundException 通过打开与实际文件的连接来创建 FileInputStream,该文件由文件系统中的路径名 name 命名。

并将其传递给扫描仪。

我们今天学到了什么?如果您没有阅读过它的文档,请不要假设方法或构造函数会做什么。遵循这个简单的规则将为您节省大量时间。

于 2013-03-12T22:07:54.777 回答