0

我不知道如何返回四个 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达到第一个方法时return。这也是“无法访问代码”问题的根源;出现在return非条件语句之后的任何代码都将无法访问。

有很多解决方案,例如返回一个数组或其他一些数据结构,这可能既快速又简单,但如果是我,我会创建一个类来保存或处理数据。这是对这个想法的一种看法:

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);
    }

您将在您的代码中这样调用它 =>Category category = Category.getCategory(yourString); 如果事实证明您不需要保留数据并且需要对多个字符串进行分类,您可以跟踪一个Category实例并执行category = Category.getCategory(yourOtherString);.

您将通过在类中创建的公共 getter 和 setter 访问类别中的数据,例如 => category.getUpper();, category.getLower();, ...。

在这里,您将所有内容都放在一个紧凑的对象中,这与数组或列表等相反;我还遵循了您的代码,Upper在您的方法中大写,而其他代码则没有。我可能会避免这种情况。选择一个要遵循的约定并坚持下去。

于 2013-10-20T20:12:12.783 回答
1

您不能简单地在一个方法中有四个返回语句。

返回这些变量后,您将如何处理它们?也许考虑将它们存储到数组或其他数据结构中,如果它符合您的需要,则返回。

于 2013-10-20T19:27:25.437 回答
0

您不能ints一次返回多个。如果你想这样做,你需要一个array并且这也必须在函数的标题中定义。

于 2013-10-20T19:26:50.480 回答
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 回答
0

您最多将在return方法中执行一条语句,因为它不仅返回变量而且终止方法。如果您将多个return语句一个接一个地放置,则只会执行第一个语句,因为在此之后您将离开该方法。

于 2013-10-20T19:35:24.413 回答