繁体   English   中英

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

[英]Java If statements inside for loop, returning multiple int values.

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

你不能简单地在一个方法中有四个return语句。

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

您的代码中的问题是您不能返回多个这样的值。 当达到第一次return时,方法return s。 它也是“无法访问代码”问题的根源; 在非条件的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);

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

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

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

你可以返回一个List,如下所述:

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

    }

您最多只能在方法中执行一个return语句,因为它不仅返回变量,还会终止该方法。 如果你把多个return语句放在一起,那么只有第一个语句将被执行,之后你将离开这个方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM