为此使用Java中的方法

时间:2015-10-06 00:48:46

标签: java methods

我仍然是Java的新手,我已经在两天内遇到问题了。我只是向我的代码寻求帮助。我错过了什么或做错了什么?这是代码:

    public static void main(String[] args) 
    {          
        menu();              
    }  

    public static double getMeters()
    {
        String str;
        double meters;

        // Get meters input from user:
        str = JOptionPane.showInputDialog("Enter a distance in meters: ");

        // Convert string input to double:
        meters = Double.parseDouble(str);

        // Validate input:
        if (meters <= 0) 
        {
            JOptionPane.showMessageDialog(null, "Error: Input must be a " +
                    " positive number");     
            getMeters();
            break;
        }    
        else
            return meters;

    }

    public static void menu()
    {
        String choice;
        double meters = getMeters();               

        // Show menu options:
        choice = JOptionPane.showInputDialog("1. Convert to Kilometers \n" + 
                "2. Convert to Inches \n" + "3. Convert to Feet \n" + 
                "4. Quit Program \n" + "\n Enter your choice: ");        

        switch (choice)
        {
            case "1":
                showKilometers(meters);
                menu();
                break;

            case "2":
                showInches(meters);
                menu();
                break;

            case "3":
                showFeet(meters);
                menu();
                break;

            case "4":
                JOptionPane.showMessageDialog(null, "Goodbye!");
                System.exit(0);
                break;

            default:
                JOptionPane.showMessageDialog(null, "Error: Invalid   input.");
                menu();
                break;               
        }           
    }

    public static void showKilometers(double meters)
    {
        double kilometers;

        // Convert meters to kilometers:
        kilometers = meters * 0.001;

        // Display result:
        JOptionPane.showMessageDialog(null, meters + " meters is " +
                kilometers + " kilometers.");       
    }

    public static void showInches(double meters)
    {
        double inches;

        // Convert meters to inches:
        inches = meters * 39.37;

        // Display result:
        JOptionPane.showMessageDialog(null, meters + " meters is " + 
                inches + " inches.");       
    }

    public static void showFeet(double meters)
    {
        double feet;

        // Convert meters to feet:
        feet = meters * 3.281;

        // Display result:
        JOptionPane.showMessageDialog(null, meters + " meters is " + 
                feet + " feet.");
    }        
}

它一直在getMeters()方法中说“缺少返回语句”....? 我不知道如何解决这个问题,它可以验证输入,只接受正数...请帮忙。

这是我们处理方法的第一章,所以我不知道任何高级或任何花哨的技巧。

4 个答案:

答案 0 :(得分:1)

getMeters()方法的正确版本是:

public static double getMeters() {
    String str;
    double meters;

    // Get meters input from user:
    str = JOptionPane.showInputDialog("Enter a distance in meters: ");

    // Convert string input to double:
    meters = Double.parseDouble(str);

    // Validate input:
    if (meters <= 0) {
        JOptionPane.showMessageDialog(null, "Error: Input must be a " +
                " positive number");
        return getMeters();
    } else
        return meters;
}

我拿出了breakbreak用于删除forwhiledo-whileswitch语句,因此不允许将其放在何处。

我还将getMeters();更改为return getMeters();getMeters()是一种返回double的方法。您正在调用该方法但忽略返回的值。因此,您可以在没有返回任何内容的情况下到达方法的末尾。这是不允许的(除非方法具有void返回类型)。

答案 1 :(得分:0)

在getMeters()方法中,如果执行if语句,则不会返回double,因为唯一的return语句位于else语句中。希望这有帮助!

BTW,在if语句中,break语句无效。它们仅在for循环和while循环以及switch语句中有效。

答案 2 :(得分:0)

在getMeters()方法的代码中,你有一个以break;结尾的if语句,它将结束函数而不返回任何内容。它应该返回一个错误代码或-1.0,只是代表发生了什么的东西。

if (meters <= 0) 
{
    JOptionPane.showMessageDialog(null, "Error: Input must be a " + " positive number");     
    getMeters();
    //error code for negative numbers is -1.0
    //note that the return type is (Double) -1.0 rather than (int) -1
    return -1.0;
}
else
    return meters;

另外,我想解决if条件meters <= 0。我敢打赌,0的距离是有效的。如果为真,则意味着条件应为meters < 0

答案 3 :(得分:0)

在getMeters中你不能使用break,你应该使用&#34; double&#34;作为回报,删除声明&#34; break&#34;然后使用&#34; return getMeters();&#34;就在下面。