Java,循环没有从程序的开头重新开始

Java, The loop doesn't start over from the beginning of the program

我刚刚完成我的程序,但我还有一个问题,我似乎也找不到答案。我一直在查看已经提出的问题,但在这种情况下找不到专门回答我的问题的内容。这是一个程序,让用户输入一个字符串,然后它计算有多少元音和辅音等。在此之后,如果 he/she 按 y,用户可以选择重复该程序并输入一个新字符串,该程序如果 he/she 按 n 等则退出。唯一不起作用的是如果用户按 y 重复程序,然后它会打印出有 0 个元音和辅音等。我知道它在例如,在我有 int consonant_count=0 的代码开头,我只是不知道要移动什么以及将它移动到哪里。 Ps。这不应该被标记为重复,因为我不知道 nextLine 是问题所在。这是代码:

import java.util.Scanner;
public class loop2
{
    public static void main (String[] args)
    {
        Scanner inputReader = new Scanner (System.in);
        char result='y';

        do {
            // ’Nytto’-kod:
            int vowels_count = 0;
            int consonents_count = 0;
            int charachters_count= 0;
            System.out.println("Skriv in en text");
            String str = inputReader.nextLine();
            String str2 = str.toLowerCase();
            char[] chr = str2.toCharArray();

            for(int i=0;i<chr.length;i++)
            {
                if(chr[i] == 'a' || chr[i]== 'e' || chr[i] == 'i' || chr[i] == 'o' || chr[i] == 'u')
                    vowels_count++;
                else if(chr[i] == '-' || chr[i] == '!' || chr[i] == '?' || chr[i] == ',' || chr[i] == '.' || chr[i] == ':' || chr[i] == ';')
                    charachters_count++;
                else
                    consonents_count++;
            }

            System.out.println("Antalet vokaler:"+vowels_count+ " "+"Antalet konsonanter:"+consonents_count+" "+"Antalet interpunktionstecken:"+charachters_count++);
            // Kod f ̈or hantering av repetition
            System.out.println ("För att upprepa: Skriv y");
            System.out.println ("För att avsluta: Skriv n");
            String repeat=inputReader.next();// H ̈amta anv ̈andarens svar.
            result=repeat.charAt(0);
            if(result=='y')
            {
                continue;
            }
            else if(result !='y' && result !='n')
            {
                System.out.println("Du får bara skriva y eller n, försök igen!");
                result='y';
            }
            else
            {
                System.out.println ("Klart.");
                inputReader.close ();
             }

             }
        while (result == 'y'); // Observera semikolon!

    }
}

您应该在读取用户输入时使用 nextLine(),它会抓取所有内容,包括行尾字符 '\n',这是您调用 next() 之后剩下的内容,然后 nextLine() 会抓取'\n' 为您提供元音和辅音的 0, 0 计数

    Scanner inputReader = new Scanner (System.in);
    char result='y';
    while(result == 'y')
    {
        // ’Nytto’-kod:
        int vowels_count = 0;
        int consonents_count = 0;
        int charachters_count= 0;
        System.out.println("Skriv in en text");
        String str = inputReader.nextLine();
        String str2 = str.toLowerCase();
        char[] chr = str2.toCharArray();

        for(int i=0;i<chr.length;i++)
        {
            if(chr[i] == 'a' || chr[i]== 'e' || chr[i] == 'i' || chr[i] == 'o' || chr[i] == 'u')
                vowels_count++;
            else if(chr[i] == '-' || chr[i] == '!' || chr[i] == '?' || chr[i] == ',' || chr[i] == '.' || chr[i] == ':' || chr[i] == ';')
                charachters_count++;
            else
                consonents_count++;
        }

        System.out.println("Antalet vokaler:"+vowels_count+ " "+"Antalet konsonanter:"+consonents_count+" "+"Antalet interpunktionstecken:"+charachters_count++);
        //wrap your play again logic in another do/while where you
        // ask for y or n until they enter either one
        do {
            System.out.println ("För att upprepa: Skriv y");
            System.out.println ("För att avsluta: Skriv n");
            String repeat=inputReader.nextLine();//read the entire next line <----
            result=repeat.charAt(0);
            if(result=='y')
            {
                continue;
            }
            else if(result !='y' && result !='n')
            {
                System.out.println("Du får bara skriva y eller n, försök igen!");
            }
            else
            {
                System.out.println ("Klart.");
                inputReader.close ();
            }
        } while (result !='y' && result !='n');
    }