私は宿題に取り組んでいますが、私は割り当てによって何が求められているのかを少し上にしています。私は自分のコードでランタイムエラーが発生しています。私の人生にとって、私が間違っていたことを理解できません。ここでJava:ランタイムエラーが2つわかりません
は割り当てです:
は、シミュレートされた給料を表示するプログラムを書きます。プログラムは、日付、受取人の名前、および小切手の額を入力するようにユーザに尋ねる必要があります。その後、ドル金額を記入した模擬小切手が表示されます。
は、ここに私のコードです:
CheckWriter:私は言葉に番号から名前、日付、通貨、および変換の検証を処理するために外部のクラスファイルを使用しています
/* CheckWriter.java */
// Imported Dependencies
import java.util.InputMismatchException;
import java.util.Scanner;
public class CheckWriter {
public static void main(String args[]) {
Scanner keyboard = new Scanner(System.in);
// Try to get the name
String name = "";
NameValidator validateName = new NameValidator();
while (validateName.validate(name) == false) {
System.out.println("Enter the name: ");
name = keyboard.nextLine();
if (validateName.validate(name) == false) {
System.out.println("Not a valid name.");
}
}
// Get the date
String date = "";
DateValidator validateDate = new DateValidator();
while (!validateDate.validate(date)) {
System.out.println("Enter the date (dd/mm/yyyy): ");
date = keyboard.nextLine();
if (!validateDate.validate(date)) {
System.out.println("Not a valid date.");
}
}
// Try to get the amount of the check
String checkAmount = "";
CurrencyValidator validateCurrency = new CurrencyValidator();
while (!validateCurrency.validate(checkAmount)) {
System.out.print("Enter the Check Amount (XX.XX): $");
checkAmount = keyboard.nextLine();
if (!validateCurrency.validate(checkAmount)) {
System.out.println("Not a valid check amount.");
}
}
String checkWords = checkToWords(checkAmount); // ERROR! (48)
System.out
.println("------------------------------------------------------\n"
+ "Date: "
+ date
+ "\n"
+ "Pay to the Order of: "
+ name
+ " $"
+ checkAmount
+ "\n"
+ checkWords
+ "\n"
+ "------------------------------------------------------\n");
}
private static String checkToWords(String checkAmount) {
/**
* Here I will use the string.split() method to separate out
* the integer and decimal portions of the checkAmount.
*/
String delimiter = "\\.\\$";
/* Remove any commas from checkAmount */
checkAmount.replace(",", "");
/* Split the checkAmount string into an array */
String[] splitAmount = checkAmount.split(delimiter);
/* Convert the integer portion of checkAmount to words */
NumberToWords intToWord = new NumberToWords();
long intPortion = Long.parseLong(splitAmount[0]); // ERROR! (84)
intToWord.convert(intPortion);
String intAmount = intToWord.getString() + " dollars";
/* Convert the decimal portion of checkAmount to words */
String decAmount = "";
long decPortion = Long.parseLong(splitAmount[1]);
if (decPortion != 0) {
NumberToWords decToWord = new NumberToWords();
decToWord.convert(Long.parseLong(splitAmount[1]));
decAmount = " and " + decToWord.getString() + " cents.";
}
return (intAmount + decAmount);
}
}
注意。これらのクラスファイルはすべて意図どおりに動作します。
私は取得していますエラーは次のとおりです。私はラインをコメントしている ""
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Long.parseLong(Unknown Source)
at java.lang.Long.parseLong(Unknown Source)
at CheckWriter.checkToWords(CheckWriter.java:82)
at CheckWriter.main(CheckWriter.java:46)
:入力文字列の場合:スレッド "メイン" java.lang.NumberFormatExceptionで
例外私が経験しているエラーを引き起こしている私のコード。
誰かが私のコードが間違っている場所を見つけ出すのを助けてくれますか?他のクラスファイルが必要と思われる場合は、それを含めることができます。
EDIT:コードを実行すると、名前と日付が尋ねられます。小切手の額を尋ねる前に、それはエラーを投げる時です。
編集2:巨大なcotton.mに感謝!彼のアドバイスのおかげで、私はこのように見えるようにしながら文を変更しました:
while(!validateDate.validate(date) && date == "")
これが今の私の問題を修正しました。正規表現でデータを検証すると、空の文字列がtrueを返すように見えます。
デバッガを使用して、splitAmount [0]の値がエラーの行にあることをお知らせください。 – nolt2232
空の文字列でLong.parseLongを呼び出しています。あなたはそれをすることはできません。最初に空の文字列をテストします。 –
ここに貼り付けた例外は、エラーがどの行にあるかを明確に示しています。 "parseLong"メソッドに入力されている値を表示して(デバッガの使い方がわからない場合は)何を表示するのはなぜですか? – eternaln00b