Отчет по оценкам в Java - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь создать программу, которая создает отчет об оценке ученика. Я хотел бы задать следующие вопросы, пожалуйста:

1 - Когда я запускаю программу, я сталкиваюсь с проблемой Exception в потоке "main" java.util.InputMismatchException (подробности см. Ниже).

2 - Как мне отформатировать вывод в таблицу? Я планирую иметь 5 столбцов: Класс, Описание, Единицы, Оценка и Очки оценок. Я не могу привести содержимое таблицы в соответствие с заголовками (класс, описание, единицы и т. Д.)

import java.util.*;
public class Project1 {
    public static void main(String args[])
    {
        Scanner scanner = new Scanner(System.in);

        //Input the term
        System.out.println("Please enter the term of your grade calculation (for example, Fall 2015): ");
        String term = scanner.nextLine();

        //Input the number of courses that the student is enrolled in
        System.out.println("Please enter the number of courses that you are enrolled in "+term+": ");
        int numberofcourses = scanner.nextInt();

        //Declaration
        String a[] = new String[numberofcourses];

        //Arrays for class number, description, units, grade, grades point
        //Here, input class number, description, units, and grades
        for(int i = 0; i < numberofcourses; i++)
        {
            System.out.println("Please enter the #"+(i+1)+" class name: ");
            String ClassName = scanner.nextLine();
            scanner.hasNextLine();
            System.out.println("Please enter the #"+(i+1)+" description: ");
            String Description = scanner.nextLine();
            scanner.hasNextLine();
            System.out.println("Please enter the #"+(i+1)+" units: ");
            int Units = scanner.nextInt();
            scanner.hasNextLine();
            int Grades = scanner.nextInt();
            scanner.hasNextLine();
        }
        System.out.println("Class Grades - "+term+" Term");
        System.out.println("Office Grades");
        System.out.println("Class \t \t Description \t \t Units \t \t Grade \t \t Grade Points");

        for(int i = 0; i < numberofcourses; i++)
        {
        System.out.println(a[i] + "\t \t");
        }
    }
}

Выход:

Please enter the term of your grade calculation (for example, Fall 2015): 
Fall 2016
Please enter the number of courses that you are enrolled in Fall 2016: 
2
Please enter the #1 class name: 
COMPSCI 172
Please enter the #1 description: 
Computer Science
Please enter the #1 units: 
Exception in thread "main" java.util.InputMismatchException
    at java.base/java.util.Scanner.throwFor(Scanner.java:939)
    at java.base/java.util.Scanner.next(Scanner.java:1594)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
    at Project1.main(Project1.java:29)

1 Ответ

0 голосов
/ 20 июня 2019

Итак, во-первых, у вас есть много чего, что нужно исправить, включая то, что я собираюсь исправить для вас.Если вы хотите вывести все классы в конце вместе, вам придется отредактировать мой код, чтобы сохранить отформатированные строки в массиве, а затем вывести их все вместе.

Я исправил вашу ошибку, добавив scanner.nextLine(); после вашей строки int numberofcourses = scanner.nextInt();.Вы должны сделать это, потому что scanner.nextInt() не использует терминатор строки и не переходит на следующую строку, так что это означает, что ваш следующий nextLine() испортится и попытается ничего не читать.Эта дополнительная строка гарантирует, что Scanner переместится на следующую строку.

Продолжая, у вас есть целая куча неправильно используемых scanner.hasNextLine();.Это возвращает логическое условие, которое позволяет узнать, существует ли следующая строка.В настоящее время вы не используете это логическое условие и просто ничего не делаете.Если вы хотите использовать это, вам нужно использовать его либо в операторе if, либо в цикле while.Я удалил все эти строки.

Наконец, для форматирования вашего оператора печати используйте String.format().Пример того, что я сделал для вывода ваших значений, показан ниже.Вы можете сохранить это в массиве String и вывести их все вместе позже.Дайте мне знать, если у вас есть другие вопросы.Вот полный код (я проверял его, и он работал нормально):

    Scanner scanner = new Scanner(System.in);

    //Input the term
    System.out.println("Please enter the term of your grade calculation (for example, Fall 2015): ");
    String term = scanner.nextLine();

    //Input the number of courses that the student is enrolled in
    System.out.println("Please enter the number of courses that you are enrolled in "+term+": ");
    int numberofcourses = scanner.nextInt();
    scanner.nextLine();

    //Declaration
    String a[] = new String[numberofcourses];

    //Arrays for class number, description, units, grade, grades point
    //Here, input class number, description, units, and grades
    for(int i = 0; i < numberofcourses; i++)
    {
        System.out.println("Please enter the #"+(i+1)+" class name: ");
        String ClassName = scanner.nextLine();

        System.out.println("Please enter the #"+(i+1)+" description: ");
        String Description = scanner.nextLine();

        System.out.println("Please enter the #"+(i+1)+" units: ");
        int Units = scanner.nextInt();

        System.out.println("Please enter the #"+(i+1)+" grades: ");
        int Grades = scanner.nextInt();

        System.out.println("Class Grades - "+term+" Term");
        System.out.println("Office Grades");
        System.out.println(String.format("Class: %s Description: %s Units: %d Grade: %d Grade Points", ClassName, Description, Units, Grades));
    }

А вот как выглядела моя консоль:

Please enter the term of your grade calculation (for example, Fall 2015): 
Fall 2012
Please enter the number of courses that you are enrolled in Fall 2012: 
1
Please enter the #1 class name: 
Comp Sci 2001
Please enter the #1 description: 
Computer Science
Please enter the #1 units: 
3
Please enter the #1 grades: 
95
Class Grades - Fall 2012 Term
Office Grades
Class: Comp Sci 2001 Description: Computer Science Units: 3 Grade: 95 Grade Points

Очевидно, что выходные данные могут быть отформатированы в любомкак вам нравится, соответственно, это просто быстрый макет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...