0

I'm a beginner with java, and I have written this code. When I attempt to run it, it keeps displaying errors like:

  • error: incompatible types: possible lossy conversion from double to int
  • error: cannot find symbol

Could someone explain how I might un-bug this as a beginner.

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

Thank you so much!

Ismael Padilla
  • 5,246
  • 4
  • 23
  • 35
  • 3
    Hey! Do you understand what those errors are telling you and why? Have you done any research on the errors? Those are very trivial errors, trust me, you can solve them yourself if you put a little effort into research and debugging. – akuzminykh Jun 29 '20 at 01:51
  • Please research about typecasting. you can do it yourself – N.Neupane Jun 29 '20 at 01:59

1 Answers1

1

These compilation errors occur on specific nodes in your code; your editor will highlight these with a red wavy underline. If you don't have a smart editor, strongly consider getting one (I recommend Eclipse or Intellij); but even then, javac will print the relevant line and then a line with ^ symbols to point at the exact part of the line.

That's where the problem lies. Then just.. read the error, apply it to the node that the error is pointing at.

For example, incompatible types: possible lossy conversion from double to int means just what it says: You're taking a value of type double, and trying to assign it to an int, and this might lead to lost info.

An int is a whole number between about minus and plus 2 billion. A double has a fractional part. So, if Cost is 3, then 3 * 1.15 is 3.45, and.. now what? TotalCost can't be 3.45 (it is an int; it can only be 3 or 4).

You can fix this by telling the compiler what you want it to do. For example, int TotalCost = (int) (Cost * 1.15); is asking the compiler: Please convert this double to an int explicitly, and the java language specification then states that this particular strategy will lop off the decimal bits (so, round down if positive, up if negative).

The next error concerns 'Cannot find symbol'. You're using a symbol (that'd be an identifier or some other word that refers to something else in your code) and the compiler has no idea what you're talking about.

For example, CeilingArea in int PaintCost = CeilingArea * 1.13 is not a known symbol there. Seems weird, right? CeilingArea is right there in your code, about 6 lines up. But, the error isn't lying to you, so you'd do some research, or just think about it for a second.

In java, a variable does not exist outside the nearest brackets (the {}). The bracket that closes the if (x == 2) block also means the CeilingArea variable you declared inside it ceases to exist. This is logical; what if 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` to exist outside of the nearest brackets makes inherent sense.

To fix that, well, your code isn't clear, so you need to think about what this means. if you want CeilingArea to survive outside the brackets, declare it outside of them (the way you did with the Money variable), for example.

Debugger refers to code that compiles fine but doesn't do what you expected it to. Fixing compiler errors isn't 'debugging'. Hence, tools to debug (such as debuggers) don't apply. There is no easy fix; learn java so that you understand the compiler errors. Which takes some weeks / months / years, at least, it did for me :)

rzwitserloot
  • 85,357
  • 5
  • 51
  • 72