Java 文档过滤器与KeyListener与MaskFormatter

Java 文档过滤器与KeyListener与MaskFormatter,java,keylistener,documentfilter,Java,Keylistener,Documentfilter,在你们对我大发雷霆之前,请记住你们每个人都是在某个时候开始的(只是因为我看到了答案才这么说)。是的,我正在学习,但是需要一些帮助来区分DocumentFilter、KeyListener或任何其他只允许某些数据的方法之间的差异。这是一门课,但我可以按原样上交,并获得全额学分。我想将答案选项限制为A或B(不区分大小写)。我读了很多文章,对每一篇都感到困惑。请帮我理解 代码如下: import java.util.Random; import java.io.*; public class Hor

在你们对我大发雷霆之前,请记住你们每个人都是在某个时候开始的(只是因为我看到了答案才这么说)。是的,我正在学习,但是需要一些帮助来区分DocumentFilter、KeyListener或任何其他只允许某些数据的方法之间的差异。这是一门课,但我可以按原样上交,并获得全额学分。我想将答案选项限制为A或B(不区分大小写)。我读了很多文章,对每一篇都感到困惑。请帮我理解

代码如下:

import java.util.Random;
import java.io.*;

public class HorticultureQuiz {

    public static void main(String[] args) {

        // Create a randomizer Object
        Random rand = new Random();
        // Object used to read the input
        BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
        // String Array used to maintain the questions
        String[][] questions = new String[10][2];

        //Questions - 0 throuugh 9 equals 10 questions
        questions[0][0] = "Question1 \nA: True\nB: False";
        questions[1][0] = "Question2 \nA: True\nB: False";
        questions[2][0] = "Question3 \nA: True\nB: False";
        questions[3][0] = "Question4 \nA: True\nB: False";
        questions[4][0] = "Question5 \nA: True\nB: False";
        questions[4][0] = "Question5 \nA: True\nB: False";
        questions[5][0] = "Question6 \nA: True\nB: False";
        questions[6][0] = "Question7 \nA: True\nB: False";
        questions[7][0] = "Question8 \nA: True\nB: False";
        questions[8][0] = "Question9\nA: True\nB: False";
        questions[9][0] = "Question10 \nA: True\nB: False";

        //Answers
        questions[0][1] = "B";
        questions[1][1] = "B";
        questions[2][1] = "B";
        questions[3][1] = "B";
        questions[4][1] = "B";
        questions[5][1] = "B";
        questions[6][1] = "B";
        questions[7][1] = "B";
        questions[8][1] = "B";
        questions[9][1] = "B";


        int intOption;
        String strAnswer = null;

        // Used to maintain the count in the loop
        int ii = 0;

        while (ii < 5){

        // Assign the input answer a value until you reach 5
        intOption = rand.nextInt(5);
        // Print the question to the screen
        System.out.println(questions[intOption][0]);
        //Error handling
        try {
            strAnswer = input.readLine();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        // If the input answer equals the correct answer in the array list
        if (strAnswer.equals(questions[intOption][1])){

            // you are correct
            System.out.println("Correct!");

            }

            else{

            // Otherwise...WRONG
            System.out.println("WRONG, the answer was " + questions[intOption][1]);

            }

        //Increment by one until you reach 5
        ii = ii + 1;

        }

    }

}
import java.util.Random;
导入java.io.*;
公共类园艺{
公共静态void main(字符串[]args){
//创建随机化器对象
Random rand=新的Random();
//用于读取输入的对象
BufferedReader输入=新的BufferedReader(新的InputStreamReader(System.in));
//用于维护问题的字符串数组
字符串[][]问题=新字符串[10][2];
//问题-0到9等于10个问题
问题[0][0]=“问题1\nA:True\nB:False”;
问题[1][0]=“问题2\nA:True\nB:False”;
问题[2][0]=“问题3\nA:True\nB:False”;
问题[3][0]=“问题4\nA:True\nB:False”;
问题[4][0]=“问题5\nA:True\nB:False”;
问题[4][0]=“问题5\nA:True\nB:False”;
问题[5][0]=“问题6\nA:True\nB:False”;
问题[6][0]=“问题7\nA:True\nB:False”;
问题[7][0]=“问题8\nA:True\nB:False”;
问题[8][0]=“问题9\nA:True\nB:False”;
问题[9][0]=“问题10\nA:True\nB:False”;
//答复
问题[0][1]=“B”;
问题[1][1]=“B”;
问题[2][1]=“B”;
问题[3][1]=“B”;
问题[4][1]=“B”;
问题[5][1]=“B”;
问题[6][1]=“B”;
问题[7][1]=“B”;
问题[8][1]=“B”;
问题[9][1]=“B”;
智力输入;
字符串strAnswer=null;
//用于维护循环中的计数
int ii=0;
而(ii<5){
//为输入答案指定一个值,直到达到5为止
intOption=rand.nextInt(5);
//将问题打印到屏幕上
System.out.println(问题[intOption][0]);
//错误处理
试一试{
strAnswer=input.readLine();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
//如果输入答案等于数组列表中的正确答案
if(strAnswer.equals(问题[intOption][1])){
//你说得对
System.out.println(“正确!”);
}
否则{
//否则……就错了
System.out.println(“错,答案是“+问题[intOption][1]);
}
//增加1直到达到5
ii=ii+1;
}
}
}

将验证添加到从用户处获取输入的部分-

        System.out.println(questions[intOption][0]);
        // Error handling
        try {
            do {
                strAnswer = input.readLine().toUpperCase();
            } while (!isValid(strAnswer));
        } catch (IOException e) {
            e.printStackTrace();
        }
创建一个方法
isValid
,该方法将检查输入是否有效,如下所示:

private static boolean isValid(String strAnswer) {
    boolean valid = strAnswer.equals("A") || strAnswer.equals("B");
    if(!valid){
        System.out.println("\nInput is not valid, please enter a valid choice - A or B");
    }
    return valid;
}

一种方法是检查输入是否为
a
b
a
b
,方法与检查他们是否得到正确答案的方法相同(使用
String.equals
),如果不是,则可以打印一条消息并请求另一个输入。重复这个过程。您可以使用编写此代码的所有函数来完成此操作。您的代码不使用文档筛选器、密钥侦听器或掩码格式化程序。如果您的代码显示您如何尝试使用这些方法,您将得到更多的响应。对我来说,在你的问题标题和你的代码之间只有一个非常微弱的联系。再一次,我对它的理解不够,甚至不能使用它。我是初学者。我不知道如何使用它…这就是我问的原因。这实际上很有效,但我有一个问题。如果是这么简单,那么为什么我在主题行中看到这么多关于我所问主题的东西?值得一提的是,当我使用带有MaskFormatter和NumberFormatter的JFormattedTextField创建表单时,我看到了这些内容。在我看来,如果有100种方法来做某事,其中一种方法将是特定用例的首选方法。Simon对您的问题的评论回答了您在评论中提到的问题。至于我提供的简单解决方案,这是因为您写了“请记住,你们每个人都是从某个点开始的”。当你学习Java的时候,你会发现不是为了复杂而使用一个类,而是关于上下文,你是非常正确的。非常感谢您抽出时间,并将其保持在我能理解的水平。