Java,循环不会从程序的开头重新开始

时间:2017-04-13 17:08:15

标签: java while-loop do-while repeat

我刚刚完成我的计划,但我还有一个问题,我似乎无法找到答案。我一直在查看已经提出的问题,但在这种情况下,我无法找到能够专门回答我问题的内容。这是一个程序,让用户输入一个字符串然后计算多少元音和辅音等。然后用户得到一个选项重复程序并输入一个新的字符串,如果他/她按y,程序退出,如果他/她按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!

    }
}

1 个答案:

答案 0 :(得分:0)

你应该在读取用户的输入时使用nextLine(),这会抓取所有内容,包括行尾字符&#39; \ n&#39;这是你的next()调用后遗留下来的东西,然后nextLine()抓住&#39; \ n&#39;它为你提供了元音和组合的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');
    }