Как вы можете присвоить значение точки определенной строке или символу? Например, если вы хотите присвоить А 4 балла, как вы это сделаете?

avatar
Viren Khandal
8 апреля 2018 в 03:17
212
1
0
import java.util.Scanner;

public class ScannerDemo {

    public static void main (String[] args) {
        //Open scanner
        Scanner keyboard = new Scanner(System.in);

        //Enter letter grade in class 1
        System.out.println("Enter number of points from class 1: ");
        String A = keyboard.next();

        //Enter letter grade in class 2
        System.out.println("Enter number of points from class 2: ");
        String B = keyboard.next();                

        //Enter letter grade in class 3
        System.out.println("Enter number of points from class 3: ");
        String C = keyboard.next();                 

        //Enter letter grade in class 4
        System.out.println("Enter number of points from class 4: ");
        String D = keyboard.next();  

        //Enter letter grade in class 5
        System.out.println("Enter number of points from class 5: ");
        String E = keyboard.next(); 

        //Enter letter grade in class 6
        System.out.println("Enter number of points from class 6: ");
        String F = keyboard.next();   

        //Close the scanner                   
        keyboard.close();

        double Aconverted = Double.parseDouble(A);
        double Bconverted = Double.parseDouble(B);
        double Cconverted = Double.parseDouble(C);
        double Dconverted = Double.parseDouble(D);
        double Econverted = Double.parseDouble(F);
        double Fconverted = Double.parseDouble(E);

        //Calculate the total points
        double TotalPoints = Aconverted + Bconverted + Cconverted + Dconverted + Econverted + Fconverted;
        double GPA = TotalPoints / 6;
        System.out.println("Total Points: " + TotalPoints);
        System.out.println("GPA: " + GPA);
    }
}

Этот код пытается определить средний балл по 4-балльной шкале. Я пытался сделать Scanner с Int, однако я просто экспериментировал, работает ли он с буквами/строками. Double Aconverted и тому подобное предназначены для преобразования значений точек каждой строки в значение точек, которое может быть двойным или целым числом. Значения указаны в списке: A = 4, B = 3, C = 2, D = 1, F = 0.

Источник
royalghost
8 апреля 2018 в 03:35
1

Если это просто A..F, вы можете переключить регистр, в противном случае используйте любую структуру данных ключ-значение, такую ​​как HashMap<Character, Integer> для хранения сопоставления.

Ответы (1)

avatar
Dawood ibn Kareem
8 апреля 2018 в 04:17
0

Одним из решений является массив. Создайте и заполните его следующим образом.

int[] grades = new int['F' + 1];
grades['A'] = 4;
grades['B'] = 3;
grades['C'] = 2;
grades['D'] = 1;
grades['F'] = 0;

Теперь вы можете просто посмотреть значение, когда оно вам понадобится.

char myGrade = 'A';
if (myGrade >= 'A' && myGrade <= 'F' ) {
    int myGradeAsANumber = grades[myGrade];
}

Обратите внимание, что при создании массива указанное вами измерение должно быть на единицу больше, чем самая старшая буква, которую вы ожидаете найти. Если вы ошибетесь, вы можете получить ArrayIndexOutOfBoundsException.

Matt Ball
8 апреля 2018 в 17:55
0

Использование массива — довольно дерзкое решение. Это решение выделит целую кучу ненужных элементов, поскольку значение int 'A' равно 65, а не нулю. Вместо этого используйте Map<Character, Integer>.

Dawood ibn Kareem
8 апреля 2018 в 18:10
0

Просто чтобы уточнить, @MattBall, под «кучей ненужных элементов» вы подразумеваете целых 260 байтов. Я согласен, если вы пишете это для компьютера 1970-х годов, это может иметь большое значение. Просто для сравнения: класс HashMap и интерфейс Map между ними будут занимать чуть более 48 КБ памяти JVM при загрузке.