创建一个使用线程计算学生的程序



我正在尝试创建一个程序,它将提供以下输出:

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);
    }
}

学生班:

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 扩展 Thread {

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 名学生的集合应该在没有括号内的学生人数增加的情况下重新出现。

而问题在于,计数没有上升,它只是停留在1。

学生人数一直上升到100,但应该只去 最多 10 个,然后一组 10 名学生应该在没有 括号内的学生人数增加。

若要解决此问题,只需创建 10

个学生数,但当前正在创建 100 个学生。您可以通过作为multipleThreads(1);传递或只是删除循环for (int j = 0; j < number; j++)来执行此操作

第二个问题是计数没有上升,它只是 入住 1.

您的count变量不是static,因此将为每个Student对象创建它,因此要解决此问题,请将其标记为静态变量,即private static int count = 0; Student类内部。

最新更新