Java 意外的toString结果
因此,我将值添加到哈希映射中,然后打印出哈希映射。我的哈希映射值似乎打印得很好,但由于某些原因,打印的键与输入的键不一样。 以下是相关代码:Java 意外的toString结果,java,Java,因此,我将值添加到哈希映射中,然后打印出哈希映射。我的哈希映射值似乎打印得很好,但由于某些原因,打印的键与输入的键不一样。 以下是相关代码: //adds values into the hash map public void addTransition(int curState, char curBit, int newState, char newBit, int direction){ Trigger trigger = new Trigger(newState, newBit);
//adds values into the hash map
public void addTransition(int curState, char curBit, int newState, char newBit, int direction){
Trigger trigger = new Trigger(newState, newBit);
Action action = new Action(newState, newBit, direction);
program.put(trigger,action);
System.out.println(program);
}
编辑:更新触发器类
//the trigger class
class Trigger{
public char curBit;
public int curState;
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + getOuterType().hashCode();
result = prime * result + curBit;
result = prime * result + curState;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Trigger other = (Trigger) obj;
if (!getOuterType().equals(other.getOuterType()))
return false;
if (curBit != other.curBit)
return false;
if (curState != other.curState)
return false;
return true;
}
private TuringMachine getOuterType() {
return TuringMachine.this;
}
public Trigger(int x, char y){
curState = x;
curBit = y;
}
@Override
public String toString(){
return "|" + curState + ", " + curBit + "|";
}
}
例如,如果我执行addTransition(0,'1',0,'1',1)
,它将打印出{(0,49)=(0,1,1)}
编辑:因此,对于上面的一个,它将按预期打印出(0,1)=(0,1,1)
但是,如果我在添加上一个0,1,0,1,1,1
之后添加了转换(0,0,1,1)
它给了我:
{0,1 |=(0,1,1),|1,0 |=(1,0,1)}
您正在将字符
传递到一个构造函数中,该构造函数接受int
,并隐式转换
'1'
的字符代码是49
您正在将char
传递到一个构造函数中,该构造函数接受int
并隐式转换
'1'
的字符代码是49
是什么使它认为它与HashMap有关?在你责怪HashMap之前,你有没有试着直接打印出你的触发器
和操作
?是什么让它认为它与HashMap有关?在你责怪HashMap之前,你有没有试着直接打印出你的触发器
和操作
?只适用于第一次添加转换,如果我做另一次添加转换,它会再次出错这是另一个问题,这次是触发器=新触发器(newState,newBit)
你可能应该通过curState
和curBit
。是的,我甚至没有注意到。现在可以用了,谢谢。我的大脑只在第一次添加转换时工作,如果我再做一次添加转换,它会再次出错这是另一个问题,这次是Trigger Trigger=new Trigger(newState,newBit)
你可能应该通过curState
和curBit
。是的,我甚至没有注意到。现在可以用了,谢谢。我的脑子死了