Невозможно составить правильную таблицу, и вычисление среднего балла не возвращает правильную оценку - PullRequest
0 голосов
/ 21 июня 2019

Я пытаюсь создать программу, которая возвращает эквивалентную оценку для ввода пользователя (A, A-, B + и т. Д.), А затем создает отчет об оценке для пользователя.

Однако ястолкнулись с 2 проблемами:

  1. Моя программа не возвращает оценку, кроме "Недопустимая оценка".Неважно, вставляю ли я A, B, C, B + или что-то еще.

  2. Как мне сделать правильную двумерную таблицу массивов с первой строкой в ​​качестве заголовков?Я планирую иметь 5 столбцов: Class, Description, Units, Grade и Gradepoint.Затем, после первого ряда, в него будут входить пользователи.С моим текущим кодом программа возвращает что-то очень ... забавное.: (

Я вставил свой код ниже.

Спасибо за вашу помощь, ребята!

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 ClassName[] = new String[numberofcourses];
        String Description[] = new String[numberofcourses];
        String grade[] = new String[numberofcourses];
        int Units[] = new int[numberofcourses];
        double gradeValue = 0;

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


            Map<String, Double> gradeToScore = new HashMap<>();
            gradeToScore.put("A", 4.00);
            gradeToScore.put("A-", 3.67);
            gradeToScore.put("B+", 3.33);
            gradeToScore.put("B", 3.00);
            gradeToScore.put("B-", 2.67);
            gradeToScore.put("C+", 2.33);
            gradeToScore.put("C", 2.00);
            gradeToScore.put("D+", 1.33);
            gradeToScore.put("D", 1.00);
            gradeToScore.put("F", 0.0);
            gradeToScore.put("FX", 0.0);
            if(gradeToScore.containsKey(grade)) {
                gradeValue = gradeToScore.get(grade); 
            }else{
                System.out.println("Invalid Grade");
            }
        }

        //Print out the report

        //Print out the heading
        System.out.println("Class Grades - "+term+" Term");
        System.out.println("Office Grades");

        //Print out the table
            int columns = 5;
            int rows = numberofcourses;
            String[][] table = new String[rows][columns];
            String chain = "";
            {
                for (int i = 0; i < table.length; i++)
                {
                        for (int c = 0; c < table[0].length; c++)
                        {
                            chain += "|" + "Class" + "|" + "Description" + "|" + "Units" + "|" + "Grade" + "|" + "Gradepoints";
                        }
                            chain += "|\n";
                            chain += "|" + ClassName[i] + Description[i] + Units[i] + grade[i] + gradeValue;
                }
            System.out.println(chain);
            }
    }
}

Вот мой результат для приведенного выше кода:

Please enter the term of your grade calculation (for example, Fall 2015): 
Fall 2019
Please enter the number of courses that you are enrolled in Fall 2019: 
1
Please enter your #1 class name: 
FIN 301
Please enter your #1 class description: 
Personal Finance
Please enter your #1 class units: 
3
Please enter your #1 class grade: 
A
Invalid Grade
Class Grades - Fall 2019 Term
Office Grades
|Class|Description|Units|Grade|Gradepoints|Class|Description|Units|Grade|Gradepoints|Class|Description|Units|Grade|Gradepoints|Class|Description|Units|Grade|Gradepoints|Class|Description|Units|Grade|Gradepoints|
|FIN 301Personal Finance3A0.0

ПРИМЕЧАНИЕ:

Я попытался с System.out.format, но результат был не лучше. Вот мой код:

System.out.format("%30s %25s %10s %25s %10s %25 %10 %25 %10 %25", "Class", "|", "Description($)", "|", "Units", "|", "Grade", "|", "Grade Points");

Пробная версия 2 дляSystem.out.format ... точно не лучше:

System.out.format("%n%n%n%n%n", "|" + "Class" + "|" + "Description" + "|" + "Units" + "|" + "Grade" + "|" + "Gradepoints");
System.out.format("%n%n%n%n%n", ClassName[i], Description[i], Units[i], grade[i], gradepoint);

Должен быть какой-то синтаксис, но я должен прочитать где-нибудь для левого, правого, выравнивания по центру, или сколько места мне нужноpad. Пожалуйста, знайте, что я должен перейти к System.out.format, если я знаю синтаксис.

1 Ответ

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

Хорошо, я решил обойти мою первую проблему ... Вот мой частичный код для блока преобразования оценок:

    if (grade[i].equals ("A"))
        gradeValue= 4.00;
      else if (grade[i].equals("A-"))
        gradeValue= 3.67;
      else if (grade[i].equals("B+"))
        gradeValue = 3.33;
      else if (grade[i].equals("B"))
        gradeValue = 3.00;
      else if (grade[i].equals ("B-"))
        gradeValue = 2.67;
      else if (grade[i].equals("C+"))
        gradeValue = 2.33;
      else if (grade[i].equals("C"))
        gradeValue = 2.00;
      else if (grade[i].equals ("D+"))
      gradeValue = 1.33;
      else if (grade[i].equals ("D"))
        gradeValue = 1.00;
      else if (grade[i].equals ("F"))
        gradeValue = 0;
      else if (grade[i].equals ("FX"))
        gradeValue = 0;
      else
        System.out.println ("Invalid Grade");

Я все еще не уверен, как сделать правильную таблицу 2-D массивов. (

...