0

コードを実行すると、InputMismatchException があると表示されますか? 最初の 2 つの読み取り行で機能しますが、int と double-lines を読み取ろうとすると、実際には読み取れず、string-line は実際には変数に何も読み取らず、何も出力しないため空です。 system.out.println(a +b) で... ヒントはありますか?

import java.util.*;
import java.io.*;

class Uke55{
    public static void main(String[]args){
    Scanner input=new Scanner(System.in);
    try{
        PrintWriter utfil=new PrintWriter(new File("minfil55.txt"));
        utfil.println('A');
        utfil.println("Canis familiaris betyr hund");
        utfil.println(15);
        utfil.printf("%.2f", 3.1415);
        utfil.close();
    }catch(Exception e){
        e.printStackTrace();
    }
    try{
        Scanner innfil=new Scanner(new File("minfil55.txt"));
        char a=innfil.next().charAt(0);
        String b=innfil.nextLine();
        System.out.println(a +b);
        int c=(int)innfil.nextInt();
        double d=(double)innfil.nextDouble();
        innfil.close();
    }catch(Exception e){
        e.printStackTrace();
    }
    }
}
4

4 に答える 4

1

これは、next()、nextInt()、および nextDouble() を使用すると、新しい行に移動しないためです。newLine() だけがカーソルを次の行に移動します。これを行う:

try{
    Scanner innfil=new Scanner(new File("minfil55.txt"));
    char a=innfil.nextLine().charAt(0); //first error was here. calling next() only
                                        //read A and not the \r\n at the end of the 
                                        //line. Therefore, the line after this one was 
                                        //only reading a newline character and the 
                                        //nextInt() was trying to read the "Canis" line.
    String b=innfil.nextLine(); 
    System.out.println(a +b);
    int c=(int)innfil.nextInt(); 
    innfil.nextLine(); //call next line here to move to the next line.
    double d=(double)innfil.nextDouble();
    innfil.close();
}
catch(Exception e){
    e.printStackTrace();
}

next()、nextInt()、nextDouble()、nextLong() などはすべて空白 (行末を含む) の直前で停止します。

于 2013-10-16T07:30:57.053 に答える
0

これは、ファイルに次のものがあるためです。

A\n
Canis familiaris betyr hund\n
15\n
3.14

where\nは改行文字を表します。

初めて電話するとき

innfil.nextLine().charAt(0)

それは を読み取りA、スキャナの読み取りポイントは最初に\n

それからあなたは電話します

innfil.nextLine()

それはまで読み取ります\n(までnextLine()読み取り、\nスキャナー読み取りポインターを過去に置きます\n)、読み取りポインターを過去にし\nます。読み取りポインタはC次の行の at になります。

それからあなたは電話します

innfil.nextInt()

当たり前!スキャナはCanis整数として認識できません。入力が一致しません!

于 2013-10-16T07:42:32.617 に答える