2

さて、mm / dd/yyyyの形式で日付の適切な入力を読み取るだけのプログラムを作成することになっています。私がこれまでに学んだのは、if-elseステートメント、列挙型のビット、文字列処理、switchステートメントに触れただけで、それだけです。これを実行する最善の方法は、/の区切り文字を使用して、毎月の日と年の入力を別々にキャプチャすることであると考えましたが、以下に表示されているものを実行すると、プログラムは文字通り、入力後、たとえば1985年5月16日に停止します。 ......プログラムが実際にまだ実行されていることを明確にするために、何も起こりません(つまり、期待される文字列プロセスとその値の出力)。日付を入力すると何も起こらないのですが、なぜだろうと思っていました。区切り文字が機能しませんでしたか?区切り文字を間違った方法で使用することを考えていますか?それは私を狂わせます笑、どんなアドバイスもいいでしょう!

また、区切り文字の後に文字列を作成すること(以下を参照)と、nextInt .....を使用してINT値をキャプチャしようとすることの両方でこれを試したことも追加したいと思います。それでも同じことを行い、最初の日付入力後は何も起こりません。 ..。。

Scanner keyboard = new Scanner(System.in);

keyboard.useDelimiter("/");

String month = keyboard.next();
String day = keyboard.next();
String year = keyboard.next();

int monthi = Integer.parseInt(month);
int dayi = Integer.parseInt(day);
int yeari = Integer.parseInt(year);

System.out.println(monthi);
System.out.println(dayi);
System.out.println(yeari);
4

1 に答える 1

1

区切り文字を変更して、改行も含めるようにします。

keyboard.useDelimiter("[/\n]");

このようにして、最後の.next()呼び出しに解析するものがあります。を使用keyboard.hasNext()して、解析するものが残っているかどうかを判断することもできます (そうでない場合は、無効な日付が入力されたため、そのケースを処理したい場合があります)。

コードが現在の状態で永久に実行される理由は、3 つのnext()呼び出しを使用しているが、2 のみを提供しているため、以前のように\3 つ目を追加するとプログラムが終了します\が、もののリストに改行を追加することによって(\n文字)を区切るために、最後のnext()呼び出しは最後のスラッシュと改行の間にあるものを引き出します。

于 2013-02-02T19:08:44.953 に答える