2017-02-05 6 views
1

まず物事からプライベート静的最終int型を宣言するためにどのように...私は、Javaに新しいですし、ごく最近になって、マルチクラスとマルチメソッドのコードを試して始めています。だから、方法(Javaの初心者)最初

、私はそれがクラスの生徒の成績を取る書き込み(外部ファイルから読み込み)し、各学生のための最終的なグレードを計算する必要があるプログラムを持っています。私は現在、クラス内の学生数を決定するコードを書いています。これには、外部ファイルの行数がカウントされます。私は行数を保存することを決めた

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

public class Student 
{ 
// instance variables 
private int Quiz1; 
private int Quiz2; 
private int MidTerm; 
private int Final; 
private int FinalP; 
private int LetterGrade; 


public Student(int q1, int q2, int mt, int f) 
{ 
    Quiz1 = q1; 
    Quiz2 = q2; 
    MidTerm = mt; 
    Final = f; 
} 

public int getStudentNumber() 
{ 
    Scanner two = null; 
    try 
    { 
     // Create a scanner to read the file, file name is parameter 
     two = new Scanner (new File("Prog349f.txt")); 
     } 
    catch (FileNotFoundException e) 
    { 
    System.out.println ("File not found!"); 
    // Stop program if no file found 
    System.exit (0); 
    } 

    int lines = 0; 
    while(two.hasNext()) 
    {  
    lines++; 
    two.nextLine(); 
    } 
    two.close(); 
    return(lines); 
} 
} 

これは私がこれまで持っているものである

... /プライベート静的最終intとして学生の数は、(現在の分類はただでありますプレースホルダー)。私はそのように保存する方法はあまりよく分かりません。すべての例で、プライベートスタティックファイナンスは次のように宣言されています。

private static final double PI = 3.14; 

tldr; これはすでに何度もカバーされていますが、メソッドを使ってパブリックstatic finalを定義するプロトコルは何ですか?

+2

行を数えたときに値を変更する必要があるので、「最終」にすることはできません。 – markspace

+0

まあ、戻り値を最終的に保存することを考えていました.......... –

+0

このように初期化しない限り、この場合は奇妙なことにはなりません。値を返すメソッドがある場合、同じ値を含む変数も必要ありません。あなたが解決しようとしている実際の問題は何ですか? – EJP

答えて

1

あなたはそれが唯一の値はクラスがロードされた時点で設定されていない、と決してその後に変更することが可能な場合のためだ、のためである最終静的なものを誤解しています。これは、プログラムが実行される前に何を保持するべきかを知っているところで、定数(例のPIのような)を宣言するのに便利です。

代わりに、各ラインのためにあなたは、読み込ま学生を​​作成し、リストに追加します。生徒の数が必要なときはいつでも、リストのsizeメソッドを呼び出すことができます。

あなたが本当に何かのstatic finalを作るというアイデアに接続されている場合、あなたはそのようにリストを宣言することができます。静的最終変数に含まれる参照は変更されませんが、その内容を追加および変更できます。

インスタンスメソッドを混同しているようだとStudentクラスにファイル読み取りコードを詰め込み、あなたはそれのためのより良い場所を見つける必要があります。ファイルからすべての生徒を読むことは、個々の生徒に属する論理ではありません。 Javaはクラス指向でもメソッド指向でもなく、オブジェクト指向です。メソッドにコードを入れて、それらを呼び出すインスタンスに関連するようにします。

0

私の観察/秒:

1)ファイル "Prog349f.txt" の各行は、各学生の成績を表しています。だから、N行はクラス内のN人の学生を意味します。

2)この数の学生をプライベート静的最終変数に保存します。

これ、あなたは何ができるか:

1)あなたは、静的(ロジックとしてgetStudentNumber()を定義することができますが:関連するファイルは、クラスで、ファイルため、すべての生徒の成績を含むクラスレベルのファイルでありますクラスレベルであり、メソッドは合理的に静的として宣言できます)。

public static int getStudentNumber() { 
int lines = 0; 
try(Scanner two = new Scanner(new File("clients"))) { 
    while(two.hasNext()) { 
     lines++; 
     two.nextLine(); 
    } 
} catch (FileNotFoundException e) { 
     System.out.println ("File not found!"); 
     System.exit(0); 
} 
    return(lines); 
} 

2)そして、メインクラスまたはプライベートのstatic final変数として、この番号を保存する他のクラスにgetStudentNumber()を呼び出します。

public class Main { 

private static final int NUMBER_OF_STUDENTS = Student.getStudentNumber(); 

public static void main(String[] args){ 

    System.out.println(NUMBER_OF_STUDENTS); 

    } 
} 

3)ただし、ケーススタディの実装効率を大幅に向上させることができます。あなたがこれを実装した方法は、最も完璧なものではないかもしれません。この場合、慎重に分析する必要があります。