Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建一个使用线程计算学生人数的程序_Java_Arrays_Multithreading_Count_Counter - Fatal编程技术网

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

Java 创建一个使用线程计算学生人数的程序,java,arrays,multithreading,count,counter,Java,Arrays,Multithreading,Count,Counter,我正在尝试创建一个程序,该程序将提供以下输出: 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 ComputerS

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

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 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扩展线程{

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)传递来实现这一点
或只删除(int j=0;j

第二个问题是,计数没有上升,只是 住在1号


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

第二个问题,请查看类
Student
中的
getCounter()
Methode。您总是只进行一次迭代。每个线程创建10个student=100个student,每个student调用一次counter=100个student,并分别调用100个counter=counter always 1。@668如何解决此问题?
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 + ": ");
    } 
}
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();
    }

}