我的问题与我已经上交的作业有关 - 但是我想根据我编码的内容(这有些要求)找出我失败的地方,我做了什么,以及是否有更好的方法。认真的新手要清楚。
我已经阅读了多个之前提出的问题,并尝试将这些问题汇总在一起。
任务是让用户输入六位数代码 - 必须符合这些规范:
如果输入的代码匹配 - 返回是“课程代码验证”它的返回是“课程代码无效”,原因不是。
在下面粘贴我的代码文本。任何反馈将不胜感激。
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);
}
}
}
答案 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.");
}
}