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

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

周良弼
2023-03-14
    null

谁能解释一下作为一个初学者我该如何消除这个错误。

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也会打印相关行,然后打印带有^符号的行,以指向该行的确切部分。

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

例如,incompatible types:from double to int可能有损的转换表示的就是它所说的:您正在获取double类型的值,并试图将其赋给int,这可能会导致丢失信息。

您可以通过告诉编译器您希望它做什么来修复这个问题。例如,int TotalCost=(int)(Cost*1.15);询问编译器:请将这个double显式转换为int,然后java语言规范声明这个特定策略将取消十进制位(因此,如果为正,则向下舍入,如果为负,则向上舍入)。

下一个错误涉及“找不到符号”。您正在使用一个符号(这可能是一个标识符或在html" target="_blank">代码中引用其他东西的其他单词),而编译器不知道您在说什么。

例如,int PaintCost=CeilingArea*1.13中的CeilingArea在那里不是已知的符号。好像很奇怪,对吧?ceilingarea就在您的代码中,大约有6行。但是,错误并不是对你撒谎,所以你应该做一些研究,或者只是考虑一下。

在java中,变量不存在于最近的括号({})之外。关闭if(x==2)块的括号也意味着您在其中声明的ceilingarea变量不再存在。这是合乎逻辑的;如果X不是2呢?事实上,如果编译了代码,那么奇怪的事情就会发生:ceilingarea到底是什么?不12*7;x不是2,那条线没有运行。因此,java不允许ceilingarea`在最近的括号之外存在的想法是有道理的。

为了解决这个问题,您的代码不清楚,所以您需要考虑这意味着什么。如果希望ceilingarea在括号之外生存,请在括号之外声明它(例如,使用money变量的方法)。

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

 类似资料: