有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

CodeHS战列舰Java

我目前正在做在线编码学习编码和战舰问题。在这个问题中,在代码中给出了方法和它们接受的参数

我遇到一个问题,用户输入一行和一列,代码验证是否输入了一行和一列

// Has the location been initialized
public boolean isLocationSet()
{
    if(row == null  && col == null)
    {
        return false;
    }

    return true;
}

我得到的错误是:不可比较类型int和(它截断了,但我假设它表示null或boolean)

如果预期的int rowcolumn为空,那么我怎么能说返回false,否则返回true


共 (2) 个答案

  1. # 1 楼答案

    int不能是null。许多其他基本类型也不能。相应地调整您的条件:

    private int row = 0;
    private int col = 0;
    
    // Has the location been initialized
    public boolean isLocationSet()
    {
        if(row <= 0 || col <= 0)
        {
            return false;
        }
    
        return true;
    }
    

    我还将使用OR运算符而不是AND。假设您的rowcol变量被初始化为0。因此,例如,如果row=1但是col=0,那么这个isLocationSet()方法将返回false,这是预期的,因为其中一个位置变量rowcol尚未设置

    如果要检查空值,可以使用Integer

    private Integer row = null;
    private Integer col = null;
    
    // Has the location been initialized
    public boolean isLocationSet()
    {
        if(row == null || col == null)
        {
            return false;
        }
    
        return true;
    }
    
  2. # 2 楼答案

    冲突是由于Java中的the difference between primitive types and reference types引起的。Java有一些内置类型(intbooleanfloatchar,等等),这些类型永远不能null,也永远不能从中继承。看起来您正在尝试将introw)与null进行比较。这是一个错误,因为int永远不能是null

    您可能希望改用Integer,它是一种引用类型,可以自动转换为int