Home > Net >  how do i make the user input a double?
how do i make the user input a double?

Time:07-09

can somebody correct me what i did wrong here? my goal was for the user to input a number on the parameter System.out.print("Available Amount Before Upgrade:" df.format(availAmount1)); double upgradeAccessories= sc.nextDouble(); but i can't seem to see the issue

public static void main(String[] args) 
{
    DecimalFormat df = new DecimalFormat("#####");
    Scanner sc = new Scanner(System.in);
    
    double availAmount;
    
    Car owner = new Car();
    
    owner.owner("Marcus Laurence", 2014);
    
    double availAmount1=owner.upgradeAccessories(availAmount);
    double remainAmount=owner.upgradeAccessories(availAmount);
    
    System.out.println("Owner:"   owner.name);
    System.out.println("Model:"   owner.model);
    System.out.print("Available Amount Before Upgrade:"   df.format(availAmount1));
    double upgradeAccessories= sc.nextDouble();
    System.out.println("Installed AC:"   owner.hasAC);
    System.out.println("Installed Leather Seats:"   owner.hasLeatherSeats);
    System.out.println("Installed Back Wipers:"  owner.hasBackWipers);
    System.out.println("Installed Fog Lights:"   owner.hasFogLights);
    System.out.println("Amount Remaining After Upgrade:"   df.format(remainAmount));
}

public double upgradeAccessories(double availAmount) 
{          

        if(availAmount == 25000)
        {
            availAmount -= 21500;
            hasAC=true;
        }
        
        else if(availAmount == 40000) 
        {
            availAmount -= 21500;
            availAmount -= 14400;
            hasAC=true;
            hasLeatherSeats=true;
        }
        else if(availAmount == 50500) 
        {
            availAmount -=21500;
            availAmount -=14400;
            availAmount -=6250;
            availAmount -=3300;
            hasAC=true;
            hasLeatherSeats=true;
            hasBackWipers=true;
            hasFogLights=true;
        }
        return availAmount;
    }   

CodePudding user response:

how do i make the user input a double?

You did this part fine - scanner.nextDouble() is all it takes. Here's a really simple standalone example, including output:

System.out.print("enter a double: " );
Scanner sc = new Scanner(System.in);
double d = sc.nextDouble();
System.out.println("d: "   d);

enter a double: 123.456
d: 123.456

So reading a double is not the issue. However, this line is suspicious:

double upgradeAccessories = sc.nextDouble();

Why? A few reasons..

  • It defines a new variable "upgradeAccessories" which is not used anywhere else – so it's reading a value (from sc.nextDouble()) and then doing nothing with it. This is something that an IDE (such as IntelliJ or Eclipse) will help you see – it will draw attention to unused code, like declaring a value that is never used.
  • The name of the variable – "upgradeAccessories" – is the same as the method name defined elsewhere in your code, namely:
    public double upgradeAccessories(double availAmount) 
    

So to fix your code, it seems that you probably want to replace this:

double upgradeAccessories = sc.nextDouble();

with something like this:

double next = sc.nextDouble();
owner.upgradeAccessories(next);

Also, the way you're comparing doubles is dangerous. Generally, fractional numbers are never exactly equal. Instead, of doing comparisons like this:

if (availAmount == 25000) { ... }

It's better to do something like greater-than-or-equal:

if (availAmount >= 25000) { ... }

Or if you're using only whole-number values, use integer instead of double, and then direct x == y comparisons will work fine.

CodePudding user response:

In this segment of your code...

double availAmount;
    
Car owner = new Car();
    
owner.owner("Marcus Laurence", 2014);
    
double availAmount1=owner.upgradeAccessories(availAmount);

... you passed the "availAmount" in to a function as a parameter. You haven't given that variable any value yet. You just declared it. If you assign a default value to it like 0.0, does it work?

  • Related