[英]while loop, switch statement
輸入“ p”大小寫時出現問題,完成后它再次重復我的while循環的頂部,最終用戶必須在其中輸入“ input”變量。 問題是用戶永遠不會被提示輸入任何內容作為“輸入”,然后再次循環,重新打印以前剛剛打印的所有信息。 圍繞它的第二次確實允許用戶放入一些東西作為“輸入”。 這僅在我運行“ 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);
}
}
您應該解決的第一個問題是第44行:
while (input != x)
應該:
while (!input.equals(x))
比較兩個字符串時,使用==或!=不會檢查它們是否等於相同的字符/單詞,但不等於相同的字符串/含義意味着指向內存中的同一位置。
我沒有運行程序來測試它,因為我沒有您的軟件包“ PayandGoParking”。 而且您的代碼太長,無法通讀以查找更多問題。 解決此問題后,請嘗試使出現問題的代碼更簡潔。
這可能是因為您使用的是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");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.