不兼容的类型:使用switch case

时间:2015-10-05 10:42:59

标签: java swing

我是Java语言的初学者,我遇到的问题是“不兼容的类型:从double到int的可能有损转换”。我该怎么做才能解决这个问题?我完全失去了它。

import javax.swing.*;
import java.text.*;

public class CalculateIncome{

    public static void main(String[]args){

        String s1, outMessage;
        double monthlySales, income;

        DecimalFormat num = new DecimalFormat(",###.00");

        s1 = JOptionPane.showInputDialog("Enter the value of monthly sales:");
        monthlySales = Double.parseDouble(s1);

        switch(monthlySales) {
        case 1:
            income = 200.00+0.03*monthlySales;
            break;
        case 2:
            income = 250.00+0.05*monthlySales;
            break;
        case 3:
            income = 300.00+0.09*monthlySales;
            break;
        case 4:
            income = 325.00+0.12*monthlySales;
            break;
        case 5:
            income = 350.00+0.14*monthlySales;
            break;
        case 6:
            income = 375.00+0.15*monthlySales;
        default:
            outMessage = ("For the monthly sales of $" +num.format(monthlySales)+ "\nThe income is"+num.format(income));
        }  
            JOptionPane.showMessageDialog(null,outMessage,"QuickTest Program 5.5b", JOptionPane.INFORMATION_MESSAGE);

            System.exit(0);
    }

        }

2 个答案:

答案 0 :(得分:1)

基本上这个switch语句会导致问题:

switch(monthlySales){
    case 1:
        ...

它将monthlySalesdouble转换为int。由于double是64位浮点数,而int是32位整数,因此从doubleint的转换很可能不是无损的。

int使用monthlySales,这是我建议的解决方案,因为您可以简单地将单位从美元更改为分,或者您计算的任何货币。
另一个选择是添加一个演员:switch((int) monthlySales){(不推荐,由于错误警告你的信息丢失相同 - 小部分将简单地从值中删除,而double可以保持更大和更小的方式值比int) 最后但并非最不重要:用switch替换if-else - 语句,并与双倍if(monthlySales == 1.0)...进行比较。

答案 1 :(得分:1)

在Java语言中,switch表达式允许int数据类型。 在提供其他数据类型时,将尝试自动将值提升为int。由于您提供的类型为double,因此它会被转换为int,因此会发出警告。

    double monthlySales, income;

    switch(monthlySales) {

每月销售参数将是一个整数,除非正在捕获金额或类似数量。我建议

    int monthlySalesInt = 0;
    try {
        int monthlySalesInt = Integer.parseInt(monthlySales);
    }catch(NumberFormatException e) {
        //exception handling - either wrap and rethrow, or warn using JDialog.
    }
    switch(monthlySalesInt) {
    ...