Java 如何将布尔返回值调用到其他方法中? 类DirectMappedCache扩展缓存{ private int logLineSize;//每个缓存线的字节数的log2 private int logNumLines;//缓存线数的log2 私有树映射tmap; 公共DirectMappedCache(int logLineSize,int logNumLines){ //采用不同字段长度的构造函数 this.logLineSize=logLineSize; this.logNumLines=logNumLines; tmap=新树映射(); } 公共布尔读取(字符串地址){ System.out.println(“从地址读取”+addr+“:”); String tag=addr.substring(0,9); 字符串slotnumber=addr.substring(9,13); 字符串偏移量=地址子字符串(13,16); if(tmap.containsKey(slotnumber)){ CacheSlot temp=tmap.get(slotnumber); 如果(临时有效){ 如果(tag.equals(temp.tag)){ 返回true; } } } CacheSlot put=新的CacheSlot(); put.valid=true; put.tag=标签; tmap.put(slotnumber,put); 返回false; } public int numHits(){ int-HitCounter=0; if(read(addr)){ 返回计数器++; } 返回0; } }
我正在制作一个缓存模拟器,但我认为我的numHits()不起作用,因为我调用值的方式是错误的 问题不在于调用Java 如何将布尔返回值调用到其他方法中? 类DirectMappedCache扩展缓存{ private int logLineSize;//每个缓存线的字节数的log2 private int logNumLines;//缓存线数的log2 私有树映射tmap; 公共DirectMappedCache(int logLineSize,int logNumLines){ //采用不同字段长度的构造函数 this.logLineSize=logLineSize; this.logNumLines=logNumLines; tmap=新树映射(); } 公共布尔读取(字符串地址){ System.out.println(“从地址读取”+addr+“:”); String tag=addr.substring(0,9); 字符串slotnumber=addr.substring(9,13); 字符串偏移量=地址子字符串(13,16); if(tmap.containsKey(slotnumber)){ CacheSlot temp=tmap.get(slotnumber); 如果(临时有效){ 如果(tag.equals(temp.tag)){ 返回true; } } } CacheSlot put=新的CacheSlot(); put.valid=true; put.tag=标签; tmap.put(slotnumber,put); 返回false; } public int numHits(){ int-HitCounter=0; if(read(addr)){ 返回计数器++; } 返回0; } },java,caching,boolean,return-value,Java,Caching,Boolean,Return Value,我正在制作一个缓存模拟器,但我认为我的numHits()不起作用,因为我调用值的方式是错误的 问题不在于调用read()方法的方式。您的numHits()方法总是返回0,因为您返回的是一个局部变量的值,它总是初始化为0 numHits()只有在HitCounter成为实例变量时才有意义: class DirectMappedCache extends Cache { private int logLineSize; //log_2 of the number of bytes p
read()
方法的方式。您的numHits()
方法总是返回0,因为您返回的是一个局部变量的值,它总是初始化为0
numHits()
只有在HitCounter
成为实例变量时才有意义:
class DirectMappedCache extends Cache {
private int logLineSize; //log_2 of the number of bytes per cache line
private int logNumLines; //log_2 of the number of cache lines
private TreeMap<String, CacheSlot> tmap;
public DirectMappedCache(int logLineSize, int logNumLines) {
//constructor that takes lengths of different fields
this.logLineSize = logLineSize;
this.logNumLines = logNumLines;
tmap = new TreeMap<String, CacheSlot>();
}
public boolean read(String addr) {
System.out.println("Read from address " + addr + ": ");
String tag = addr.substring(0,9);
String slotnumber = addr.substring(9,13);
String offset = addr.substring(13,16);
if(tmap.containsKey(slotnumber)){
CacheSlot temp = tmap.get(slotnumber);
if(temp.valid){
if(tag.equals(temp.tag)){
return true;
}
}
}
CacheSlot put = new CacheSlot();
put.valid = true;
put.tag = tag;
tmap.put(slotnumber, put);
return false;
}
public int numHits(){
int HitCounter = 0;
if(read(addr)){
return HitCounter++;
}
return 0;
}
}
我还将return HitCounter++
更改为return++HitCounter
,因为后增量运算符(return HitCounter++
)将返回HitCounter
的旧值,而不是增量值
编辑:另一个问题是传递给
read
的变量没有在任何地方声明。您应该决定要传递给该方法的内容。真的吗?我想它在read()中的某个地方,因为它一直给我这个错误。这一行的多个标记-字符串不能解析为变量-标记“addr”上的语法错误,删除这个标记它一直给我这个错误:“addr不能解析为变量”。那么问题出在哪里?在标题中,您提到了从某个方法返回的布尔值,而您正在讨论numHits()
方法。。。。确切的问题是什么?什么东西没有像你期望的那样工作?如果有任何错误,是什么类型的错误,什么时候会出现这个错误?问题在于numHits()方法中,我需要发送一个参数进行读取。但它给了我一些错误,比如“addr无法解析为变量”。我只需要检查read的返回值。例如:如果read返回true,则HitCounter应该递增,否则它应该只返回0。请参阅Eran的答案(和编辑)以解决该问题
private int HitCounter = 0;
public int numHits(){
if(read(addr)){ // you should replace addr with some variable that you actually declare
return ++HitCounter;
}
return 0;
}