如何为无效用户输入添加例外?用户应输入名称,如果输入不是名称,我需要抛出异常

时间:2016-11-15 18:04:30

标签: java validation exception input error-handling

全新的Java,刚刚在上周五开始进行Javascript培训后开始。我有一个练习要求以下内容(我已经加粗我尚未完成的所有内容):

  • 提供有关班级学生的信息

  • 提示用户询问某位学生

  • 根据用户提交的信息提供适当的回复

  • 询问用户是否想了解其他学生

  • 帐户包含例外的无效用户输入

  • 尝试合并IndexOutOfBoundsException和 抛出:IllegalArgumentException

  • 让用户轻松 - 告诉他们可以获得哪些信息

  • 使用并行数组来保存学生数据

我已经搜索了StackOverflow的答案,并发现了许多有用的东西,但这似乎与整数有关,而不是字符串......虽然它可能只是我的愚蠢的猴子大脑。

我不相信"尝试合并IndexOutOfBoundsException和    抛出:IllegalArgumentException"教学是一项要求,所以不要觉得你必须包含这些内容。

任何有用的提示或方向都会让我非常感激......并且请不要嘲笑我的代码,尽管建设性的批评很有必要。

没有进一步的麻烦:

import java.util.Arrays;
import java.util.Scanner;

public class Students {
    private static String[] students = {"John", "Ben", "Lisa", "Stewart", "Cora"};
    private static int[] grades = {79, 86, 90, 89, 99};

    public static void main(String args[]) {
        System.out.println(Arrays.toString(students));

        Scanner kb = new Scanner(System.in);
        boolean userChoice = true;
        String userInput;
        String choice;

        while(userChoice) {
            System.out.println("Please enter a Student's name to get their grade: ");

            userInput = kb.nextLine();

            getGrades(userInput);

            System.out.println("Continue? (y/n)");

            choice = kb.nextLine();

            if (choice.equalsIgnoreCase("n")) {
                userChoice = false;
            }
        }
        kb.close();
    }

    private static void getGrades(String userInput) {
        int length = students.length;

        for(int i = 0; i < length; i++) {
            if(userInput.equals(students[i])) {
                System.out.println(userInput + "'s " + "grade is: " + grades[i]);
            }
        }
    }
}

这是我输出的一个例子:

  

[John,Ben,Lisa,Stewart,Cora]

     

请输入学生的姓名以获得成绩:

     

     

Ben的成绩是:86

     

继续? (Y / N)

     

ý

     

请输入学生的姓名以获得成绩:

     

莉莎

     

Lisa的成绩是:90

     

继续? (Y / N)

     

名词

     

处理完成,退出代码为0

顺便说一下,虽然我今天刚刚报名参加了这个问题的帮助,但这个社区在学习Javascript时对我来说是个天赐之物,所以这是对你所有光荣的混蛋的正式感谢!

1 个答案:

答案 0 :(得分:0)

我自己想出来:P

结束从我的学生数组创建一个列表并使用contains方法将用户输入与我的学生列表进行比较,如果输入与数组中的学生不匹配,则会抛出异常并打印“Not a valid”学生的名字“并询问您是否要输入其他名称。

import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

public class Students {
    private static String[] students = {"John", "Ben", "Lisa", "Stewart", "Cora"};
    private static int[] grades = {79, 86, 90, 89, 99};
    private static String[] behavior = {"aggressive", "distractable", "attentive", "disruptive", "angelic"};
    private static List myList = Arrays.asList(students);


    public static void main(String args[]) {

        Scanner kb = new Scanner(System.in);
        boolean userChoice = true;
        String userInput;
        String choice;

        while(userChoice) {

            System.out.println(myList);

            System.out.println("Please enter a student's name (case-sensitive) to get their progress report: ");

            userInput = kb.nextLine();

            try {
                if (myList.contains(userInput)) {
                    getGrades(userInput);
                } else {
                    throw new IllegalArgumentException();
                }
            } catch (IllegalArgumentException e) {
                System.out.println("Not a valid student's name");
            }

            System.out.println("Would you like to enter another student's name? (y/n)");

            choice = kb.nextLine();

            if (choice.equalsIgnoreCase("n")) {
                userChoice = false;
            }
        }
    }

    private static void getGrades(String userInput) {
        for(int i = 0; i < students.length; i++) {
            if(userInput.equals(students[i])) {
                System.out.println(userInput + "'s " + "grade is " + grades[i] + " and they are " + behavior[i]);
            }
        }
    }
}