我的计数器没有增加并在 java 中保持为 1

My counter does no increase and stays as 1 in java

我觉得我的代码中可能遗漏了一些阻止我的计数器增加的东西。有人可以检查一下我可能遗漏了什么吗,我的计数器值保持为 1。

代码:

public static void count_vowels(String in_file)
{
    {
        File temp = new File(in_file);
        Scanner input_file;
        try
        {
            input_file = new Scanner(temp);
        }
        catch (Exception e)
        {
            System.out.printf("Failed to open file %s\n", in_file );
            return;
        }
        while(input_file.hasNextLine())
        {
            String line = input_file.nextLine();
            System.out.printf("%s\n", line);
            for(int i = 0; i<line.length(); i++)
            {
                char aA = line.charAt(i);
                int counta = 0;
                if(aA == 'a' || aA == 'A')
                {
                    counta++;
                    System.out.println(counta);
                }


            }

        }
        input_file.close();

    }
}

程序调用一个包含 3 行文本的文件。我添加了 2 个打印语句来显示行,并且在每行下方打印了计数器的值。结果是:

The CAT is jumping over an airplane.
1
1
1
1
TODAY IS WEDNESDAY.
1
1
UUUu

好像在计数,但没有递增。

将此行移出循环

int counta = 0;
int counta = 0; 

在 for 循环外声明这一行

while(input_file.hasNextLine())
    {
        String line = input_file.nextLine();
        System.out.printf("%s\n", line);
        int counta = 0;
        for(int i = 0; i<line.length(); i++)
        {
            char aA = line.charAt(i);

            if(aA == 'a' || aA == 'A')
            {
                counta++;
                System.out.println(counta);
            }


        }

    }

从 for 循环中减去计数

int counta = 0; 每次处理行时重置为 0。

移出 for-loop

修改后的代码

while(input_file.hasNextLine())
    {
        String line = input_file.nextLine();
        System.out.printf("%s\n", line);
        int counta = 0; // moved outside
        for(int i = 0; i<line.length(); i++)
        {
            char aA = line.charAt(i);

            if(aA == 'a' || aA == 'A')
            {
                counta++;
                System.out.println(counta);
            }


        }

    }

这是你的问题:你的 counta 变量在每次循环调用后都会重新初始化,因为它只存在于循环范围内。

while(input_file.hasNextLine())  {
    String line = input_file.nextLine();
    System.out.printf("%s\n", line);
    int counta = 0; // Move this here if you want to count every a in each line
    for(int i = 0; i<line.length(); i++) {
        char aA = line.charAt(i);
        if(aA == 'a' || aA == 'A') {
           counta++;
           System.out.println(counta);
        }
    }
}

我把它移到了外面,让计数器增加了。从这里我怎么能让计数器逐行继续而不是让它在每行之后重新启动。在第一行之后,它计算了 "a" 的 x 数量,但它在下一行恢复为 0。

你的问题是,你就在这里:

 for(int i = 0; i<line.length(); i++)
            {
                char aA = line.charAt(i);
                int counta = 0;
                ...

你的循环被执行的次数与你的行中的字符一样多。因此,对于您的程序声明的每个字符 counta 并将其初始化为 0。对于每个循环,您都会创建一个 "new" 变量,其值始终为 0

如果你点击你想要的字符(Aa 在你的情况下),你的增量 counta 并打印出来。第一次没问题,但是对于每一个进一步的循环,你的 porgramm 都在声明 counta 并用 0.

初始化它

解决方法很简单:

从循环中获取声明和初始化:

...
while(input_file.hasNextLine())
        {
            String line = input_file.nextLine();
            System.out.printf("%s\n", line);
            //Counta need to be placed right here:
            int counta = 0;
            for(int i = 0; i<line.length(); i++)
            {
                char aA = line.charAt(i);
                //Counta was here before but thats wrong
                if(aA == 'a' || aA == 'A')
                {
                    counta++;
                    System.out.println(counta);
                }


            }

        }
        ...

我希望我现在能够帮助你更好地理解你的问题。