2017-03-18 5 views
-1

나는 다음과 같은 출력을 제공하는 프로그램 만들려고하고 있어요 사용하여 학생들 계산 프로그램 만들기 :스레드

MathStudent[1] Jack Count: 1 
MathStudent[2] Smith Count: 1 
MathStudent[3] Victor Count: 1 
MathStudent[4] Mike Count: 1 
ScienceStudent[5] Dave Count: 1 
ScienceStudent[6] Oscar Count: 1 
ScienceStudent[7] Peter Count: 1 
ComputerStudent[8] Philip Count 1 
ComputerStudent[9] Shaun Count 1 
ComputerStudent[10] Scott Count 1 
MathStudent[1] Jack Count: 2 
MathStudent[2] Smith Count: 2 
MathStudent[3] Victor Count: 2 
MathStudent[4] Mike Count: 2 
ScienceStudent[5] Dave Count: 2 
ScienceStudent[6] Oscar Count: 2 
ScienceStudent[7] Peter Count: 2 
ComputerStudent[8] Philip Count 2 
ComputerStudent[9] Shaun Count 2 
ComputerStudent[10] Scott Count 2 
: 
: 
: 
MathStudent[1] Jack Count: 10 
MathStudent[2] Smith Count: 10 
MathStudent[3] Victor Count: 10 
MathStudent[4] Mike Count: 10 
ScienceStudent[5] Dave Count: 10 
ScienceStudent[6] Oscar Count: 10 
ScienceStudent[7] Peter Count: 10 
ComputerStudent[8] Philip Count 10 
ComputerStudent[9] Shaun Count 10 
ComputerStudent[10] Scott Count 10 

을하지만 점점 오전 출력은 다음과 같습니다

MathStudent[1]-Smith: - Count:1 
MathStudent[2]-Jack: - Count:1 
MathStudent[3]-Victor: - Count:1 
MathStudent[4]-Mike: - Count:1 
Science Student[5]-Dave: - Count:1 
Science Student[6]-Oscar: - Count:1 
Science Student[7]-Peter: - Count:1 
Computer Student[8] Philip: - Count:1 
Computer Student[9] Shaun: - Count:1 
Computer Student[10] Scott: - Count:1 
MathStudent[11]-Smith: - Count:1 
MathStudent[12]-Jack: - Count:1 
MathStudent[13]-Victor: - Count:1 
MathStudent[14]-Mike: - Count:1 
Science Student[15]-Dave: - Count:1 
Science Student[16]-Oscar: - Count:1 
Science Student[17]-Peter: - Count:1 
Computer Student[18] Philip: - Count:1 
Computer Student[19] Shaun: - Count:1 
Computer Student[20] Scott: - Count:1 
MathStudent[21]-Smith: - Count:1 
MathStudent[22]-Jack: - Count:1 
MathStudent[23]-Victor: - Count:1 
MathStudent[24]-Mike: - Count:1 
Science Student[25]-Dave: - Count:1 
Science Student[26]-Oscar: - Count:1 
Science Student[27]-Peter: - Count:1 
Computer Student[28] Philip: - Count:1 
Computer Student[29] Shaun: - Count:1 
Computer Student[30] Scott: - Count:1 
MathStudent[31]-Smith: - Count:1 
MathStudent[32]-Jack: - Count:1 
MathStudent[33]-Victor: - Count:1 
MathStudent[34]-Mike: - Count:1 
Science Student[35]-Dave: - Count:1 
Science Student[36]-Oscar: - Count:1 
Science Student[37]-Peter: - Count:1 
Computer Student[38] Philip: - Count:1 
Computer Student[39] Shaun: - Count:1 
Computer Student[40] Scott: - Count:1 
MathStudent[41]-Smith: - Count:1 
MathStudent[42]-Jack: - Count:1 
MathStudent[43]-Victor: - Count:1 
MathStudent[44]-Mike: - Count:1 
Science Student[45]-Dave: - Count:1 
Science Student[46]-Oscar: - Count:1 
Science Student[47]-Peter: - Count:1 
Computer Student[48] Philip: - Count:1 
Computer Student[49] Shaun: - Count:1 
Computer Student[50] Scott: - Count:1 
MathStudent[51]-Smith: - Count:1 
MathStudent[52]-Jack: - Count:1 
MathStudent[53]-Victor: - Count:1 
MathStudent[54]-Mike: - Count:1 
Science Student[55]-Dave: - Count:1 
Science Student[56]-Oscar: - Count:1 
Science Student[57]-Peter: - Count:1 
Computer Student[58] Philip: - Count:1 
Computer Student[59] Shaun: - Count:1 
Computer Student[60] Scott: - Count:1 
MathStudent[61]-Smith: - Count:1 
MathStudent[62]-Jack: - Count:1 
MathStudent[63]-Victor: - Count:1 
MathStudent[64]-Mike: - Count:1 
Science Student[65]-Dave: - Count:1 
Science Student[66]-Oscar: - Count:1 
Science Student[67]-Peter: - Count:1 
Computer Student[68] Philip: - Count:1 
Computer Student[69] Shaun: - Count:1 
Computer Student[70] Scott: - Count:1 
MathStudent[71]-Smith: - Count:1 
MathStudent[72]-Jack: - Count:1 
MathStudent[73]-Victor: - Count:1 
MathStudent[74]-Mike: - Count:1 
Science Student[75]-Dave: - Count:1 
Science Student[76]-Oscar: - Count:1 
Science Student[77]-Peter: - Count:1 
Computer Student[78] Philip: - Count:1 
Computer Student[79] Shaun: - Count:1 
Computer Student[80] Scott: - Count:1 
MathStudent[81]-Smith: - Count:1 
MathStudent[82]-Jack: - Count:1 
MathStudent[83]-Victor: - Count:1 
MathStudent[84]-Mike: - Count:1 
Science Student[85]-Dave: - Count:1 
Science Student[86]-Oscar: - Count:1 
Science Student[87]-Peter: - Count:1 
Computer Student[88] Philip: - Count:1 
Computer Student[89] Shaun: - Count:1 
Computer Student[90] Scott: - Count:1 
MathStudent[91]-Smith: - Count:1 
MathStudent[92]-Jack: - Count:1 
MathStudent[93]-Victor: - Count:1 
MathStudent[94]-Mike: - Count:1 
Science Student[95]-Dave: - Count:1 
Science Student[96]-Oscar: - Count:1 
Science Student[97]-Peter: - Count:1 
Computer Student[98] Philip: - Count:1 
Computer Student[99] Shaun: - Count:1 
Computer Student[100] Scott: - Count:1 

주 클래스는 다음과 같습니다

public class JavaLab5 { 
    public static final int DEBUG = 0; 
    public static void multipleThreads(int number) { 
     StudentThread []st = new StudentThread[number]; 
     for (int j = 0; j < number; j++) { 
      st[j] = new StudentThread(); 
      st[j].start(); 


      try { 
       Thread.sleep(1000); 
      } catch (InterruptedException e) { 
       System.out.println("Exception at PrintThread.run: " + e); 
      } 
     } 
    } 


    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     //StudentThread studentThread = new StudentThread(); 
     //studentThread.start(); 
     multipleThreads(10); 
    } 

} 

학생 클래스 :

012 3,516,
public class Student { 
    static int studentCounter = 1; 
    String name; 
    private int count = 0; 
    public static int instances = 0; 

    // Getters 
    public String getName() { 
     return this.name; 
    } 

    // Setters 
    public void setName(String name) { 
     if (JavaLab5.DEBUG > 3) System.out.println("In Student.setName. Name = "+ name); 
     this.name = name; 
    } 

    /** 
    * Default constructor. Populates name,age and gender 
    * with defaults 
    */ 
    public Student() { 
     instances++; 
     this.name = "Not Set"; 
    } 

    /** 
    * Constructor with parameters 
    * @param name String with the name 
    */ 
    public Student(String name) { 
     this.name = name; 
    } 

    /** 
    * Destructor 
    * @throws Throwable 
    */ 
    protected void finalize() throws Throwable { 
     //do finalization here 
     instances--; 
     super.finalize(); //not necessary if extending Object. 
    } 

    public void getCounter() { 
     for (int j = 0; j < 1; j++) { 
      count++; 
      System.out.println(count); 
     } 
    } 

    @Override 
    public String toString() { 
     return this.name; 
    } 

    public String getSubjects() { 
     return this.getSubjects(); 
    }  
} 

컴퓨터 학생 :

public class ComputerStudent extends Student { 
    int studCountObj; 

    /** 
    * Default constructor 
    */ 
    public ComputerStudent() { 
     super(); 
    } 

    public ComputerStudent(String name) { 
     super(name); 
     studCountObj=studentCounter; 
     studentCounter++; 
    } 

    /** 
    * Display information about the subject 
    * @return 
    */ 
    @Override 
    public String getSubjects(){ 
     return(" Computer Student" + "[" + studCountObj + "] " + name + ": "); 
    } 
} 

수학 학생 :

public class MathStudent extends Student { 
    int studCountObj; 

    /** 
    * Default constructor 
    * @param name 
    */ 
    public MathStudent(String name) { 
     super(name); 
     studCountObj=studentCounter; 
     studentCounter++; 
    } 

    public MathStudent() { 
     super(); 
    } 

    /** 
    * Display information about the subject 
    * @return 
    */ 
    @Override 
    public String getSubjects(){ 
     return(" MathStudent" + "[" + studCountObj + "]" + "-" + name + ": "); 
    } 
} 

과학 학생 :

public class ScienceStudent extends Student { 
    int studCountObj; 

    /** 
    * Default constructor 
    */ 
    public ScienceStudent() { 
     super(); 
    } 

    public ScienceStudent(String name) { 
     super(name); 
     studCountObj=studentCounter; 
     studentCounter++; 
    } 

    /** 
    * Display information about the subject 
    * @return 
    */ 
    @Override 
    public String getSubjects(){ 
     return(" Science Student" + "[" + studCountObj + "]" + "-" + name + ": "); 
    } 
} 

StudentThread 클래스 : 공용 클래스 StudentThread는 스레드 {

를 확장 0
public void run(){ 
    Student s[] = new Student[10]; 

    s[0] = new MathStudent("Smith"); 
    s[1] = new MathStudent("Jack"); 
    s[2] = new MathStudent("Victor"); 
    s[3] = new MathStudent("Mike"); 
    s[4] = new ScienceStudent("Dave"); 
    s[5] = new ScienceStudent("Oscar"); 
    s[6] = new ScienceStudent("Peter"); 
    s[7] = new ComputerStudent("Philip"); 
    s[8] = new ComputerStudent("Shaun"); 
    s[9] = new ComputerStudent("Scott"); 

    for (Student item : s) { 
     System.out.print(item.getSubjects() + " - " + "Count:"); 
     item.getCounter(); 
    } 

} 

}

나는이 문제를 가지고, 하나는 학생 수는 100 개까지 모든 길을 가고 있지만 10까지 가야하고 10 명 세트가 학생 번호없이 repeast해야한다는 것입니다 괄호 안에 증가.

그리고 secound 문제는 카운트가 그냥 1

+0

두 번째 문제는'Student '클래스의'getCounter()'메쏘드에 더 가깝다. 당신은 항상 한 번만 반복합니다. –

+0

각 스레드는 10 명의 학생 = 100 명의 학생을 만들고, 각 학생은 카운터를 100 번 = 100 번 호출하여 카운터 = 카운터를 항상 1로 호출합니다. – 7663233

+0

@ 668 어떻게 해결할 수 있습니까? – madman123

답변

0

학생 수에 머물고 올라가고되지 않은 100 개까지 모든 길을 가고 있지만 그것은 단지 다음 10까지 를 이동해야한다는 것입니다 10 명 학생 세트는 괄호 안에 학생 번호 없이 반복해야합니다.

이 문제를 해결하려면 10 명의 학생 만 만들 필요가 있지만 현재 100 명의 학생을 만들고 있습니다. 당신은 multipleThreads(1);로 전달하여이 작업을 수행하거나 루프 for (int j = 0; j < number; j++)

그리고 두 번째 문제는 카운트가 올라가고되지 않은 것을 그냥 귀하의 count 변수는 1

에 머물고을 제거 할 수 있습니다 NOT static이므로 각 Student 객체에 대해 생성되므로이 문제를 해결하려면 내부에 Student 클래스의 정적 변수로 표시하십시오.