Java if语句内部for循环,返回多个int值。

时间:2013-10-20 19:23:50

标签: java

我无法弄清楚如何返回四个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;
}

5 个答案:

答案 0 :(得分:1)

您不能简单地在方法中使用四个return语句。

返回后,您对这些变量做了什么?也许可以考虑将它们存储到数组或其他数据结构中,如果符合您的需要则返回它。

答案 1 :(得分: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);
    }

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

您将访问类别=&gt;类别中的数据category.getUpper();category.getLower();,...通过您在课堂上创建的公共getter和setter。

在这里,你拥有一个紧凑的对象中的所有东西,而不是数组或列表等; 我也遵循了你的代码,Upper在你的方法中大写,而其他的则没有。我可能会避免这种情况。选择一个遵循的惯例并坚持下去。

答案 2 :(得分:0)

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

答案 3 :(得分: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

    }

答案 4 :(得分:0)

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