-1

さて、このプログラムは、ユーザー定義の方法を使用して文字列の各文字の数値を見つけ、それをキーパッドの数字に割り当てることになっています...つまり、1800FLOWERSを18003569377にします

コンパイルしようとすると、getNumber メソッドの最後に「missing return statement」が表示されます。誰かが私を助けてくれませんか

import java.util.Scanner;           //import scanner object

public class phone

    {
    public static void main(String [] args)
    {
    int i = 0;
        Scanner scan= new Scanner(System.in);           



        System.out.println("Enter a phone number"); 
        String number = scan.nextLine();
        String upperCaseLetter = number.toUpperCase();
        int length = number.length();   

        if (i <= length)
            {   
                char result = number.charAt(i);
                int carat = getNumber(result);
                System.out.print(""+carat+"");
                i++;
            }

        }



        public static int getNumber(char result) 
        {
                if (result == 65 || result == 66 || result == 67)
            {
                result = 2;
                return result;
            }   
                else if (result == 68 || result == 69 || result == 70)
            {
                result = 3;
                return result;
            }   
            else if (result == 71 || result == 72 || result == 73)  
            {
                result = 4;
                return result;
            }

            else if (result == 74 || result == 75 || result == 76)  
            {
                result = 5;
                return result;
            }
            else if (result == 77 || result == 78 || result == 79)  
            {
                result = 6;
                return result;
            }
            else if (result == 80 || result == 81 || result == 82 || result == 83)  
            {
                result = 7;
                return result;
            }
            else if (result == 84 || result == 85 || result == 86)  
            {
                result = 8;
                return result;
            }
        else if (result == 87 || result == 88 || result == 89 || result == 90)  
            {
                result = 9;
                return result;
            }

        }   
    }
4

3 に答える 3

1

条件から返されます (メソッド内getNumber)。条件の 1 つが実行時に満たされている可能性がありますが、コンパイラはそれを判断するほど賢くありません。したがって、エラーが発生します。

最後に、無効なメソッドを返すreturn 0か、無効にすることができますreturn -1result

于 2013-11-06T17:19:02.160 に答える
0

メソッド getNumber はすべてのケースをカバーする必要がありresult、コードで言及したケースのいずれでもないケースもカバーする必要があります (そうしないと、メソッドが何も返さないケースがいくつかあり、それがコンパイラが怒っていることです)。

あなたにとって、それはあまり変わりません。あなたresultが指定された範囲からのものであると確信しているので、ex. 追加return 0;します (null は int ではなく、メソッドは int を返すように宣言されているため、null を返さないでください)。

編集: charAt(0) は int ではなく単一の文字であるため、メソッドは -1 を返します。2 番目は char を int と比較するため、かどうかcharAt(0) == '0'を確認します。charAt(0) == 0あなたはそれを知る必要があります1 != '1'if (i <= length)さらに、ループしていないため、 charAt(0) をチェックするだけです。文字列全体を調べたい場合は、if の代わりにnumberfor を使用します。while(i <= length)

于 2013-11-06T17:33:12.393 に答える
0

これは、return ステートメントを含む if および else if ブロックがあり、最後に else ブロックまたは return ステートメントがないためです。最後から 2 行目の return ステートメントに注意してください。

public static int getNumber(char result) 
{
        if (result == 65 || result == 66 || result == 67)
    {
        result = 2;
        return result;
    }   
        else if (result == 68 || result == 69 || result == 70)
    {
        result = 3;
        return result;
    }   
    else if (result == 71 || result == 72 || result == 73)  
    {
        result = 4;
        return result;
    }

    else if (result == 74 || result == 75 || result == 76)  
    {
        result = 5;
        return result;
    }
    else if (result == 77 || result == 78 || result == 79)  
    {
        result = 6;
        return result;
    }
    else if (result == 80 || result == 81 || result == 82 || result == 83)  
    {
        result = 7;
        return result;
    }
    else if (result == 84 || result == 85 || result == 86)  
    {
        result = 8;
        return result;
    }
else if (result == 87 || result == 88 || result == 89 || result == 90)  
    {
        result = 9;
        return result;
    }
    return -1; // NOTICE THIS
}   
于 2013-11-06T17:19:40.177 に答える