Tôi gặp sự cố khi tải chương trình của mình để phản hồi các đầu vào trống. Ví dụ: giả sử tôi muốn nhắc người dùng nhập giá trị bằng tiền với loại BigDecimal
cũng như loại tiền tệ. Đây là những gì chương trình trong câu hỏi trông như thế nào.Làm thế nào để có được máy quét Java để xác nhận đầu vào trống?
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter the amount of money "
+ "and specify currency (USD or CNY): ");
// initialize variable moneyInput
BigDecimal moneyInput;
// check if moneyInput is numeric
try {
moneyInput = input.nextBigDecimal();
} catch (InputMismatchException e){
System.err.println("InputMismatchException: non-numeric value");
return;
}
// specify currency of moneyInput
String currencyType = input.next();
...
}
Vì vậy, tại đây, đầu vào như 100.00 USD
, hoạt động tốt.
Enter the amount of money and specify currency (USD or CNY): 100.00 USD
$100.00 USD ≈ ¥670.17 CNY
Đầu vào như ASDF USD
kết quả phù hợp trong thông báo lỗi.
Enter the amount of money and specify currency (USD or CNY): ASDF USD
InputMismatchException: non-numeric value
Nhưng, làm cách nào để chương trình phản hồi các đầu vào trống, hoặc nhấn ngay phím quay lại hoặc nhập một loạt dấu cách vào dòng đầu tiên? Ví dụ:
Enter the amount of money and specify currency (USD or CNY):
1000.00 USD
$1000.00 USD ≈ ¥6701.70 CNY
Trong ví dụ trên, người dùng chỉ có thể nhấn phím return vô thời hạn cho đến khi có thể đọc được (hợp lệ hoặc không hợp lệ). Tôi muốn thực hiện một số cách để kiểm tra xem người dùng đã nhấn phím quay lại mà không nhập bất kỳ điều gì có ý nghĩa.
Một kết quả khác mà tôi không biết cách giải thích là nếu người dùng nhập CHỈ giá trị tiền tệ, sau đó nhấn [return] một loạt lần trước khi cuối cùng nhập tiền tệ.
Ví dụ:
Enter the amount of money and specify currency (USD or CNY): 100.00
USD
$100.00 USD ≈ ¥670.17 CNY
Làm thế nào để có được chương trình để nhắc nhở người dùng với một cái gì đó giống như Please specify the currency:
sau khi một giá trị số là đầu vào và ép người dùng [trở lại]? Một cái gì đó như
Enter the amount of money and specify currency (USD or CNY): 100.00
Please specify the currency: USD
$100.00 USD ≈ ¥670.17 CNY
tôi đã có thể để đạt được các chức năng trên bằng cách thay đổi các phần sau khối try-catch để:
input.nextLine();
System.out.print("Please specify the currency: ");
String currencyType = input.nextLine();
Nhưng sử dụng phương pháp này, chương trình sẽ mất khả năng cho phép người sử dụng để nhập cả moneyInput
và currencyType
vào một dòng, như trong ví dụ đầu tiên. (Và một lần nữa, vẫn có vấn đề khi có thể nhấn [return] vô thời hạn cho mỗi nhắc nhở này cho đến khi có thể đọc được thứ gì đó cuối cùng).
Cảm ơn bạn đã đọc và xin lỗi vì bài đăng dài.
Xin chào, bạn có thể vui lòng cho biết cách sử dụng phương thức phân tích cú pháp với 'line.split (" \\ s + ")' để đạt được kết quả tương tự không? Tôi không quen với phương pháp đó nên tôi gặp khó khăn với cú pháp. Cảm ơn –
Đã thêm các ví dụ khác. – dimo414
Ok, làm cách nào tôi có thể kiểm tra riêng xem liệu 'tiền tệ' có hợp lệ không? Tôi muốn nó hoạt động giống như 'moneyInput', tức là nếu một cái gì đó như' 100.00 abc' hoặc '100.00' được nhập vào, người dùng được nhắc nhiều lần cho' currency' chỉ, và một khi họ nhập một loại tiền tệ hợp lệ như ' USD', chương trình tiếp tục bình thường. Tôi đã thử sử dụng vòng lặp do-while khác bên trong để kiểm tra tiền tệ, và điều này làm việc ngoại trừ khi một đầu vào trống được nhập, mà về cơ bản là cùng một vấn đề tôi đã có ở đầu bài đăng này (đây là mã của tôi: http: // pastebin .com/raw/CT0qjBPk và ảnh chụp màn hình chương trình: http://imgur.com/a/mjfaL). –