gpt4 book ai didi

java - StringTokenizer 的问题

转载 作者:行者123 更新时间:2023-11-30 07:37:51 26 4
gpt4 key购买 nike

我收到以下错误消息,但我似乎无法找出问题所在。非常感谢任何帮助。错误信息如下:-

BaseStaInstance.java:68: 找不到符号

符号:构造函数 StringTokenizer(java.lang.Object,java.lang.String)

位置:类 java.util.StringTokenizer st = new StringTokenizer(buf,",");

                                  ^

在这里,BaseStaInstance 是我的主要公共(public)类。

实现这个StringTokenizer的类如下:-

类 ServerConnect 扩展线程 {

Socket skt;
int iProcessId, iInProcessId;
int iOwnTimeStamp, iInTimeStamp;
ServerConnect scnt = null;

ObjectOutputStream myOutput;
ObjectInputStream myInput;

ServerConnect(){}
ServerConnect(Socket connection, int iProcessNo) {
this.skt = connection;
this.iProcessId = iProcessNo;
}

public void run() {
try {

//initialize the object "scnt" using the parameterized constructor
ServerConnect scnt = new ServerConnect(skt, iProcessId);
myInput = new ObjectInputStream(skt.getInputStream());

while(true) {
try{
iOwnTimeStamp = Global.iTimeStamp;

Object buf = myInput.readObject();

//if we got input, print it out and write a message back to the remote client...
if(buf != null){
scnt.replyChoice(buf);
}
}catch(ClassNotFoundException e) {
e.printStackTrace();
}
}
} catch(IOException e) {
e.printStackTrace();
}
}

void replyChoice(Object buf){
try{
String sDeferReply = "";
myOutput = new ObjectOutputStream(skt.getOutputStream());

//the place where the basestation reads the request from the other basestation
System.out.println("Server read:[ "+buf+" ]");

//extract out the process id and the timestamp from the incoming request
buf = buf.toString();

***StringTokenizer st = new StringTokenizer(buf,",");***

//skip the word request
st.nextToken();
iInProcessId = Integer.parseInt(st.nextToken());
iInTimeStamp = Integer.parseInt(st.nextToken());

//check request is made
//there is a possibility of entering the else loop only on the very first iteration
//the control flows into the if loop even if one request has been made
if(iOwnTimeStamp != 0){
//if the incoming request has a larger timestamp (logical clock value, process id) than the current process, we defer the reply
if(iOwnTimeStamp < iInTimeStamp || iProcessId < iInProcessId){
sDeferReply="iInTimeStamp"+","+"iInProcessId";
Global.v.addElement(new String(sDeferReply));
}
//incoming request has a smaller timestamp than the basestation request itself
else{
myOutput.writeObject("Reply");
myOutput.flush();
}
}
//if the current process is in the critical section then we defer replies
else if(Global.iCriticalSection==1){
sDeferReply="iInTimeStamp"+","+"iInProcessId";
Global.v.addElement(new String(sDeferReply));
}
//start of execution of the thread, there is a possibility that the basestation hasn't issued a request
else{
myOutput.writeObject("Reply");
myOutput.flush();
}
}catch(IOException e){
e.printStackTrace();
}
}

}

实现 StringTokenizer 函数的部分有 *** 包围。

提前感谢任何可能帮助我的人。

最佳答案

尝试

StringTokenizer st = new StringTokenizer((String) buf,",");

你得到那个错误的原因是因为 buf,在那个时候引用一个 String,仍然是 Object.


作为额外的提示,您确实应该努力尝试理解编译器给出的错误消息。请看以下内容:

cannot find symbol constructor StringTokenizer(java.lang.Object,java.lang.String)
location: class java.util.StringTokenizer st = new StringTokenizer(buf,",");

编译器错误消息并不总是有意义,但这已经很好了。它告诉你:

  • 它找到了正确的类型 java.util.StringTokenizer,因此它不是 导入 或名称模糊等问题。
  • 它告诉您无法找到具有给定签名的特定方法。实际上,通过 API 快速检查确认 StringTokenizer 没有采用 (java.lang.Object, java.lang.String) 的构造函数。
  • 它告诉您程序中试图调用这个不存在的方法的确切代码行确实,第一个参数的类型是java.lang.Object,第二个参数的类型是java.lang.String!!!

这就是我能够快速查明源代码中的问题并提出快速修复建议的方法。

能够处理编译器给出的错误消息是您必须培养的一项基本技能,因此我希望这对您来说是一种教育经历。

关于java - StringTokenizer 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2349900/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com