mvanderk10 mvanderk10 - 7 months ago 9
Java Question

Scanner cannot be used when declared, sc cannot be resolved

The only problem I'm having with my program is the scanner, I've used it many times but in this program it won't run right. The error is in the public static double getCandlecost() and the public static int getShippingType() methods. under the int shippingType = sc.nextInt(); and the double candleCost = sc.nextDouble(); both say "sc cannot be resolved" and in my main class I did declare it.

import java.util.Scanner;
import java.text.DecimalFormat;

public class Candel {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

double candleCost, shippingCost;
int shippingType;

candleCost = getCandlecost();
shippingType = getShippingType();
shippingCost = getShippingCost(candleCost, shippingType);
output(candleCost, shippingCost);


}

public static double getCandlecost()
{
boolean done = false;
do{
try
{
System.out.print("Enter the cost of the candle order ");
double candleCost = sc.nextDouble();
done = true;
return candleCost;
} catch (InputMismatchException e)
{
System.out.println("Error, Enter a dollar amount greater than 0");

}
} while (!done);
return 0;
}

public static int getShippingType()
{
System.out.println("Enter the type of shipping: ");
System.out.println("1> Priority <overnight>");
System.out.println("2> Express <2 business days>");
System.out.println("3> Standard <3 to 7 business days>");
System.out.println("Enter type number: ");
int shippingType = sc.nextInt();
if(shippingType == 1){}
else if(shippingType == 2){}
else if(shippingType == 3){}
return shippingType;

}
public static double getShippingCost(double candleCost, int shippingType)
{

switch(shippingType)
{
case 1:
candleCost = 16.95 + candleCost;
break;
case 2:
candleCost = 13.95 + candleCost;
break;
case 3:
if (candleCost > 100.00){
candleCost = candleCost;
}
else{
candleCost = 7.95 + candleCost;
}
break;
}
return candleCost;
}



public static void output(double candleCost, double shippingCost)
{
DecimalFormat twoDigits = new DecimalFormat("$#,000.00");
System.out.println("The candle cost of " + twoDigits.format(candleCost) + " with shipping costs of "
+ shippingCost + " equals " + twoDigits.format(candleCost + shippingCost));

}

}

Answer

Your scanner is out of scope. Since you have declared it in the main() method, only that method can access it. Your scanner needs to be static as well. Write it like this instead:

public  class Candel {
    static Scanner sc = new Scanner(System.in);

    public static void main(String[] args) {
        ...
    }
    ...
}
Comments