首页 > 解决方案 > If else 循环跳过 if 子句 [if(2 > 1) ] 并直接移动到 else 子句中的死代码。gRPC 实例化

问题描述

编辑:找到了如果循环被更改,代码仍在执行的原因。如果对项目中的其他文件进行了更改,我没有意识到必须重新启动服务器。循环的原始问题仍然存在。我认为原因是以下行,因为我的语法不正确或在此行到达之前错误地分配了变量。

                if(CapacityService.(CapacityService.MaleWC().getPopulation() >= CapacityService.MaleWC().getCapacity())

我正处于 gRPC 项目的最后阶段,我不知道这个 rpc 出了什么问题。我正在使用 Bloom 测试 RPC,它不断地执行最后一个子句并跳过第一个子句。曾认为这是一个 gRPC 问题,但经过大量编辑后,我尝试将循环更改为保证为真,以确保它是可执行的并且它继续跳过它。

编辑:

我相对较新,所以我确信我做出了一些糟糕的设计选择,但我看不到任何灾难性的坏事。项目是用 Maven 创建的,物有所值。

编辑。我试图减少代码以更容易看到任何问题

@SuppressWarnings("static-access")
@Override
    public void mWClock(targetRoom request, StreamObserver<lockStatus> responseObserver) {
    int key = request.getTarget();
    int trigger = 0;
    if (key == 0) {
        do {
            CapacityService.MaleWC().newBuilder()
            .setPopulation(randomInt(5));
            try {
                Thread.sleep(30000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
            }
            //if(2<1)
            if(CapacityService.(CapacityService.MaleWC().getPopulation() >= CapacityService.MaleWC().getCapacity()) {
                CapacityService.MaleWC().newBuilder()
                .setLock(true);
                trigger++;
                //
                String result1 = "Male Bathroom is currently at or over capacity, please wait";
                lockStatus response = lockStatus.newBuilder()
                        .setStatus(result1)
                        .setSpaces(0)
                        .build();
                responseObserver.onNext(response);
                
                
                try {
                    Thread.sleep(30000);Just to delay returns and simulate movement. 
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }catch (OutOfMemoryError e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                CapacityService.MaleWC().newBuilder()
                .setPopulation(randomInt(3));//To reduce it below capacity so the loop continues at while loop
                
            }else {
                //THE CODE THAT EXECUTES
                
                
            }
            //end of do loop
        }while(trigger < 3000);
        responseObserver.onCompleted();
        
        

        
    }else {
        //failure, wrong number entered. TO DO
        responseObserver.onCompleted();
    }

}

MaleWC 对象是来自不同服务原型的消息,在此处导入并在顶部实例化。可能需要注意的是,我无法使用 MWClock 服务将创建 Room 消息的 proto 文件导入到 proto 文件中,但我不知道这是否会影响任何事情。我也不太确定静态访问警告是否会导致问题

@SuppressWarnings("static-access")
@Override
    public static Room MaleWC() {
    return Room.newBuilder()
            .setCapacity(3)
            .setPopulation(0)
            .setLock(false)
            .build();
}

据我所知,服务器肯定在工作。它只是一直跳到 else 子句。任何人都可以解释一下吗?如果需要,可以共享服务的 proto 文件,但我猜 proto 很好,因为它从 else 语句返回正确的内容,除非问题是由前面提到的导入 snaffoo 引起的。

标签: javafor-loopif-statementgrpc

解决方案


推荐阅读