Java While循环中的用户验证测试

时间:2018-09-27 01:11:46

标签: java loops validation

  

我正在做我的第一个Java项目之一,检查用户输入的单词(没有数字或符号)是否是回文。我使用了这里概述的方法:https://stackoverflow.com/a/4139065/10421526作为逻辑。该代码按请求运行,但是在输入无效后我无法重新提示用户,因为它似乎“阻止”了代码接受有效输入的能力,并打印了“重试”消息。我也尝试过do while版本,但最终出现格式错误。我认为定义stringOut变量的方式给我带来了麻烦,但是我不确定如何在不做如日食所说的重复的情况下进行更改。经过数十次尝试,这是我能得到的最接近的结果:

import java.util.Scanner;

public class PalindromTester {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in = new Scanner(System.in);


        System.out.println("Input word to test: ");
        String stringIn = in.nextLine();
        String stringOut = new StringBuilder(stringIn).reverse().toString(); 

        while (!stringIn.matches("[a-zA-Z]+")) {
            System.out.println("Invalid input, try again.");
            in.next(); //stops infinite error loop
        }

        if ((stringIn.equalsIgnoreCase(stringOut))) {
            System.out.println("Palindrome detected");
            System.out.println("You entered: " + stringIn);
            System.out.println("Your string reversed is: " + stringOut);

}       else {
            System.out.println("Not a palindrome");
}

    }
}

2 个答案:

答案 0 :(得分:0)

一个很好的用例,可以使用do-while循环。当您必须确保语句至少执行一次时,可以使用此循环。并且只有在满足条件时才执行后续执行。在这种情况下,该条件将是验证您的输入

    Scanner in = new Scanner(System.in);

    String prompt = "Input word to test: ";

    String stringIn;

    do {
        System.out.println(prompt);
        stringIn = in.nextLine();
        prompt = "Invalid input, try again.";
    }
    while (stringIn.matches("[a-zA-Z]+"));

如果输入为non-numeric,则while条件将为true,这将使此循环再次运行,因此需要新的输入。如果输入为numeric,则while条件将为false,因此退出while循环,并在stringIn变量中为您提供用户输入。

答案 1 :(得分:0)

在while循环中将in.next();更改为stringIn= in.next();,在while循环后添加stringOut = new StringBuilder(stringIn).reverse().toString();

import java.util.Scanner;

    public class Test {

        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Scanner in = new Scanner(System.in);


            System.out.println("Input word to test: ");
            String stringIn = in.nextLine();
            String stringOut = new StringBuilder(stringIn).reverse().toString(); 

            while (!stringIn.matches("[a-zA-Z]+")) {
                System.out.println("Invalid input, try again.");
                stringIn= in.next(); //stops infinite error loop
            }
            stringOut = new StringBuilder(stringIn).reverse().toString();
            if ((stringIn.equalsIgnoreCase(stringOut))) {
                System.out.println("Palindrome detected");
                System.out.println("You entered: " + stringIn);
                System.out.println("Your string reversed is: " + stringOut);

    }       else {
                System.out.println("Not a palindrome");
    }

        }
    }