You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java比较方法返回值报cannot invoke equals(void)错误如何解决

报错根因

你触发cannot invoke equals(void) on primitive type void报错的核心原因和你推测的作用域问题无关:

  • 你定义的userInput()、compInput()两个方法的返回值类型为void,代表方法执行后不会返回任何结果,自然无法对无返回值的方法调用equals()做内容比较。

除此之外你的代码还存在以下影响运行的问题:

  • compInput()方法内V system="rock";行存在冗余字符V,属于语法错误
  • Random.nextInt(3)生成的随机数范围是0、1、2,你当前判断分支仅覆盖1、2、3,会出现system变量未赋值的问题
  • main方法中你先单独调用了一次userInput()、compInput(),if判断中又重复调用了一次,会导致用户需要输入2次、电脑生成2次不同的随机结果,不符合游戏逻辑
修复后完整代码
package rockpaper;

import java.util.Random;
import java.util.Scanner;

public class Game {
    // 定义全局常量避免重复写魔法值
    private static final String ROCK = "r";
    private static final String PAPER = "p";
    private static final String SCISSORS = "s";

    public static void main(String[] args) {
        // 调用方法拿到结果存在变量中,仅调用一次
        String userMove = userInput();
        String compMove = compInput();

        if(userMove.equals(compMove)){
            System.out.println("平局");
        } else if(
                (userMove.equals(ROCK) && compMove.equals(SCISSORS))
                || (userMove.equals(PAPER) && compMove.equals(ROCK))
                || (userMove.equals(SCISSORS) && compMove.equals(PAPER))
        ){
            System.out.println("你赢了");
        } else {
            System.out.println("你输了");
        }
    }

    // 返回值从void改成String,返回用户输入的选择
    public static String userInput(){
        Scanner put = new Scanner(System.in);
        System.out.println("enter your move....");
        String user = put.nextLine();
        // 可自行扩展非法输入校验逻辑
        switch (user) {
            case ROCK: System.out.println("your move is rock"); break;
            case PAPER: System.out.println("your move is paper"); break;
            case SCISSORS: System.out.println("your move is scissors"); break;
        }
        return user;
    }

    // 返回值从void改成String,返回电脑生成的选择
    public static String compInput(){
        Random rand = new Random();
        int comp = rand.nextInt(3);
        String system = "";
        // 修正随机数判断范围
        switch (comp) {
            case 0: system = ROCK; System.out.println("computer move is rock"); break;
            case 1: system = PAPER; System.out.println("computer move is paper"); break;
            case 2: system = SCISSORS; System.out.println("computer move is scissors"); break;
        }
        return system;
    }
}
核心修改点
  • 调整两个方法的返回值类型为String,方法执行结束后返回对应的选择内容
  • 修正compInput()方法的语法错误和随机数判断逻辑,避免变量未初始化问题
  • main方法中仅调用一次两个方法,将返回结果存入变量后再做比较,符合游戏运行逻辑
  • 补充了胜负判断的基础逻辑,可直接运行测试

内容的提问来源于stack exchange,提问作者Edith Stark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 21:36:03