0

以下に、私が問題を抱えているコードをいくつか示します。基本的な考え方は、既存のテキスト ファイルを新しいファイルに単純にコピーすることですが、新しいファイルが存在する場合は、3 つのオプションが与えられます。他のスイッチ ケースは問題なく動作しますが、この最後の 3 番目のケースは、まったく思い通りに動作しません。

基本的にこれは、以前に選択したファイル名が既に存在する場合に新しいファイル名を選択できるようにするための選択ですが、オプションとして 3 を選択すると、最初に「新しい名前を入力してください:」という行を出力し、すぐに次のファイルにスキップします。FileNotFoundExceptionユーザーが新しい名前を入力できるようにするコードを完全にバイパスしますが、その理由はわかりません。助言がありますか?

            System.out.println("Type a new name:");                 
            String retryName = keyboard.nextLine();                                     
            try
            {
                outputStream = new PrintWriter(retryName);
            }
            catch (FileNotFoundException e)
            {
                System.out.println("Error creating file " + retryName + "!");
                System.out.println("The program will now close.");
                System.exit(0);
            }
            while (inputStream.hasNextLine())
            {
                outputStream.println(inputStream.nextLine());                       
            }
4

2 に答える 2

4

try / catch; の前に retryName を確認してください。retryName には何が含まれていますか? ユーザーがコードの前半でオプションを選択できるようにするコードの一部としてキャプチャしていない新しい行が含まれているに違いありません。

于 2013-05-18T23:29:05.367 に答える
4

Ahmed が示唆したように、おそらくnextandなどのメソッドを使用していてnextInt、 を呼び出す前に行末記号を破棄するのを忘れていnextLineます。

回避策としてこれを試してください:

keyboard.nextLine(); // discard the line break 
String retryName = keyboard.nextLine(); 
于 2013-05-18T23:34:57.540 に答える