Java 需要帮助格式化开关方法调用的输出吗

Java 需要帮助格式化开关方法调用的输出吗,java,Java,这是针对我正在学习的一个类,其中我们被指示创建一个具有两个参数(price和state)的方法,然后让用户输入任何价格,该方法将针对它运行,并输出来自多个状态的成本。我为自己找到了让它发挥最大作用的方法而感到自豪。然而,有几个小问题我需要帮助解决 它只有在输入整数时才有效 它超过两个小数位 它显示“case”值,即使我没有要求它 在显示代码之前,下面是一个示例输出。 输入甜甜圈的价格: 5 下面是每个州的费用 KY-5.3 ky OH-5.2875 哦 IN-5.35 在 TN-5.35 t

这是针对我正在学习的一个类,其中我们被指示创建一个具有两个参数(price和state)的方法,然后让用户输入任何价格,该方法将针对它运行,并输出来自多个状态的成本。我为自己找到了让它发挥最大作用的方法而感到自豪。然而,有几个小问题我需要帮助解决

  • 它只有在输入整数时才有效
  • 它超过两个小数位
  • 它显示“case”值,即使我没有要求它
在显示代码之前,下面是一个示例输出。

输入甜甜圈的价格:
5
下面是每个州的费用
KY-5.3
ky
OH-5.2875

IN-5.35

TN-5.35
tn
FL-5.3
fl
WF-5.3
wf

谢谢大家!我综合了你的许多建议,得到了我所需要的。我喜欢这个地方

import java.text.DecimalFormat;
import java.util.Scanner;
public class TaxCalculator {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("Enter price of donut: ");
        double price = input.nextDouble();
        String[] state=new String[6];
        state[0]="ky";
        state[1]="oh";
        state[2]="in";
        state[3]="tn";
        state[4]="fl";
        state[5]="wv";

        System.out.println("Here's how much your donut would cost in each state");
        addTax(price,state[0]);
        addTax(price,state[1]);
        addTax(price,state[2]);
        addTax(price,state[3]);
        addTax(price,state[4]);
        addTax(price,state[5]);
    }


public static String addTax( double price, String state ) {
    String result=("");
    DecimalFormat money=new DecimalFormat("$#,###.00");
    switch (state) {
    case "ky": System.out.println("KY - " + money.format((price*.06)+price));   
        break;
    case "oh": System.out.println("OH - " + money.format((price*.0575)+price));
        break;
    case "in": System.out.println("IN - " + money.format((price*.07)+price));
        break;
    case "tn": System.out.println("TN - " + money.format((price*.07)+price));   
        break;
    case "fl": System.out.println("FL - " + money.format((price*.06)+price));
        break;
    case "wv": System.out.println("WV - " + money.format((price*.06)+price));
        break;
    default: System.out.println("Invalid");
    break;
            }

    return state;

    }
}

对于第1点,您正在调用
input.nextInt()
对于double,您只需调用

input.nextDouble()
如果你想要两位小数,你可以像这样使用十进制格式

DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
System.out.println(df.format(decimalNumber));
您可以通过执行价格*1.06等简化价格计算


addTax方法返回一个字符串,然后返回状态,这就是为什么打印点1的大小写值的原因,您正在调用
input.nextInt()
对于double,您只需调用

input.nextDouble()
如果你想要两位小数,你可以像这样使用十进制格式

DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
System.out.println(df.format(decimalNumber));
您可以通过执行价格*1.06等简化价格计算

addTax方法返回一个字符串,然后返回state,这就是为什么打印case值而不是:

System.out.println(addTax(price,state[0]));
    case "ky": System.out.println("KY - " + ((price*.06)+price));   
            break;
    return state; 
这样做:

System.out.printf("%.1d", addTax(price,state[0]));
     case "ky": String result = "KY - " + ((price*.06)+price);   
                break;
        return result;
或者类似的东西。这也是为什么在返回时打印
state
,并在每次调用时使用两个
System.out.println
。调用
Double.parseDouble
而不是
Integer.parseInt
,您可以输入Double。

而不是:

System.out.println(addTax(price,state[0]));
    case "ky": System.out.println("KY - " + ((price*.06)+price));   
            break;
    return state; 
这样做:

System.out.printf("%.1d", addTax(price,state[0]));
     case "ky": String result = "KY - " + ((price*.06)+price);   
                break;
        return result;
或者类似的东西。这也是为什么在返回时打印
state
,并在每次调用时使用两个
System.out.println
。调用
Double.parseDouble
而不是
Integer.parseInt
,您可以输入Double。

1)修改您的输入,以采用
nextDouble()

2) 在打印语句中使用
String.format
,如下所示:

System.out.println("KY - " + String.format("%.2f", ((price * 0.6) + price)));
3) 调用
addTax
方法时删除
System.out.println
——因为您已经在使用此方法进行打印了

1)修改您的输入以获取
nextDouble()

2) 在打印语句中使用
String.format
,如下所示:

System.out.println("KY - " + String.format("%.2f", ((price * 0.6) + price)));

3) 调用
addTax
方法时删除
System.out.println
——因为您已经在使用此方法进行打印了1)请尝试
double price=input.nextDouble()nextInt()可能会在从输入获取整数值并分配给double时引发inputMissMatchException

2) 您可以使用
DecimalFormat df=new DecimalFormat(“#.##”)
然后
System.out.println(df.format(value))
将双精度值四舍五入到2个小数位


3) 从main方法中删除所有print语句,因为返回值是State,它将打印main中所有print语句的状态值

1)试试
double price=input.nextDouble()nextInt()可能会在从输入获取整数值并分配给double时引发inputMissMatchException

2) 您可以使用
DecimalFormat df=new DecimalFormat(“#.##”)
然后
System.out.println(df.format(value))
将双精度值四舍五入到2个小数位


3) 从main方法中删除所有print语句,因为返回值是State,它将打印main中所有print语句的状态值

干得好,我想建议一种更简洁的写作方法:

  public static void main(String[] args){
  System.out.println("Enter price of donut: ");
  Scanner input = new Scanner(System.in);
  double price = input.nextInt();

  Map<String, Double> multipliers = new LinkedHashMap<>();
  multipliers.put("KY", .06);
  multipliers.put("OH", .0575);
  multipliers.put("IN", .07);
  multipliers.put("TN", .07);
  multipliers.put("FL", .06);
  multipliers.put("WV", .06);

  System.out.println("Here's how much your donut would cost in each state");
  multipliers.forEach((x, y) -> System.out.println(x + " - " + (price + (price * y))));
  }
publicstaticvoidmain(字符串[]args){
System.out.println(“输入油炸圈饼的价格:”);
扫描仪输入=新扫描仪(System.in);
双倍价格=input.nextInt();
映射乘数=新LinkedHashMap();
乘数。put(“KY”,0.06);
乘数。put(“OH”,0.0575);
乘数.put(“IN”,.07);
乘数.put(“TN”,.07);
乘数.put(“FL”,.06);
乘数.put(“WV”,.06);
System.out.println(“以下是您的油炸圈饼在每个州的价格”);
乘法器.forEach((x,y)->System.out.println(x+“-”+(price+(price*y));
}

干得好,我想建议一种更简洁的编写方法:

  public static void main(String[] args){
  System.out.println("Enter price of donut: ");
  Scanner input = new Scanner(System.in);
  double price = input.nextInt();

  Map<String, Double> multipliers = new LinkedHashMap<>();
  multipliers.put("KY", .06);
  multipliers.put("OH", .0575);
  multipliers.put("IN", .07);
  multipliers.put("TN", .07);
  multipliers.put("FL", .06);
  multipliers.put("WV", .06);

  System.out.println("Here's how much your donut would cost in each state");
  multipliers.forEach((x, y) -> System.out.println(x + " - " + (price + (price * y))));
  }
publicstaticvoidmain(字符串[]args){
System.out.println(“输入油炸圈饼的价格:”);
扫描仪输入=新扫描仪(System.in);
双倍价格=input.nextInt();
映射乘数=新LinkedHashMap();
乘数。put(“KY”,0.06);
乘数。put(“OH”,0.0575);
乘数.put(“IN”,.07);
乘数.put(“TN”,.07);
乘数.put(“FL”,.06);
乘数.put(“WV”,.06);
System.out.println(“以下是您的油炸圈饼在每个州的价格”);
乘法器.forEach((x,y)->System.out.println(x+“-”+(price+(price*y));
}

double price=input.nextInt()-->
double price=input.nextDouble()
System.out.println(addTax(价格,状态[0])-->
addTax(价格,状态[0])
double price=input.nextInt()-->
double price=input.nextDouble()
System.out.println(addTax(价格,状态[0])-->
addTax(价格,状态[0])第2点将直接在-%.2f
中打印
,并附上价格。第三点是OP在调用该方法时正在打印,然后又在该方法中打印。@pruntlar找到了您。你说得对。忘记添加格式,是,返回值为状态。不管怎样,它都会把州打印出来。更新它。谢谢,第二点可以