Java 在PCB类中创建寄存器集值

Java 在PCB类中创建寄存器集值,java,operating-system,Java,Operating System,我为OS类分配的一部分任务要求我用Java创建一个包含各种字段的进程控制块类。我已经创建了包含所有不同字段的类,例如名称、状态、到达时间等。但是当要求我这样做时,我被卡住了: 寄存器集值(包含以下字段的类“RegisterSet”的对象:XAR、XDI、XDO、PC、IR、EMIT、RR、PSW、R0、R1、R2、R3、R4、R5、R6、R7) 似乎我必须创建另一个名为RegisterSet的类,包含所有这些不同的字段,但是我一直在思考应该如何做到这一点,以及如何在PCB类中创建设置值 任何

我为OS类分配的一部分任务要求我用Java创建一个包含各种字段的进程控制块类。我已经创建了包含所有不同字段的类,例如名称、状态、到达时间等。但是当要求我这样做时,我被卡住了:

  • 寄存器集值(包含以下字段的类“RegisterSet”的对象:XAR、XDI、XDO、PC、IR、EMIT、RR、PSW、R0、R1、R2、R3、R4、R5、R6、R7)
似乎我必须创建另一个名为RegisterSet的类,包含所有这些不同的字段,但是我一直在思考应该如何做到这一点,以及如何在PCB类中创建设置值

任何帮助都将不胜感激

以下是我的例子。我有一个RegisterSet类,每个寄存器都有setter和getter,然后在PCB类中有一个setValues函数,如下所示:

public void setValues(String XAR,
                        String XDO, String PC, String IR,
                        String EMIT, String RR, String PSW,
                        String R0, String R1, String R2,
                        String R3, String R4, String R5, String R6,
                        String R7){
    RegisterSet reg = new RegisterSet();
    reg.setXAR(XAR);
    reg.setXDO(XDO);
    reg.setPC(PC);
    reg.setIR(IR);
    reg.setEMIT(EMIT);
    reg.setRR(RR);
    reg.setPSW(PSW);
    reg.setR0(R0);
    reg.setR1(R1);
    reg.setR2(R2);
    reg.setR3(R3);
    reg.setR4(R4);
    reg.setR5(R5);
    reg.setR6(R6);
    reg.setR7(R7);
}
然后我有一个getValues方法,它运行我在RegisterSet类中创建的ToString():

public String getValues(){
    RegisterSet reg = new RegisterSet();
    return reg.ToString();
}
最后,以下是我试图在sim卡中运行的内容:

//Remaining are Registers
String xar = st.nextToken();
String xdi = st.nextToken();
String xdo = st.nextToken();
String pc = st.nextToken();
String ir = st.nextToken();
String emit = st.nextToken();
String rr = st.nextToken();
String psw = st.nextToken();
String r0 = st.nextToken();
String r1 = st.nextToken();
String r2 = st.nextToken();
String r3 = st.nextToken();
String r4 = st.nextToken();
String r5 = st.nextToken();
String r6 = st.nextToken();
String r7 = st.nextToken();
PCB.setValues(xar, xdi, xdo, pc, ir, emit, rr, psw,
        r0, r1, r2, r3, r4, r5, r6, r7);
我尝试编译时遇到的错误是:

 required:     String,String,String,String,String,String,String,String,String,String,String,String,String,String,String
 found: String,String,String,String,String,String,String,String,String,String,String,String,String,String,String,String
 reason: actual and formal argument lists differ in length

基本上,我从许多进程中读取不同的细节,将数据填充到PCB中,然后将PCB添加到进程表中,这实际上只是一个ArrayList。之后,我迭代ArrayList,并打印出每个进程。

您是否尝试过类似的方法:

class PCB {
    ...
    RegisterSet registerSet = new RegisterSet();

    public RegisterSet getRegisterSet() { return this.registerSet; }
    public void setRegisterSet(RegisterSet rs) { this.registerSet = rs; }
    ...
}

这回答了你的直接问题,但不知何故,我不确定你想问的是什么。

我有自己的RegisterSet类,每个寄存器都有setters/getter。然后,在PCB类中,我有一个名为setValues的函数,用于设置每个寄存器的值。然后,在我的模拟中,我运行PCB.setValues(xar、xdi、xdo等)但它总是给我一个错误。错误是什么?更新你的帖子并添加完整的堆栈跟踪。你似乎误解了一些基本知识。你的
getValues()
创建了一个新的空
RegisterSet
对象,执行它的
toString()
方法并返回结果,结果不是您想要的。至于错误,您忘记在
setValues()的定义中包含
XDI
。错误告诉您为方法调用提供了太多的参数。嗯,是的,您是对的。当我尝试运行它时,每个寄存器都会得到所有空值。您看到我尝试执行的操作了吗?我想调用getValues()方法并能够基于该方法打印它们。您需要阅读类成员的详细信息。在
setValues()
中,您正在创建一个新的
RegisterSet
,但不会将其保存在任何位置,所以只要
setValues())
完成后,
RegisterSet
对象将被丢弃。请仔细查看我上面回答中的代码,以了解在
PCB
类中定义、设置和检索
RegisterSet
成员的正确方法。发布一些代码/类,我们可能可以看到错误所在。