0

テキスト ファイルから配列を読み取るときに、配列に必要な要素の数を確認できるように、配列リストを作成する方法を教えてください。これを行う方法をまだ学んでいないので、助けていただければ幸いです。正しい配列が格納されていない場合は null になるため、修正が必要なコードの部分を示します。この部分は助けが必要ですが、その下に完全なコードがあります。

public static void output(tokens[], correct[], percentage[], letterGrade[], double      totalAVG, int highScore, int lowScore)
 { 
PrintWriter pw = new PrintWriter(new FileWriter("Result.txt")) ;

for (int t=0 ; t< tokens.length ; t+=2 )
{   
    g = 0 ;
    pw.println(tokens[t] + "," + correct[g] + percentage[g] + letterGrade[g]) ;
    g++ ;
}
    pw.println("Average: " + totalAVG + "% (" + totalGrade + ")") ;
    pw.println("High Score: " + highScore*2) ;  
    pw.println("Low Score: " + lowScore*2) ;

pw.close() ;





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

public class Proj5 
{

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

Scanner s = new Scanner(System.in) ;

/* この部分は、ファイルとの接続を開き、各行を分割してから、部分を配列 (トークン) に入れます。*/

String[] tokens= information(fileCheck) ;

/* * * ID と回答を含むファイルへの接続を開き、それらを分割して返します。* @param (文字列 a) は、メソッドで使用するファイル名を取り込みます * @return 分割されたファイルを含む配列を返します。*/

public static String[] information(String a) throws IOException
{   
    Scanner inFile = new Scanner (new File(a)) ; // opens connection with file
    String[] quarters = new String[] ;
    int index = 0 ;
    int lengthArray = 0 ;
    while (inFile.hasNext()) 
    {
        lengthArray++ ;
    }   
    while (inFile.hasNext())                        

// ファイル内の行が増えるまでループ {

        String line = inFile.nextLine() ;           // brings in next line to be broken up
        String[] array = line.split(",") ;
        quarters[index] = array[0]  ;           //stores lines into array tokens
        index++ ;
        quarters[index] = array[1] ;
        index++ ;
    }       
        inFile.close() ;                            // close connection to file
        return quarters ;
} // end information

/** * (必要な情報を出力します) * * @param はデータ配列を取り込みます * @param は正確な数値配列を取り込みます * @param は正確なパーセンテージ配列を取り込みます * @param * (すべてのパラメーターを 1 行に 1 つずつリストします) * @ return None */ public static void output(tokens[], correct[], percentage[], letterGrade[], double totalAVG, int highScore, int lowScore) { PrintWriter pw = new PrintWriter(new FileWriter("Result.txt") ) ;

for (int t=0 ; t< tokens.length ; t+=2 )
{   
    g = 0 ;
    pw.println(tokens[t] + "," + correct[g] + percentage[g] + letterGrade[g]) ;
    g++ ;
}
    pw.println("Average: " + totalAVG + "% (" + totalGrade + ")") ;
    pw.println("High Score: " + highScore*2) ;  
    pw.println("Low Score: " + lowScore*2) ;

pw.close() ;

} // 出力終了

} // クラス終了

4

2 に答える 2

0

私はその壁を登るには背が低すぎる。ただし、ArrayList の例を示します。

ArrayList<String> dinosaur = new ArrayList<String>(); // <String> is an explicit type declaration


    // This will reference one line at a time
    String line = null;
    int i=0;
    try 
    {
      // FileReader reads text files in the default encoding.
      FileReader fileReader = new FileReader("file.txt");

      //create buffered reader obj 
      BufferedReader bufferedReader = new BufferedReader(fileReader);

//while not EOF, store line in array element
      while ( (line = bufferedReader.readLine ()) != null) {

        dinosaur.add(line);

        i++;
      }


      // Always close files.
      bufferedReader.close();
    }
    //handle exceptions
    catch(FileNotFoundException e) 
    {
      System.out.println("Unable to open file" + e);
    }
    catch(IOException e) 
    {
      System.out.println("Error reading file" + e);
    }

これにより、テキスト ファイルから各行が読み取られ、文字列として ArrayList に格納されます (ただし、一般的には List が好まれます)。ArrayList は動的なので、格納する要素の数 (ファイル内の行数) を知る必要はありません...すべてを処理するのに十分なメモリがスタックにある限り:p

これが役立つことを願っています=)

于 2013-03-18T00:27:49.093 に答える
0

いくつかのアプローチを次に示します。

1) ファイルを事前に読み取り、ファイルの行数を数えます (たとえば、スキャナーの HasNextLine ( http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner. html#hasNextLine() ) を使用すると、配列をその大きさに初期化して、再度カウントすることができます。

2) のようなコレクションを使用ArrayList<String>し、ファイルを反復処理するときに行を追加するだけです。ArrayList は、必要な数のエントリを持つように自動的にサイズ変更されるため、ファイルに含まれる行数について事前に心配する必要はありません。それを使用することは、概念的には配列と同じです - ArrayList の罰金だけでなく、既に存在するものを編集するのではなく、ArrayList 内のエントリの数を変更するやの[i]ようなメソッドでも機能します。addremove

于 2013-03-18T00:27:56.737 に答える