2015-02-08 25 views
0

我遇到了一些與我的程序輸出有關的問題。我確信錯誤是合乎邏輯的,但我只是無法解決它。錯誤應該在這裏某處錯誤輸出嵌套開關大小寫錯誤?

String plusorminus ="+-"; 

char mark = plusorminus.charAt(0); 
char modifier = 0; 

if(plusorminus.length() >= 1) 
{ 
    modifier = plusorminus.charAt(1); 
} 

/*This is my utility scanner, 
* I created char grade to get the user input. 
*/ 
java.util.Scanner input=new java.util.Scanner(System.in); 
String userInputString = input.nextLine(); 
char grade = userInputString.charAt(0); 

我不知道如何解決它。目前,如果我在程序中插入A +,它會給我A-的結果。下載我的完整代碼。

public class SwitchCase { 

public static void main(String[] args) { 

System.out.println("Please enter your grade (ex.A+) to get the mark range"); 

/*This block of codes converts from string to 
* char and it gets the plus or minus sign 
*/ 
String plusorminus ="+-"; 

char mark = plusorminus.charAt(0); 
char modifier = 0; 

if(plusorminus.length() >= 1) 
{ 
    modifier = plusorminus.charAt(1); 
} 

/*This is my utility scanner, 
* I created char grade to get the user input. 
*/ 
java.util.Scanner input=new java.util.Scanner(System.in); 
String userInputString = input.nextLine(); 
char grade = userInputString.charAt(0); 

/*This set of code contains the nested switch statements 
* that i will use to output the correct mark range 
* to the user. It also contains a try statement to find runtime 
* errors in the program. 
*/ 
try{ 
switch(grade) 
{ 
    case 'A': 
     switch(modifier) 
     { 
      case '+': System.out.println("Your grade is 90-99.99%"); break; 
      case '-': System.out.println("Your grade is 80-84.99%"); break; 
      default: System.out.println("Your grade is 85-89.99%"); break; 
     } 
     break; 
    case 'B': 
     switch(modifier) 
     { 
      case'+': System.out.println("Your grade is 77.00 - 79.99%"); break; 
      case'-': System.out.println("Your grade is 70.00 - 72.99%"); break; 
      default: System.out.println("Your grade is 73.00 - 76.99%"); break; 
     } 
     break; 
    case 'C': 
     switch(modifier) 
     { 
      case'+': System.out.println("Your grade range is 67.00 - 69.99%"); break; 
      case'-': System.out.println("Your grade range is 60.00 - 62.99%"); break; 
      default: System.out.println("Your grade range is 63.00 - 66.99%"); break; 
     } 
     break; 
    case 'D': 
     switch(modifier) 
     { 
      case'+': System.out.println("Your grade range is 55.00 - 59.99%"); break; 
      case'-': System.out.println("-"); break; 
      default: System.out.println("Your grade range is 50.00 - 54.99%"); break; 
     } 
     break; 
    case 'F': 
     switch(modifier) 
     { 
      default: System.out.println("Your grade range is 0.00-49.99%"); break; 
      }  
     break; 
     } 
} 
catch (java.util.InputMismatchException e) { //if the above error is met, message will be sent to the user 
       System.out.println("Please enter a valid grade!"); 
     } 
input.close(); //ends the user input 
    } 
} 
+0

'modifier = plusorminus.charAt(1);'做什麼?它何時執行? – 2015-02-08 16:30:54

+0

有沒有'E'級? – laune 2015-02-08 16:41:38

回答

0

char grade = userInputString.charAt(0); 

後添加

char modifier = ' '; 
if(userInputString.length() > 1){ 
    modifier = userInputString.charAt(1); 
} 

和刪除處理plusorminus的代碼。

您應該在閱讀輸入行後添加一些代碼以避免打嗝。

userInputString = userInputString.trim(); // maybe user hits space? 
if(! userInputString.matches("^[A-F][-+]?$")){ 
    // error message... 
} 

不確定是否有E和F +或F-?我們有不同的成績。也許正則表達式應該是

"^[A-E][-+]?|F$" 
0

你可能會插入

A+ 

,但你只消費A

String userInputString = input.nextLine(); 
char grade = userInputString.charAt(0); 

modifier被分配,確定性地,這裏

String plusorminus ="+-"; 

char mark = plusorminus.charAt(0); 
char modifier = 0; 

if(plusorminus.length() >= 1) 
{ 
    modifier = plusorminus.charAt(1); 
} 

plusorminus長度將總是2這意味着modifier將總是plusorminus.charAt(1),即。 -。您想要將輸入字符串的第二個字符分配爲modifier