0

4 つの int 値を返す方法がわかりません。おそらくifステートメントが原因で、到達不能ステートメントエラーが発生し続けますか?

4 つの値、または文字列内の大文字、小文字などの数字を返すことになっています。各変数を印刷しようとしましたが、印刷されますが、現在のようには返されません。

public static int category(String pw)
{
    int Upper = 0;
    int lower =0;
    int num = 0;
    int symbol=0;

    for (int i=0; i< pw.length(); i++)
    {
        if (65 <= pw.charAt(i) && pw.charAt(i)<=90)
        {
            Upper++;

        } 

        if(97<= pw.charAt(i) && pw.charAt(i) <=122)
        {
            lower++;

        }

        if(48<= pw.charAt(i) && pw.charAt(i) < 57)
        {
            num++;

        }


        if (31 < pw.charAt(i) &&  pw.charAt(i) < 48 || 57 < pw.charAt(i) && pw.charAt(i)< 64 || 90 < pw.charAt(i) && pw.charAt(i)< 97 || 122 < pw.charAt(i) && pw.charAt(i)< (127) + 1)
        {
            symbol++;

        }


    }
    return Upper;
    return lower;
    return num;
    return symbol;
}
4

5 に答える 5

1

コードの問題は、そのような複数の値を返すことができないことです。最初returnに到達すると、メソッドreturns. これは、「到達不能コード」の問題の原因でもあります。return条件付きではないステートメントの後にあるコードには到達できません。

これには、配列やデータの他のデータ構造を返すなど、迅速かつ簡単な解決策がたくさんありますが、私であれば、データを保持または処理するクラスを作成します。このアイデアの1 つを次に示します。

public class Category {

    private int upper;
    private int lower;
    private int num;
    private int symbol;

    // Getters and Setter for your private data
    // ...

    // Default constructor
    public Category() {...}

    // Copy constructor
    public Category (Category cat) {...}

    // Constructor good for the method
    public Category (int upper, int lower, int num, int symbol) {...}

    public static Category getCategory(String pw)
    {
        // Everything else is the same
        // ...

        // Here's the important part
        // This will return a new instance of the Category object
        return new Category(Upper, lower, num, symbol);
    }

コードでこれを次のように呼び出します =>データを永続化する必要がなく、分類する文字列が複数あることが判明した場合は、1 つのインスタンスをCategory category = Category.getCategory(yourString); 追跡して.Categorycategory = Category.getCategory(yourOtherString);

クラスで作成した public getter と setter を介して、 => category.getUpper();、 、 ...などのカテゴリのデータにアクセスします。category.getLower();

ここでは、配列やリストなどとは対照的に、コンパクトなオブジェクトにすべてが含まれています。Upperまた、メソッドで大文字になっているコードに従いましたが、他のコードはそうではありません。私はおそらくそれを避けるでしょう。従う慣習を選び、それを守りましょう。

于 2013-10-20T20:12:12.783 に答える
1

メソッドに単に 4 つの return ステートメントを含めることはできません。

それらを返した後、これらの変数で何をしていますか? それらを配列または別のデータ構造に格納し、必要に応じてそれを返すことを検討してください。

于 2013-10-20T19:27:25.437 に答える
0

ints一度に複数を返すことはできません。これを行うには、が必要でありarray、これも関数のヘッダーで定義する必要があります。

于 2013-10-20T19:26:50.480 に答える
0

return変数を返すだけでなく、メソッドも終了するため、メソッド内で実行できるステートメントは最大でも 1 つです。return互いの後に複数のステートメントを配置すると、最初のステートメントのみが実行され、この後にメソッドが終了します。

于 2013-10-20T19:35:24.413 に答える
0

以下で述べたように、リストを返すことができます:

public static List<Integer> category(String pw)
    {
        int Upper = 0;
        int lower =0;
        int num = 0;
        int symbol=0;
    List<Integer> allInts = new ArrayList<Integer>();

        for (int i=0; i< pw.length(); i++)
        {
            if (65 <= pw.charAt(i) && pw.charAt(i)<=90)
            {
                Upper++;

            } 

            if(97<= pw.charAt(i) && pw.charAt(i) <=122)
            {
                lower++;

            }

            if(48<= pw.charAt(i) && pw.charAt(i) < 57)
            {
                num++;

            }


            if (31 < pw.charAt(i) &&  pw.charAt(i) < 48 || 57 < pw.charAt(i) && pw.charAt(i)< 64 || 90 < pw.charAt(i) && pw.charAt(i)< 97 || 122 < pw.charAt(i) && pw.charAt(i)< (127) + 1)
            {
                symbol++;

            }


        }

    allInts.add(0, Upper);
    allInts.add(1,lower)
    allInts.add(2,num)
    allInts.add(3,symbol)

       return allInts; // returning list

    }
于 2013-10-20T19:34:24.490 に答える