2014-02-08 3 views
0

начинающий на Java здесь. Поэтому я застрял в том, как я буду делать это, если пользовательский ввод «A +», я получу 4.0 и не выше? Аналогично для «F» я хочу сделать так, чтобы F, F-, F + все приводили к 0.0 gpa. Я подумал, что я собираюсь поставить специальные параметры для букв A и F или просто ввести «ограничение» или «колпачок», так сказать, на GPA. То, что я имею в виду, это сделать так, чтобы мой двойной «gpa» мог быть только значениями 0-4.0. Любой метод, который, по вашему мнению, работает лучше всего, в порядке, я просто так не знаком с синтаксисом и словарем Java, что я не знаю, с чего начать.письмо класс к программе GPA

Вот мой код:

import java.util.*; 
public class HomeworkCalculator { 
    public static void main(String[] args) { 
     Scanner in = new Scanner(System. in); 
     String grade, letter1, letter2; 
     System.out.print("Enter a letter grade: "); 
     grade = in .nextLine(); 
     letter1 = grade.substring(0, 1); 
     letter2 = grade.substring(1, 2); 

     double gpa = 0; 

     if (letter1.equals("A")) { 
      gpa = 3.9; 
     } else if (letter1.equals("B")) { 
      gpa = 3.0; 
     } else if (letter1.equals("C")) { 
      gpa = 2.1; 
     } else if (letter1.equals("D")) { 
      gpa = 1.2; 
     } else if (letter1.equals("F")) { 
      gpa = 0; 
     } 

     if (letter2.equals("+")) { 
      System.out.println(gpa + 0.3); 
     } else if (letter2.equals("-")) { 
      System.out.println(gpa - 0.3); 
     } 


    } 
} 

Я попытался индивидуально кодирование пользовательского ввода «A +», чтобы быть равным только 4,0 в конце программы, но тогда выход только дает мне 4.0, а затем 4.2 после этого когда мне нужно только 1 значение. Затем я попытался добавить разрыв или возврат, чтобы увидеть, могу ли я сделать это так, чтобы ЕСЛИ вход был «A +», он автоматически просто закончил бы код прямо тогда и там - надеюсь, что прекратили бы любые дополнительные выходы, но это не так, т.

Любые предложения?

+1

Если это был мой код, я бы создал перечисление, например, под названием «Класс», и свяжите каждую строку с числовым значением и константой перечисления. –

ответ

2

Другая возможность заключается в том, что в конце всего участка кода, можно добавить:

if (gpa > 4) gpa = 4; 
if (gpa < 0) gpa = 0; 
if (letter1.equals("F") && letter2.equals("+")) gpa = 0; 
+0

Никаких кубиков, все равно дает мне 4.2 для A +, .3 для F +, -.3 для F-. – SJSharks

+0

, потому что вы печатаете значение плюс или минус 3 в конце вашего раздела, вместо того, чтобы изменять переменную как таковую. –

+0

Не знаете, что вы имеете в виду? Я добавил код в самом конце, и он все еще дает мне неправильные значения. Я добавил функцию печати в конце вашего добавления, чтобы получить результат. Он работает, но я снова получаю 2 gpas. – SJSharks

0
if (letter1.equals("A") && letter2.equals("+")) gpa = 4.0; 
else if(letter1.equals("A")) 
{gpa = 3.9;} 
else if(letter1.equals("B")) 
{gpa = 3.0;} 
else if(letter1.equals("C")) 
{gpa = 2.1;} 
else if(letter1.equals("D")) 
{gpa = 1.2;} 
else if(letter1.equals("F")) 
{gpa = 0;} 

if (!letter1.equals("F")) { 
    if(letter2.equals("+") && !letter1.equals("A")) gpa += 0.3; 
    else if(letter2.equals("-")) gpa -= 0.3; 
} 
+0

Нет значений gpa для этого кода. – SJSharks

+0

Распечатайте их прямо после. например скопируйте эту строку: System.out.println (gpa); –

0

Наивное решение здесь:

package testgrade; 

import java.util.*; 

public class Tg { 

public static void main(String[] args) { 
    Scanner in = new Scanner(System.in); 
    String grade; 
    System.out.print("Enter a letter grade: "); 
    grade = in.nextLine(); 
    double gpa = 0.0; 
    boolean bad_entry = false; 
    int entered_grade_len = grade.length(); 
    // Verify entered content 
    if (entered_grade_len <= 2 && entered_grade_len > 0) { 
     if((grade.substring(0).toUpperCase() == "A") || 
      (grade.substring(0).toUpperCase() == "B") || 
      (grade.substring(0).toUpperCase() == "C") || 
      (grade.substring(0).toUpperCase() == "D") || 
      (grade.substring(0).toUpperCase() == "F")) 
     { 
      switch(entered_grade_len) 
      { 
      case 2: 
       if((grade.substring(1) == "+") || 
        (grade.substring(0).toUpperCase() == "-")) 
       break; 
      default: 
       bad_entry = true; 
       break; 
      } 

     } 
    } 
    if(bad_entry) 
    { 
     System.out.println("Usage: Enter grades in the normal spectrum from A(+/-) to F"); 
     System.out.println("eg: A+, B-, D+, C, F..."); 
     return; 
    } 
    String lettergrade = grade.substring(0,1).toString().toUpperCase(); 
    switch (lettergrade) { 
    case "A": 
     gpa = 4.0; 
     break; 
    case "B": 
     gpa = 3.0; 
     break; 
    case "C": 
     gpa = 2.0; 
     break; 
    case "D": 
     gpa = 1.0; 
     break; 
    case "F": 
     gpa = 0.0; 
     break; 
    default: 
     break; 
    } 
    if (grade.length() > 1) { 
     lettergrade = grade.substring(1, 2); 
     switch (lettergrade) { 
     case "+": 
      if (gpa <= 3 && gpa >= 1.0) 
       gpa += 0.3; 
      break; 
     case "-": 
      if (gpa <= 4 && gpa >= 1.0) 
       gpa -= 0.3; 
      break; 
     default: 
      break; 
     } 
    } 
    System.out.println(gpa); 
    in.close(); 
} 
} 

Это можно было бы улучшить тонну с некоторые регулярные выражения для сравнений, но для быстрой и грязной работы. (A = 3.9? Bah ... но вы могли бы сделать так, как указано выше, если gpa = 4 и grade.length() = 1) gpa - = 0,1)

+0

это слишком высокое значение. -level для меня, я постараюсь сломать ваше решение, чтобы изучить некоторые новые вещи. – SJSharks