要求用户输入并验证

时间:2016-09-17 22:43:14

标签: java

我正在做一个学校JAVA项目,我要求用户输入一个8位数的字符串,后面跟一个字母,我必须验证:

  • 我收到的是8位数而不是字母
  • 最后一封信必须包含在给定的char []列表中。

我会在这里粘贴给定的列表和位置

enter image description here

  • 最终和最棘手的事情 - 要使有效的字母必须是输入的数字除以23(总字符数)。 例如,如果用户输入00000102X,则唯一有效的字母必须是X.(102%23 = 10) 如果用户输入24659213Q,则该字母必须为Q(24659213%23 = 16)。

我不太确定从哪里开始......所以我到目前为止唯一做的就是:

    import java.util.Scanner;
public class Practice {

    static final char[] LETTERS = {'T', 'R', 'W', 'A', 'G', 'M', 'Y', 'F', 'P', 'D', 'X'
                                 ,'B', 'N',  'J', 'Z', 'S', 'Q', 'V', 'H', 'L', 'C'
                                 , 'K', 'E'};
    String [][] input;

    public static void main (String[] args){
    Scanner scanner = new Scanner (System.in);

    System.out.print("Please input: ");

}
}

知道如何开始这个吗?任何帮助都会被接受。谢谢!

我需要做的是:

  1. 要求用户输入8位数字和一个字母
  2. 验证输入的组成(8位+ 1个字母)
  3. 将数字作为数字并除以23.结果应指向char []列表中接受的字母
  4. 如果一切正常,请保存并返回步骤1.如果没有给出错误并要求用户再次输入。

3 个答案:

答案 0 :(得分:1)

我会给你一些设计思路而不是代码,这样你就可以自己写下来了:

  • 考虑如何存储用户输入(例如,它是char的列表,可能是String吗?) - 这取决于你更习惯的工作但我建议使用String

  • 您需要什么方法?如果您将任务分解为许多不同的检查,您可能需要

  • 首先检查字符串的长度(你可以为此编写一个方法,但它只是一行代码,所以我不建议这样做),

  • 然后检查除最后​​一个字符以外的所有字符是否为数字,最后一个字符是String(您可以获得前7个字符代表的substring并尝试{ {1}} parse,然后您可以检查最后一个字符是否为字母(类Integer中有内置方法用于检查此字符以及Character用于处理String

  • 的不同部分的类
  • 然后可能是一个不同的方法,检查模数为23的前7个字符所代表的数字是给定String数组中最后一个字母的索引

  • 当您拥有所有检查方法时(我认为您应该char[]每个方法应检查其内部的内容,例如assertassert(input.length == 8)自定义或如果检查失败,内置throw你可以在主方法中将它们链接起来(即一个接一个地调用它们)

祝你好运!

答案 1 :(得分:1)

您需要一步一步地执行此操作:

  1. 检查字符串是否包含9个字符。如果没有,请再次询问输入。
  2. 取前8个字符,然后使用Integer.parseInt(...)。如果它抛出NumberFormatException,请再次请求输入。
  3. 现在,您有要验证的号码以及要验证它的数组。因此,您可以获取数字模数并检查该字符是否与数组的模数索引匹配。
  4. 示例:

    class Example{
        final char[] LETTERS = {'T', 'R', 'W', 'A', 'G', 'M', 'Y', 'F', 'P', 'D', 'X'
                                     ,'B', 'N',  'J', 'Z', 'S', 'Q', 'V', 'H', 'L', 'C'
                                     , 'K', 'E'};
    
        boolean isLastCharacterValid(int number, char c){  //c means the 9th character, number is the  numeric value of first 8 characters
            return (c == LETTERS[number % LETTERS.length]);
        }
    }
    

    do-while循环对您的情况会更好。

答案 2 :(得分:0)

您可以使用:

int i = scanner.nextInt();
String str=""+i;
if (str.length() != 8) {
 // ERROR
}
char c = scanner.nextChar();
...

那里有一些例子:

https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html