【问题标题】:(Beginner) unexpected type error(初学者)意外的类型错误
【发布时间】:2015-07-20 18:25:13
【问题描述】:

我的代码有什么问题?错误是“unexpected type”。if (year % 4.0 = 2.0)部分,错误信息是

assignment4part2.java:18: error: unexpected type
               if (year / 4.0 = 0.0)
                    ^
  required: variable
  found:    value

代码如下:

import java.util.Scanner;

public class assignment4part2 {

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        System.out.println("Enter a number of a month");
        double month = input.nextDouble();
        System.out.println("Enter a year");
        double year = input.nextDouble();
        if (month == 1.0) {
           System.out.println("January " + year + " had 31 days.");
        } else if (month == 2.0) {
           if (year % 4.0 = 0.0) {
               System.out.println("February " + year + "had 29 days.");
           } else {
               System.out.println("February " + year + "had 28 days.");
           }
        } else if (month == 3.0) {
            System.out.println("March");
        }
    }
}

【问题讨论】:

  • 另外,仅供参考。闰年发生在以下条件if (((month % 4 == 0) && (month % 100 != 0)) || (month % 400 == 0)){

标签: java loops


【解决方案1】:

正如@Maxime 所说,您需要== 而不是=。 这是因为编译器在 if 语句中需要一个布尔值,而 = 运算符返回其右侧的值。 (在本例中为双精度)。

还有一些与您的代码相关的 cmets,但不是问题:

  1. == 与双精度类型一起使用时要小心。通常,在处理浮点数时使用EPSILON 而不是检查相等性被认为是更好的做法:

    if (year % 4.0 == 0.0)

    应该是:

    if (Math.abs(year % 4.0 - 0.0) < EPSILON ),其中EPSILON 是一个非常小的双精度值,它指定year % 4.00.0 的距离。在这种情况下,减去0.0 显然是多余的,但在示例中使用它有助于说明模板。

  2. % 运算符与浮点数一起使用可能会由于舍入错误和浮点数的存储方式而产生意想不到的结果。如果您需要 % 运算符,请考虑改用某种类型的整数。从您发布的代码来看,使用intlong 而不是double 似乎完全适合您。 (你可以阅读更多关于双打和%here)。

  3. 您似乎在一个接一个地使用多个if else 语句。有一个专门针对您要实现的控制流类型的构造,称为switch 语句。 (您可以阅读更多关于switch 声明here 的信息)。同样,使用带有浮点变量的 switch 语句要小心。

  4. 最后,如果你用你使用的语言标记你的问题,它将来帮助人们提供更好的答案。 (在本例中为 Java)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-17
    相关资源
    最近更新 更多