当前位置: 首页 > 知识库问答 >
问题:

调试错误:不兼容的类型:从double到int[duplicate]可能有损转换

扈沛
2023-03-14

我是Java的初学者,我已经编写了这段代码。当我尝试运行它时,它不断显示错误,例如:

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

有人能解释一下我作为一个初学者应该如何解决这个问题吗。

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;
        }
            
        }
        
    }

太谢谢你了!

共有1个答案

尉迟轶
2023-03-14

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

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

例如,不兼容的类型:从double到int的可能有损转换的含义如下:您正在获取一个double,这可能会导致信息丢失。

int 是大约负和正 20 亿之间的整数。双精度有一个小数部分。因此,如果成本为 3,则 3 * 1.15 为 3.45,并且..现在怎么办?总成本不能为 3.45(它是一个整数;它只能是 3 或 4)。

您可以通过告诉编译器您希望它做什么来解决此问题。例如,int TotalCost = (int) (Cost * 1.15); 是问编译器: 请明确地将此双精度转换为 int,然后 java 语言规范声明此特定策略将删除小数位(因此,如果为正,则向下舍入,如果为负,则向上舍入)。

下一个错误涉及“找不到符号”。您正在使用一个符号(即标识符或引用代码中其他内容的某个其他单词),而编译器不知道您在说什么。

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

在java中,变量不存在于最近的括号({})之外。关闭if(x==2)块的括号也意味着您在其中声明的Ceiling领域变量不再存在。这是合乎逻辑的;如果x不是2呢?事实上,如果编译了代码,奇怪的事情会发生:Ceiling领域甚至会是什么?不是12*7; x不是2,该行没有运行。因此,java不允许CeilingLine'存在于最近的括号之外的想法是有内在意义的。

为了解决这个问题,嗯,你的代码不清楚,所以你需要考虑这意味着什么。例如,如果你想让Ceiling面积在括号之外生存,请在括号之外声明它(就像你对Money变量所做的那样)。

调试器是指编译良好但未按预期方式执行的操作的代码。修复编译器错误不是“调试”。因此,调试工具(如调试器)不适用。没有简单的解决办法;学习 Java,以便了解编译器错误。这至少需要几周/几个月/几年的时间,它对我来说确实:)

 类似资料: