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 如何将布尔返回值调用到其他方法中? 类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

我正在制作一个缓存模拟器,但我认为我的numHits()不起作用,因为我调用值的方式是错误的

问题不在于调用
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; 
}