Java任务使用字母和数字验证“课程代码”

时间:2018-01-11 21:01:49

标签: java

我的问题与我已经上交的作业有关 - 但是我想根据我编码的内容(这有些要求)找出我失败的地方,我做了什么,以及是否有更好的方法。认真的新手要清楚。

我已经阅读了多个之前提出的问题,并尝试将这些问题汇总在一起。

任务是让用户输入六位数代码 - 必须符合这些规范:

  1. 将大写或小写'I'作为第一个
  2. 有一个大写或小写'T'作为第二个
  3. 第三到第六名必须是数字0-9
  4. 如果输入的代码匹配 - 返回是“课程代码验证”它的返回是“课程代码无效”,原因不是。

    在下面粘贴我的代码文本。任何反馈将不胜感激。

    import java.util.Scanner; 
    public class U4A1_sixthSession {
    
    
        public static void main(String[] args) {
            System.out.println("Amber's Copy");
            Scanner input = new Scanner(System.in);
    
            System.out.println("Enter a course code to validate (e.g. IT4872):");
            String s = input.nextLine();
    
    
          if (s.charAt(0)!= 'i') {
        if (s.charAt(0)!=  'I') 
                 System.out.println("Course Code must begin with the letter I." + "\n" +"Course code not valid.");
    
            else if (s.charAt(1)!=  't')
            if (s.charAt(1)!=  'T')
                System.out.println("Course Code must have second letter T." +"\n" + "Course code not valid.");
    
            else if (Character.isLetter(s.charAt(2))) 
                System.out.println("Course code must have digit in third spot." +"\n" + "Course code not valid.");
            else if (Character.isLetter(s.charAt(3))) 
                System.out.println("Course code must have digit in fourth place." +"\n" + "Course code not valid.");
            else if (Character.isLetter(s.charAt(4))) 
                System.out.println("Course code must have digit in fifth place." +"\n" + "Course code not valid.");
            else if (Character.isLetter(s.charAt(5))) 
                System.out.println("Course code must have digit in sixth place." +"\n" + "Course code not valid.");         
        else  
              System.out.println("Course code is valid."  + s);
        }
    }
    }
    

4 个答案:

答案 0 :(得分:0)

对我而言,有一点很重要的是,为了检查输入,改进可能不是使用你可以做的双if语句:

if(String.valueOf(s.charAt(0)).equalsIgnoreCase('i'))

if(String.valueOf(s.charAt(1)).equalsIgnoreCase('t'))

这样做是为了检查这封信,无论其情况如何。

对于数字,你可以做一个for循环:

for(int x = 2; x <= 5; ++x){

   if (Character.isLetter(s.charAt(x)))

       System.out.println(....);
}

这些纯粹的改进不仅会让您的代码更好用,而且还会更整洁。

答案 1 :(得分:0)

这是测试所有String throw函数(如matches)的更好方法,但这需要您了解regular expressions,它可能是:

import java.util.Scanner;
public class Holatadeo2016 {
    public static void main(String[] args) {

       System.out.println("Amber's Copy");
        Scanner input = new Scanner(System.in);

        System.out.println("Enter a course code to validate (e.g. IT4872):");
        String s = input.nextLine();

        if(s.toLowerCase().matches("it[0-9][0-9][0-9][0-9]"))
            System.out.println("ok");
        else
            System.out.println("wrong");
    }
}

答案 2 :(得分:0)

这是另一种方法,希望它有用。

public static void main(String[] args) {
            try {
                System.out.println("Amber's Copy");
                Scanner input = new Scanner(System.in);

                System.out.println("Enter a course code to validate (e.g. IT4872):");
                String s = input.nextLine();

                boolean hasSixDigits = s.length() == 6;
                boolean startsWithI = String.valueOf(s.charAt(0)).equalsIgnoreCase("i");
                boolean secondLetterT = String.valueOf(s.charAt(1)).equalsIgnoreCase("t");
                //will throw NumberFormatException if the 4 last chars are not numbers
                Integer.parseInt(s.substring(2));

                if (hasSixDigits && startsWithI && secondLetterT){
                    System.out.println("Valid course code");
                }
                else {
                    System.out.println("Invalid course code");
                    if (!hasSixDigits) {
                        System.out.println("Code should be a six digit code");
                    } 
                    if (!startsWithI) {
                        System.out.println("Code should start with I or i");
                    } 
                    if (!secondLetterT) {
                        System.out.println("Code's second letter should be T or t");
                    }
                }
            }catch(NumberFormatException nfe){
                System.out.println("Not valid third to last should be digits");
            }

答案 3 :(得分:0)

从我看到您的代码有错误,它无法打印有效/无效的代码以&#39; i&#39;

开头

如果您提供以下输入&#34; IT ....&#34;它也会失败。 (.... = 4个空格,它们不是字母)

那么如果有多个错误怎么办?您只打印第一个由于嵌套&#34;否则如果&#34;。

要检查字符串java(和其他语言提供使用正则表达式的更好方法,请参阅下文:

public static void main(String[] args) {
        System.out.println("Amber's Copy");
        Scanner input = new Scanner(System.in);

        System.out.println("Enter a course code to validate (e.g. IT4872):");
        String s = input.nextLine();

        Pattern pattern = Pattern.compile("^([i|I])(t|T)([0-9])([0-9])([0-9])([0-9])$");
        Matcher m = pattern.matcher(s);

        if (m.matches()) {
            System.out.println("Course code is valid." + s);
        } else {
            if (s.charAt(0) != 'i' && s.charAt(0) != 'I') {
                System.out.println("Course Code must begin with the letter I.");
            }
            if (s.charAt(1) != 't' && s.charAt(1) != 'T') {
                System.out.println("Course Code must have second letter T.");
            }
            if (!Character.isDigit(s.charAt(2))) {
                System.out.println("Course code must have digit in third spot.");
            }
            if (!Character.isDigit(s.charAt(3))) {
                System.out.println("Course code must have digit in fourth place.");
            }
            if (!Character.isDigit(s.charAt(4))) {
                System.out.println("Course code must have digit in fifth place.");
            }
            if (!Character.isDigit(s.charAt(5))) {
                System.out.println("Course code must have digit in sixth place.");
            }
            System.out.println("Course code not valid.");
        }

    }