0

我的代码的这一部分没有按我的需要工作。我需要从菜单中选择 A、B 或 X,然后输入一个小句子用于描述(多个)成本数字。我可以完美地输入所有数据并返回菜单(仅在输入X后退出)。但是变量damageDesc的返回字符串只抓取空格之前的第一个单词。我已经尝试了一整晚,但仍然无法让它返回字符串中的所有单词。如果有人可以提供帮助,这是代码。谢谢!

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');
4

3 回答 3

1

也许,您需要使用nextLine() 来读取整行而不是next

于 2013-09-29T10:34:45.053 回答
0

通过将 Double 值更改为字符串,然后在输入完成后将它们转换回 double 来修复此问题。这解决了我遇到的扫描仪问题。这是有效的最终代码:

  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');
于 2013-09-29T12:11:04.400 回答
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):");

}

等等,以获得更有条理和干净的代码。分割是你最好的朋友。

于 2014-12-02T15:08:24.680 回答