2013-09-29 22 views
0

我的代碼的這一部分不工作,因爲我需要它。我需要從菜單中選擇A,B或X,然後輸入一個用於描述(多個)成本數字的小句子。我可以完美地輸入所有數據,並返回菜單(只有在輸入X後才退出)。但變量damageDesc的返回字符串只是在空格之前抓取第一個單詞。我已經嘗試了這一整夜,仍然無法讓它返回字符串中的所有單詞。這裏的代碼,如果任何人都可以幫助。謝謝!Java掃描器不返回多個字變量

do { 
    System.out.println("Damage Repair/Traffic Infringement Data Entry "+ 
     "Menu"); 
    System.out.println("-------------------------------------------------"+ 
     "---"); 

    System.out.println(); 

    System.out.println("A - Record Damage Repair Details"); 
    System.out.println("B - Record Traffic Infringement Details"); 
    System.out.println("X - Exit"); 

    System.out.println(); 

    System.out.print("Enter your selection (A/B/X):"); 
    menuOption = console.next().charAt(0); 

    switch (menuOption) { 

     case 'A': 
     case 'a': 
      System.out.print("Enter description of damage repair: "); 
      damageDesc = console.next(); 
      console.nextLine(); 
      System.out.print("Enter repair cost: "); 
      damageCost= console.nextDouble(); 
      //Place damage description and cost on seperate lines 
      damageDescFinal = String.format(damageDescFinal + "- %s ($%.2f) \n", damageDesc, damageCost); 

      //Also could have used the below 
      //damageDescFinal = (damageDescFinal+"- "+damageDesc+ 
      // " ($"+damageCost+")"+"\n"); 

      //All damage costs added together 
      damageCostFinal = damageCostFinal + damageCost; 
      System.out.println(); 
     break; 


     case 'B': 
     case 'b': 
      System.out.print("Enter details of traffic infringement: "); 
      fineDesc = console.next(); 
      console.nextLine(); 
      System.out.print("Enter traffic fine amount: "); 
      fineCost = console.nextDouble(); 
      //Set fine description and cost on seperate lines 
      fineDescFinal = String.format(fineDescFinal + "- %s ($%.2f) \n", fineDesc, fineCost); 

      //Also could have used the below 
      //fineDescFinal = fineDescFinal+"- "+fineDesc+ 
      // " ($"+fineCost+")"+"\n"; 
      //All fine costs added together 
      fineCostFinal = fineCostFinal + fineCost; 
      System.out.println(); 
      break; 

     case 'X': 
     case 'x': 
      //Exit the damage and fine menu 
      System.out.print("Exiting data entry menu..."+"\n"); 
      System.out.println(); 
      break; 

     default: 
      //Error handling for invalid input 
      System.out.print("***ERROR*** Invalid Selection!"+"\n"); 
      System.out.println(); 
      break; 

    } 
    } while (menuOption != 'X' && menuOption != 'x'); 

回答

1

也許,你需要使用nextLine()通過改變雙值轉換爲字符串讀修正這一整條生產線,而不是next

+0

將代碼行添加到代碼damageDesc = console.next();不會返回變量中的文本..... –

0

自己再轉換回以一個雙輸入分別爲後完了。這解決了我遇到的掃描儀問題。以下是最終的代碼:

do { 
    System.out.println("Damage Repair/Traffic Infringement Data Entry "+ 
     "Menu"); 
    System.out.println("-------------------------------------------------"+ 
     "---"); 
    System.out.println(); 
    System.out.println("A - Record Damage Repair Details"); 
    System.out.println("B - Record Traffic Infringement Details"); 
    System.out.println("X - Exit"); 
    System.out.println(); 
    System.out.print("Enter your selection (A/B/X):"); 
    menuOption = console.next().charAt(0); 

    //Switch to allow either upper or lower case menuOption 
    switch (menuOption) { 

     case 'A': 
     case 'a': 
      System.out.print("Enter description of damage repair: "); 
      //Clear scanner 
      console.nextLine(); 
      //Input damage description 
      damageDesc = console.nextLine(); 
      System.out.print("Enter repair cost: "); 
      //Input damage cost 
      damageCost= console.nextLine(); 
      //Convert string fineCost back to a double 
      //This was input as a String as scanner produces an error 
      double doubleDamageCost = Double.parseDouble(damageCost); 
      //Set damage description and cost on seperate lines for each input 
      damageDescFinal = String.format(damageDescFinal + "- %s ($%.2f) \n", damageDesc, doubleDamageCost); 
      //Concatenate all fine costs for a final value 
      damageCostFinal = damageCostFinal + doubleDamageCost; 
      System.out.println(); 
      break; 

     case 'B': 
     case 'b': 
      System.out.print("Enter details of traffic infringement: "); 
      //Clear scanner 
      console.nextLine(); 
      //Input fine description 
      fineDesc = console.nextLine(); 
      System.out.print("Enter traffic fine amount: "); 
      //Input fine cost 
      fineCost = console.nextLine(); 
      //Convert string fineCost back to a double 
      //This was input as a String as scanner produces an error 
      double doubleFineCost = Double.parseDouble(fineCost); 
      //Set fine description and cost on seperate lines for each input 
      fineDescFinal = String.format(fineDescFinal + "- %s ($%.2f) \n", fineDesc, doubleFineCost); 
      //Concatenate all fine costs for a final value 
      fineCostFinal = fineCostFinal + doubleFineCost; 
      System.out.println(); 
      break; 

     case 'X': 
     case 'x': 
      //Exit the damage and fine menu 
      System.out.print("Exiting data entry menu..."+"\n"); 
      System.out.println(); 
      break; 

     default: 
      //Error handling for invalid input 
      System.out.print("***ERROR*** Invalid Selection!"+"\n"); 
      System.out.println(); 
      break; 

    } 
    //Exits menu loop and allow code to continue 
    } while (menuOption != 'X' && menuOption != 'x'); 
0

爲什麼不在這種情況下使用.ToLowerCase或.ToUperCase?這樣你可以得到一個更乾淨的代碼

do { 
     System.out.println("Damage Repair/Traffic Infringement Data Entry "+ 
       "Menu"); 
     System.out.println("-------------------------------------------------"+ 
       "---"); 
     System.out.println(); 
     System.out.println("A - Record Damage Repair Details"); 
     System.out.println("B - Record Traffic Infringement Details"); 
     System.out.println("X - Exit"); 
     System.out.println(); 
     System.out.print("Enter your selection (A/B/X):"); 
     Scanner console = new Scanner(System.in); 
     menuOption = console.next().toLowerCase().charAt(0); 

     //Switch to allow either upper or lower case menuOption 
     switch (menuOption) { 


      case 'a': 
       System.out.print("Enter description of damage repair: "); 
       //Clear scanner 
       console.nextLine(); 
       //Input damage description 
       damageDesc = console.nextLine(); 
       System.out.print("Enter repair cost: "); 
       //Input damage cost 
       damageCost= console.nextLine(); 
       //Convert string fineCost back to a double 
       //This was input as a String as scanner produces an error 
       double doubleDamageCost = Double.parseDouble(damageCost); 
       //Set damage description and cost on seperate lines for each input 
       damageDescFinal = String.format(damageDescFinal + "- %s ($%.2f) \n", damageDesc, doubleDamageCost); 
       //Concatenate all fine costs for a final value 
       damageCostFinal = damageCostFinal + doubleDamageCost; 
       System.out.println(); 
       break; 

      case 'b': 
       System.out.print("Enter details of traffic infringement: "); 
       //Clear scanner 
       console.nextLine(); 
       //Input fine description 
       fineDesc = console.nextLine(); 
       System.out.print("Enter traffic fine amount: "); 
       //Input fine cost 
       fineCost = console.nextLine(); 
       //Convert string fineCost back to a double 
       //This was input as a String as scanner produces an error 
       double doubleFineCost = Double.parseDouble(fineCost); 
       //Set fine description and cost on seperate lines for each input 
       fineDescFinal = String.format(fineDescFinal + "- %s ($%.2f) \n", fineDesc,    doubleFineCost); 
       //Concatenate all fine costs for a final value 
       fineCostFinal = fineCostFinal + doubleFineCost; 
       System.out.println(); 
       break; 

      case 'x': 
       //Exit the damage and fine menu 
       System.out.print("Exiting data entry menu..."+"\n"); 
       System.out.println(); 
       break; 

      default: 
       //Error handling for invalid input 
       System.out.print("***ERROR*** Invalid Selection!"+"\n"); 
       System.out.println(); 
       break; 

     } 
     //Exits menu loop and allow code to continue 
    } while (menuOption != 'x'); 

,但你應該做的像

Public void menu(){ 

System.out.println("Damage Repair/Traffic Infringement Data Entry "+ 
    "Menu"); 
System.out.println("-------------------------------------------------"+ 
    "---"); 
System.out.println(); 
System.out.println("A - Record Damage Repair Details"); 
System.out.println("B - Record Traffic Infringement Details"); 
System.out.println("X - Exit"); 
System.out.println(); 
System.out.print("Enter your selection (A/B/X):"); 

}

等,更多的類來獲得更有條理,乾淨的代碼。 segementation是你最好的朋友。