-1

メソッド「readFile」でわかるように、問題を見つけることができません。スキャナが文字列を読み取ることが問題かどうかを確認しようとしましたが、プログラムをコンパイルすると、テキストファイルの名前、score.txt が表示されます。 、コンテンツではありません。これに約 3 時間取り組んできました。

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 実際のファイル (ファイル システム内のパス名 name で指定されたファイル) への接続を開くことによって、FileInputStream を作成します。

そしてそれをスキャナーに渡します。

今日は何を学びましたか?ドキュメントを読んでいない場合は、メソッドまたはコンストラクターが何をするかを想定しないでください。この単純なルールに従えば、多くの時間を節約できます。

于 2013-03-12T22:07:54.777 に答える