for循环中的Java If语句,返回多个int值。

for循环中的Java If语句,返回多个int值。,java,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++)

我不知道如何返回四个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;
}
公共静态int类(字符串pw)
{
整数上限=0;
整数下限=0;
int num=0;
int符号=0;
对于(int i=0;iif(65您不能一次返回多个
int
。如果您想这样做,您需要一个
数组
,这也必须在函数的头中定义。

一个方法中不能有四个return语句


您在返回这些变量后做些什么?也许考虑将它们存储到一个数组或另一个数据结构中,并返回它是否符合您的需要。

< P> <强>您可以返回一个列表,如我在下面提到的:

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

    }
公共静态列表类别(字符串pw)
{
整数上限=0;
整数下限=0;
int num=0;
int符号=0;
List allint=new ArrayList();
对于(int i=0;i如果(65在一个方法中最多执行一个
return
语句,因为它不仅返回变量,而且终止方法。如果将多个
return
语句放在后面,则只会执行第一个语句,因为在此之后,您将离开该方法。

代码中的问题是无法返回m类似的多个值。当到达第一个
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(您的字符串);
如果您不需要数据持久化,并且有多个字符串进行分类,那么您可以跟踪一个
Category
实例并执行
Category=Category.getCategory(您的其他字符串);

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

在这里,你有一个紧凑的对象,有意义的一切,而不是数组或列表等;
我也遵循了你的代码,因为在你的方法中,
Upper
是大写的,而其他的则不是。我可能会避免这种情况。选择一个约定来遵循并坚持它。

你应该创建一个类或创建一个数组并返回。从技术上讲,你可以在一个方法中有四个返回语句,但实际上只能执行一个。(对于四种不同的条件有四个返回语句是可以的)