验证用户字符串输入

时间:2017-11-01 22:18:01

标签: java

编码一个简单的HiLo纸牌游戏,用户从一副纸牌中获得卡值,然后输入“更高”,“更低”或“相等”,试图猜测下一张牌的下限。

真的无法通过迭代来了解用户输入验证,即。在输入具有所需参数的字符串之前不要继续前进。

到目前为止我的代码:

import java.util.Scanner;
import java.util.Random;

public class HiLoGame {

public static void main(String[] args) {

    Scanner reader = new Scanner(System.in);
    Random randomCard = new Random();
    int numberOfSuccesses = 0;
    boolean finished = false;
    int card = (randomCard.nextInt(13) + 2);
    while (finished != true) {
        int nextCard = (randomCard.nextInt(13) + 2);
        String pictureCard = "";
        if (((numberOfSuccesses < 0) ? nextCard : card) == 11) {
            pictureCard = "Jack";
        } else if (((numberOfSuccesses < 0) ? nextCard : card) == 12) {
            pictureCard = "Queen";
        } else if (((numberOfSuccesses < 0) ? nextCard : card) == 13) {
            pictureCard = "King";
        } else if (((numberOfSuccesses < 0) ? nextCard : card) == 14) {
            pictureCard = "Ace";
        }

        System.out.println("The card is a " + ((card > 10) ? pictureCard : card));

        if (numberOfSuccesses == 4) {
            System.out.println("Congratulations. You got them all correct");
            finished = true;
            break;
        }
        while (!reader.nextLine().toLowerCase().equals("higher")
                || !reader.nextLine().toLowerCase().equals("lower")
                || !reader.nextLine().toLowerCase().equals("equal")) {
            System.out.println("Try again!");
            reader.next();
        }

        String userGuess = reader.nextLine().toLowerCase();

//TODO validate input
        if (userGuess.equals("higher")) {
            if (nextCard > card) {
                numberOfSuccesses++;
            } else {
                finished = true;
                break;
            }
        } else if (userGuess.equals("lower")) {
            if (nextCard < card) {
                numberOfSuccesses++;
            } else {
                finished = true;
                break;
            }
        } else if (userGuess.equals("equal")) {
            if (nextCard == card) {
                numberOfSuccesses++;
            } else {
                finished = true;
                break;
            }
        }

        System.out.println(numberOfSuccesses);
        card = nextCard;
    }
    if (numberOfSuccesses < 4) {
        System.out.println("Sorry, incorrect!");
    }
}
}

及相关代码摘录:

 while (!reader.nextLine().toLowerCase().equals("higher")
            || !reader.nextLine().toLowerCase().equals("lower")
            || !reader.nextLine().toLowerCase().equals("equal")) {
        System.out.println("Try again!");
        reader.next();
    }

它有点卡在上面的部分给“再试一次”和。我已经完成了必须使用.hasNextInt()的程序,但我正在努力进行这种字符串验证。

感谢您提供的所有帮助/意见!

2 个答案:

答案 0 :(得分:1)

您最多呼叫reader.nextLine() 3次,因此您正在比较3种不同的字符串。

如果我输入“xxx”,你的代码会说“xxx!=更高,所以读另一行” - 它永远不会将“xxx”与“lower”或“equal”进行比较。

另请注意&& vs ||

解决方案是将一行读入变量并对每个条件使用该变量。我不会写出来,因为这显然是家庭作业或自学练习,所以最好自己动手。

答案 1 :(得分:0)

我认为你的条件逻辑需要改变。您正在检查输入是否等于&#34;更高&#34;或不等于&#34;更低&#34;或不等于&#34;等于&#34;因此,即使您输入预期值,它也总是错误的 - 如果您输入&#34;更高&#34;它不等于低。您需要将ors更改为ands。