【问题标题】:how can an int method return charint 方法如何返回 char
【发布时间】:2019-11-22 17:54:08
【问题描述】:

我有一个带有 int 签名的方法,但编译器提示我返回 char 类型的 c。

1/ 这种情况下怎么可能返回char变量

//剪刀、纸、石头在游戏逻辑类中是静态final

public int getInput(){  
    String choice;
    char c;
    do {
        System.out.println("Make a choice");
        choice  = sc.nextLine().toUpperCase();
        c = choice.charAt(0);

        if(c == 'P'){
            return gameLogic.paper;
        }else if(c == 'R'){
            return gameLogic.rock;
        }else if(c== 'S'){
            return gameLogic.scissor;
        }
    }while(c != 'S' && c != 'R' && c != 'P');
    return c;
}

【问题讨论】:

  • 这点不一样!
  • 不相关: 您的 while 语句将始终为 true(因为只有在未选择 P、R 和 S 时才会到达它)。也许您的意思是将return c; 作为if 语句的最后一个else
  • Unrelated 1: Java 命名约定是类名以大写字母开头,常量(static final 字段)全部大写,所以你的代码应该是return GameLogic.PAPER;。 --- Unrelated 2: 这是一个很好的代码示例,应该使用enum。您应该有一个HandShape 枚举类型,其中ROCKPAPERSCISSOR 作为枚举值,并且您的方法返回类型应该是HandShape,使用null 作为最后的return 语句,或者返回类型应为Optional<HandShape>,使用Optional.empty() 作为最后的return 语句。
  • @Zephyr 请注意你的术语。它是字符集的字符code,或者可能是index。它肯定不是指针,因为该术语有其他含义。

标签: java function methods types return


【解决方案1】:

return c; 更改为return Character.getNumericValue(c);

public int getInput(){  
    String choice;
    char c;
    do {
        System.out.println("Make a choice");
        choice  = sc.nextLine().toUpperCase();
        c = choice.charAt(0);

        if(c == 'P'){
            return gameLogic.paper;
        }else if(c == 'R'){
            return gameLogic.rock;
        }else if(c== 'S'){
            return gameLogic.scissor;
        }
    }while(c != 'S' && c != 'R' && c != 'P');
    return Character.getNumericValue(c);
}

【讨论】:

    【解决方案2】:

    你可以返回char值,它会被java自动转换为int。编译器会指示在最后返回一个值,因为所有返回都基于条件

    【讨论】:

      【解决方案3】:

      char 实际上只是一个无符号的 16 位整数。 int 是一个 32 位整数。因此,每个char 值都将适合int,而不会丢失信息。

      这称为加宽原语转换。来自the Java Language Specification

      char 到整数类型 T 的扩展转换零扩展了 char 值的表示以填充更宽的格式。

      在您的情况下,“整体类型 T”是 int

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多