【问题标题】:while loop, switch statementwhile循环,switch语句
【发布时间】:2014-10-26 22:16:32
【问题描述】:

当我输入“p”情况时遇到问题,完成后它会再次重复我的 while 循环的顶部,最后用户必须在“输入”变量中放入一些东西。问题是用户永远不会被提示输入任何内容以进行“输入”,然后它再次循环,重新打印之前刚刚打印的所有信息。第二次确实允许用户输入一些东西以进行“输入”。这只发生在我运行“p”案例之后。

有人请帮助我!将不胜感激!

package PayandGoParking;

/**
 * Purpose: Input:
 *
 * Processing done:
 *
 * Output:
 *
 * @author (your name)
 * @version (a version number or a date)
 */
import java.util.Scanner;
import java.util.*;
import java.io.*;
import java.text.DecimalFormat;

public class Assignment2 {

 public static void main(String[] args) throws IOException {

  Calendar now = Calendar.getInstance();
  Scanner k = new Scanner(System.in);
  DecimalFormat dm = new DecimalFormat("00");

  String input = " ",
    cardNumber,
    x = "x";
  double anyKey;

  double currentTime,
    currentCharge = 0,
    securityCode,
    totalCharge = 0;

  Calendar paidTill;

  int min = 0;

  while (input != x) {
   System.out.println("Welcome to Pay and Go parking");
   System.out.println("+ to add 30 minutes ($1.00 charge)");
   System.out.println("p to print the ticket");
   System.out.println("r to restart");
   System.out.println("x to exit the program");
   System.out.print("Please enter your selection: ");
   input = k.nextLine();
   switch (input) {
    case "+":
     min += 30;
     currentCharge += 1;
     paidTill = (Calendar) now.clone();
     paidTill.add(Calendar.MINUTE, min);
     System.out.println("================================================");
     System.out.printf("%s%s%s%s%s%.2s%s%.2s\n", 
       "Current Time: ", now.get(Calendar.MONTH),
       "-", now.get(Calendar.DAY_OF_MONTH), " ", now.get(Calendar.HOUR_OF_DAY), ":", 
       dm.format(now.get(Calendar.MINUTE)));
     System.out.printf("%s%s%s%s%s%.2s%s%.2s\n", 
       "Paid Till: ", paidTill.get(Calendar.MONTH),
       "-", paidTill.get(Calendar.DAY_OF_MONTH),
       " ", paidTill.get(Calendar.HOUR_OF_DAY), ":",
       dm.format(paidTill.get(Calendar.MINUTE)));
     System.out.printf("%s%.2f\n", "Current Charge $", currentCharge);
     System.out.println("================================================");
     break;

    case "p":
     System.out.print("Enter Credit Card Number: ");
     cardNumber = k.nextLine();
     System.out.print("Enter 3 digit security code from back of Credit Card: ");
     securityCode = k.nextDouble();
     System.out.println("=================================================");
     System.out.println("Pay and Go Parking");
     System.out.println("Lot Location: 123 Main St,");
     System.out.println("Honolulu, Hawaii");
     System.out.println("-----------------------------");
     totalCharge += currentCharge;
     paidTill = (Calendar) now.clone();
     paidTill.add(Calendar.MINUTE, min);
     System.out.printf("%s%s%s%s%s%.2s%s%.2s\n", "Current Time: ", 
       now.get(Calendar.MONTH), "-",
       now.get(Calendar.DAY_OF_MONTH), " ", now.get(Calendar.HOUR_OF_DAY), 
       ":", dm.format(now.get(Calendar.MINUTE)));
     System.out.printf("%s%s%s%s%s%.2s%s%.2s\n", 
       "Paid Till: ", paidTill.get(Calendar.MONTH),
       "-", paidTill.get(Calendar.DAY_OF_MONTH),
       " ", paidTill.get(Calendar.HOUR_OF_DAY), ":",
       dm.format(paidTill.get(Calendar.MINUTE)));
     System.out.printf("%s%.2f\n", "Total charged to Credit Card $", currentCharge);
     System.out.println("==========================================");
     System.out.println("Tear off receipt and place on dash");
     System.out.print("Press any key to continue");
     anyKey = k.nextDouble();
     System.out.println("================================================");
     paidTill = (Calendar) now.clone();
     System.out.printf("%s%s%s%s%s%.2s%s%.2s\n", "Current Time: ", 
       now.get(Calendar.MONTH), 
       "-", now.get(Calendar.DAY_OF_MONTH), " ", 
       now.get(Calendar.HOUR_OF_DAY), ":", dm.format(now.get(Calendar.MINUTE)));
     System.out.printf("%s%s%s%s%s%.2s%s%.2s\n", 
       "Paid Till: ", paidTill.get(Calendar.MONTH),
       "-", paidTill.get(Calendar.DAY_OF_MONTH),
       " ", paidTill.get(Calendar.HOUR_OF_DAY), ":",
       dm.format(paidTill.get(Calendar.MINUTE)));
     currentCharge = 0;
     min = 0;
     System.out.printf("%s%.2f\n", "Current Charge $", currentCharge);
     System.out.println("================================================");
     break;

    case "r":
     currentCharge = 0;
     min = 0;
     paidTill = (Calendar) now.clone();
     System.out.println("================================================");
     System.out.printf("%s%s%s%s%s%.2s%s%.2s\n",
       "Current Time: ", now.get(Calendar.MONTH),
       "-", now.get(Calendar.DAY_OF_MONTH), " ",
       now.get(Calendar.HOUR_OF_DAY), ":",
       dm.format(now.get(Calendar.MINUTE)));
     System.out.printf("%s%s%s%s%s%.2s%s%.2s\n", 
       "Paid Till: ", paidTill.get(Calendar.MONTH),
       "-", paidTill.get(Calendar.DAY_OF_MONTH), 
       " ", paidTill.get(Calendar.HOUR_OF_DAY),
       ":", dm.format(paidTill.get(Calendar.MINUTE)));
     System.out.printf("%s%.2f\n", "Current Charge $", currentCharge);
     System.out.println("================================================");
     break;

    case "x":
     input = x;
     break;
   }
  }
  System.out.println("\nTotals for Pay and Go Parking");
  System.out.println("========================");
  System.out.printf("%s%12s%7.2f\n", "Totals", "$", totalCharge);

 }

}

【问题讨论】:

  • 请先帮助我们,将代码示例减少到说明问题的可管理大小。
  • 请向我们展示mcve 示例 - 此外,您可能会在编写新代码 sn-p 时发现问题。

标签: java while-loop switch-statement


【解决方案1】:

您应该首先解决的问题之一是第 44 行:

while (input != x)

应该是:

while (!input.equals(x)) 

比较两个字符串时使用 == 或 != 不会检查它们是否相等 字符/单词,但如果它们等于相同的字符串,则表示指向内存中的相同位置。

我无法运行程序来测试它,因为我没有你的包“PayandGoParking”。 而且您的代码太长,无法通读以查找更多问题。 修复此问题后,尝试使出现问题的代码更简洁。

【讨论】:

    【解决方案2】:

    这可能是因为您使用 System.out.print 时没有刷新。刷新意味着强制将 System.out 内部使用的输出缓冲区发送到监视器。只有 println 保证将您打印的内容发送到监视器。除非您的字符串中某处有换行符,否则常规 System.print 不会。试试看

     System.out.print("Please enter your selection: ");
     System.out.flush();
    

    事实上,在每次尝试收集用户输入之前尝试添加 System.out.flush()。 或者在要打印的字符串中添加新行

     System.out.print("Please enter your selection: \n");
    

    【讨论】:

      猜你喜欢
      • 2013-12-20
      • 1970-01-01
      • 2018-09-16
      • 2023-04-10
      • 2013-04-13
      • 2023-03-03
      • 2021-03-08
      • 2013-10-21
      • 2015-12-23
      相关资源
      最近更新 更多