2012-03-06 9 views
0

Javaで値が入力された回数を数える方法を探しています。具体的には、Moduleクラスを管理する必要があります。クラスはsemestercodeです。それが第1学期に追加される最初のモジュールであれば、そのコードは101でなければならない。その学期の第2のものは102であり、同様に、第2学期のために入力された第1モジュールは201などである。Java:値が入力された回数をカウントする

私は静的インスタンス変数countを使用しようとしましたが、何らかの形でそれがsemesterの値に基づいて変更されるように管理できません。

ご迷惑をおかけして申し訳ございません。前もって感謝します!

--EDIT_

以下は、私のクラスのコード全体です。あまりにも長いとすみません。

package courseman; 

/** 
* @overview <code>Module</code> represents the module object of a CourseMan program 
* @author 
* 
*/ 
public class Module { 
    private static int count = 1; 
    private String name; 
    private int semester; 
    private int credits; 
    private String code; 

/** 
* @effects Initializes a <code>Module</code> object 
* 
*/ 
public Module(){ 
    name = "No name"; 
    semester = 1; 
    credits = 0; 
    code = "M000"; 
} 

/** 
* @param newModule a <code>Module</code> object 
* @effects   Creates a <code>Module</code> object with <code>newModule</code> 
* 
*/ 
public Module (Module newModule){ 
    if (newModule == null){ 
     System.out.println("Fatal error creating module."); 
     System.exit(0); 
    } 
    name = newModule.name; 
    semester = newModule.semester; 
    credits = newModule.credits; 
    code = newModule.code; 
} 

/** 
* 
* @param newName  a <code>String</code> to be set as a module's name 
* @param newSemester an <code>integer</code> to be set as a module's semester 
* @param newCredits an <code>integer</code> to be set as a module's credits 
* @effects    Creates a new <code>Module</code> object with predefined name, semester and credits 
*/ 
public Module(String newName, int newSemester, int newCredits){ 
    if(newName == null || newSemester <= 0 || newCredits <= 0){ 
     System.out.println("Fatal error creating module."); 
     System.exit(0); 
    } 
    name = newName; 
    semester = newSemester; 
    credits = newCredits; 

    int no = semester*100 + count; 
    code = "M" + no; 
    count++; 
} 

/** 
* 
* @param newName a <code>String</code> to be set as a module's name 
* @modifies  <code>this.name</code> 
* @effects   Takes <code>newName</code> to update a module's name 
* 
*/ 
public void setName(String newName){ 
    if(newName == null){ 
     System.out.println("Fatal error setting module's name."); 
     System.exit(0); 
    } 
    name = newName; 
} 

/** 
* 
* @param newSemester an <code>int</code> to be set as a module's semester 
* @modifies   <code>this.semester</code> 
* @effects    Takes <code>newSemester</code> to update a module's semester 
* 
*/ 
public void setSemester(int newSemester){ 
    if (newSemester <= 0){ 
     System.out.println("Fatal error setting module's semester."); 
     System.exit(0); 
    } 
    semester = newSemester; 
    int no = (int) Integer.parseInt(code.substring(1)); 
    if (((no - count - 1)/100) < semester){ 
     no = semester*100 + (count - 1); 
     code = "M" + no; 
    } 
} 

/** 
* 
* @param newCredits an <code>integer</code> to be set as a module's number of credits 
* @modifies   <code>this.credits</code> 
* @effects    Takes <code>newCredits</code> to update a module's number of credits 
* 
*/ 
public void setCredits (int newCredits){ 
    if (newCredits <= 0){ 
     System.out.println("Fatal error setting module's credits."); 
     System.exit(0); 
    } 
    credits = newCredits; 
} 

/** 
* 
* @effects Returns a module's code 
*/ 
public String getCode(){ 
    return code; 
} 

/** 
* @effects Returns a module's name 
* 
*/ 
public String getName(){ 
    return name; 
} 

/** 
* @effects Returns a module's semester 
* 
*/ 
public int getSemester(){ 
    return semester; 
} 

/** 
* @effects Returns a module's number of credits 
* 
*/ 
public int getCredits(){ 
    return credits; 
} 

/** 
* @effects Returns <code>String</code> representation of a <code>Module</code> object 
*/ 
public String toString(){ 
    return "Module: " + code + " - " + name + " - semester " + semester + " - " + credits + " credits"; 
} 

/** 
* 
* @param otherModule a <code>Module</code> object to compare 
* @effects    Returns <code>true</code> if <code>this</code> points to the same 
*      object as <code>otherModule</code>, otherwise returns <code>false</code> 
*/ 
public boolean equals(Module otherModule){ 
    return (code.equals(otherModule.code)); 
} 

}

+0

私たちはより良い問題を理解できるように、いくつかのコードを投稿してください。 –

+0

あなたが現在持っているコードを投稿して、それがいかに失敗するか正確に教えてください。 – Synesso

答えて

1

学期別のカウンターを管理する必要があります。学期をその学期のコース数にマップする静的HashMapを試してみてください。新しいModuleを追加するときは、の値をという値にする必要があります(存在しない場合は1に初期化してください)。ここで

はスケルトンだ:

class Module { 
    private static HashMap<Integer, Integer> courseCounts = new HashMap<Integer, Integer>(); 

    public Module(int semester, String name) { 
     this.semester = semester; 
     this.name = name; 
     Integer count = courseCounts.get(semester); 
     if (count == null) 
      count = 0; 
     ++count; 
     this.code = "M" + (semester * 100 + count); 
     courseCounts.put(semester, count); 
    } 
} 
+0

ハッシュマップは素晴らしいアイデアのようです。私には新しいものですが、私はそれを使用しようとします。あなたの提案をありがとう! –

+0

喜んで助けてください。異なる学期のモジュールを追加するとすぐに、「静的なカウントが異なる」必要があるため、静的なカウントでは1つの静的なカウントはできません。どんな種類の 'Map'でもできますが、この状況では' HashMap'が最適です。 – Irfy

0

編集:

私はsemesterは、それ自身のクラスだと思いました。各学期ごとにカウントを個別にしたい場合は、MapSemesterを、そしてcountをその値として持つカウントのリストを作成する必要があります。

+0

それはトリックでした。ありがとう! –

関連する問題