【问题标题】:Debugging error: incompatible types: possible lossy conversion from double to int调试错误:不兼容的类型:从 double 到 int 的可能有损转换
【发布时间】:2020-10-19 03:21:13
【问题描述】:

我是 java 初学者,我已经编写了这段代码。当我尝试运行它时,它一直显示如下错误:

  • 错误:不兼容的类型:从 double 到 int 的可能有损转换
  • 错误:找不到符号

有人可以解释一下我作为初学者如何解决这个问题。

public class JavaJoeWeek{

    public static void main (String[] args){

        int x = 1;
        int Money = 200;
        int Twenty, Ten, Toonie, Loonie, Quarter, Dime, Nickel = 0; 
        while (x < 8){
            System.out.println("Today is day " + x + " of the week");
        if (x == 1) {
            int Cost = 30;
            int TotalCost = Cost * 1.15;
            System.out.println("The cost of the shoes is $" + TotalCost);
            Money = Money - TotalCost;
            System.out.println("The remaining budget is $" + Money );
        }
        else{
            System.out.println();
        }
        if (x == 2) {
            int CeilingArea = 12 * 7;
            System.out.println("The area of the celing is " + CeilingArea + " square meters");
            System.out.println("The remaining budget is $" + Money );
        }
        else{
            System.out.println();
        }
        if (x == 3) {
            int PaintCost = CeilingArea * 1.13;
            System.out.println("The paint cost $" + PaintCost);
            Money = Money - PaintCost;
            System.out.println("The remaining budget is $" + Money );
        }
        else{
            System.out.println();
        }
        if (x == 4) {
            int Gas = 36.40 / 0.45;
            System.out.println("Java Joe filled up his tank with " + Gas + " liters of gas");
            Money = Money - Gas;
            System.out.println("The remaining budget is $" + Money );
        }
        else{
            System.out.println();
        }
        if (x == 5) {
            System.out.println("The remaining budget is $" + Money );
        }
        else{
            System.out.println();
        }
        if (x == 6) {
            Money = Money - 23;
            System.out.println("The remaining budget is $" + Money );
        }
        else{
            System.out.println();
        }
        if (x == 7) {
            if (Money > 20) {
                Money = Money - 20;
                Twenty =  Twenty + 1;
            }
            else{
                System.out.println("Java Joe has " + Twenty + " twenty dollar bills");
            }
            if (Money > 10) {
                Money = Money - 10;
                Ten =  Ten + 1;
            }
            else{
                System.out.println("Java Joe has " + Ten + " ten dollar bills");
            }   
            if (Money > 2) {
                Money = Money - 2;
                Toonie =  Toonie + 1;
            }
            else{
                System.out.println("Java Joe has " + Toonie + " toonies");
            }
            if (Money > 20) {
                Money = Money - 20;
                Loonie =  Loonie + 1;
            }
            else{
                System.out.println("Java Joe has " + Loonie + " loonies");
            }
            if (Money > 0.25) {
                Money = Money - 0.25;
                Quarter =  Quarter + 1;
            }
            else{
                System.out.println("Java Joe has " + Quarter + " quarters");
            }
            if (Money > 0.1) {
                Money = Money - 0.1;
                Dime =  Dime + 1;
            }
            else{
                System.out.println("Java Joe has " + Dime + " dimes");
            }
            if (Money > 0.05) {
                Money = Money - 0.05;
                Nickel =  Nickel + 1;
            }
            else{
                System.out.println("Java Joe has " + Nickel + " nickels");
            }
                System.out.println("There is $" + Money + " left after the change" );
        }
        else{
                System.out.println();
        }
        x = x + 1;
        }
            
        }
        
    }

非常感谢!

【问题讨论】:

  • 嘿!你明白这些错误告诉你什么吗?为什么?您是否对错误进行过任何研究?这些都是非常微不足道的错误,相信我,只要你花一点精力研究和调试,你就可以自己解决它们。
  • 请研究一下类型转换。你可以自己做

标签: java debugging


【解决方案1】:

这些编译错误发生在代码中的特定节点上;您的编辑器将使用红色波浪下划线突出显示这些内容。如果您没有智能编辑器,强烈考虑购买一个(我推荐 Eclipse 或 Intellij);但即便如此,javac 也会打印相关行,然后打印一行带有^ 符号的行,以指向该行的确切部分。

这就是问题所在。然后只需..读取错误,将其应用于错误指向的节点。

例如,incompatible types: possible lossy conversion from double to int 的意思就是它所说的:您正在获取一个 double 类型的值,并尝试将其分配给 int,这可能会导致信息丢失。

int 是一个介于负数和正数 20 亿之间的整数。 double 有一个小数部分。所以,如果 Cost 是 3,那么 3 * 1.153.45,然后......现在呢? TotalCost 不能是 3.45(它是一个 int;它只能是 3 或 4)。

你可以通过告诉编译器你想让它做什么来解决这个问题。例如,int TotalCost = (int) (Cost * 1.15); 要求编译器:请将此 double 显式转换为 int,然后 java 语言规范声明此特定策略将删除小数位(因此,如果为正则向下舍入,如果为负则向上舍入)。

下一个错误与“找不到符号”有关。您正在使用一个符号(这将是一个标识符或其他一些在您的代码中引用其他内容的词)并且编译器不知道您在说什么。

例如,int PaintCost = CeilingArea * 1.13 中的CeilingArea 不是那里的已知符号。看起来很奇怪,对吧? CeilingArea 就在您的代码中,大约有 6 行。但是,这个错误并没有骗你,所以你应该做一些研究,或者只是想一想。

在 java 中,变量不存在于最近的括号({})之外。关闭if (x == 2) 块的括号也意味着您在其中声明的CeilingArea 变量不再存在。这是合乎逻辑的;如果x wasn't 2? In fact, had the code compiled, weird stuff would happen: What would CeilingAreaeven be? Not12 * 7; x wasn't 2, that line did not run. So, the idea that java doesn't allow CeilingArea` 存在于最近的括号之外会怎样?

要解决这个问题,好吧,您的代码并不清晰,因此您需要考虑一下这意味着什么。例如,如果您希望 CeilingArea 在括号外保留,请在括号外声明它(就像您对 Money 变量所做的那样)。

调试器是指编译良好但没有达到预期效果的代码。修复编译器错误不是“调试”。因此,调试工具(例如调试器)不适用。没有简单的解决方法;学习java,以便您了解编译器错误。至少需要几周/几个月/几年的时间,这对我来说是这样的:)

【讨论】:

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