2017-09-23 13 views
-1

と私はecpliseで単純な配列テーブルを作成しようとしています。 3列の3列。 1列目と2列目はストリング、3列目はダブルスです。私はまた、ユーザーが間違いを犯した場合に、現在の行を書き換えるオプションも必要とします。単純な配列テーブル、不明なエラー

非常に簡単ですか?私は理解していないというエラーが出ています。誰かが私にそれを説明できますか?ここでのコードは次のとおりです。私はこれを実行すると

import java.util.Scanner; 

public class exercise923 
{ 
    public static void main(String args[]) 
    { 
     int counter = 0, check; //these are numbers used for the loops 
     String column1[] = new String[3]; //these are data for the table 
     String column2[] = new String[3]; 
     double column3[] = new double[3]; 
     Scanner Scan = new Scanner(System.in); 

     //this do while loop allows the user to enter data for the table 
     do { 
      System.out.println("type values for columns 1, 2, and 3 of line: " + counter); 
      column1[counter] = Scan.nextLine(); 
      column2[counter] = Scan.nextLine(); 
      column3[counter] = Scan.nextDouble(); 

      //after typing out the data for this line, user can type 1 to go to the next line, or 2 to rewrite this line 
      System.out.println("type 1 to continue, 2 to rewrite"); 
      check = Scan.nextInt(); 
      if (check==1) { 
       counter++; 
      } 
     } while (counter<3); 

     //once user is finished typing out all the data for the 3 lines 
     //of 3 columns, the table gets printed out. 
     counter=0; 
     System.out.println("your finished table:"); 

     do { 
      System.out.print(column1[counter] + "\t"); 
      System.out.print(column2[counter] + "\t"); 
      System.out.println(column3[counter]); 
      counter++; 
     } while (counter<3); 
    } // main 
} // class 

、私が手:

type values for columns 1, 2, and 3 of line: 0 
jack 
bob 
3 
type 1 to continue, 2 to rewrite 
2 
type values for columns 1, 2, and 3 of line: 0 
dale 
sally 
Exception in thread "main" java.util.InputMismatchException 
at java.util.Scanner.throwFor(Unknown Source) 
at java.util.Scanner.next(Unknown Source) 
at java.util.Scanner.nextDouble(Unknown Source) 
at exercise923.main(exercise923.java:21) 
+0

これがあなたに起こっているまさにです:のhttps://stackoverflow.com/a/5032408/3286487 –

+3

可能な重複[scanner.nextLine()を使用する](https://stackoverflow.com/questions/5032356/using-scanner-nextline) –

+0

私はそれを得ていません、ごめんなさい – sculpter

答えて

0

の操作を行います。

check = Scan.nextInt(); 

ループの最後で、それは、intを読み込み、ラインの終わりではありません。では、次のループ

column1[counter] = Scan.nextLine(); 

は、行の終わりを読みますので、最初に入力した値(あなたの例ではdaleが)によって読み込まれます。

column2[counter] = Scan.nextLine(); 

と次の行:

column3[counter] = Scan.nextDouble(); 

は、(sally)を入力してからDoubleを読み取ることができません。

可能な解決策は check = Scan.nextInt();後に単一 Scan.nextLine();を追加することです

do { 
     System.out.println("type values for columns 1, 2, and 3 of line: " + counter); 
     column1[counter] = Scan.nextLine(); 
     column2[counter] = Scan.nextLine(); 
     column3[counter] = Scan.nextDouble(); 
     //after typing out the data for this line, user can type 1 to go to the next line, or 2 to rewrite this line 
     System.out.println("type 1 to continue, 2 to rewrite"); 
     check = Scan.nextInt(); 
     Scan.nextLine(); 
     if (check==1) {counter++;}else {} 
}while (counter<3); 
+0

ありがとうございました!あなたは大丈夫ですか? – sculpter

+0

あなたは大歓迎です。あなたの質問の解決策として回答をマークすることを忘れないでください。 –

0

あなたは次の入力が二重であるかどうかをチェックするための入力を検証するために使用することができます。それは二重である場合だけにして先に行くと、二重変数に割り当て、あなたが使用するとそうではない

if(scan.hasNextDouble()) 
{ 
    id = keyboard.nextDouble(); 
} 
+0

コードのみの回答は解決方法を説明していないので、推奨されません。問題の問題。これが何をし、どのように問題を解決するかを説明するためにあなたの答えを更新することを検討してください - これはOPだけでなく、同様の問題を持つ他の人に役立ちます。 [良い答えを書くにはどうすればいいですか](https://stackoverflow.com/help/how-to-answer)を参照してください – FluffyKitten

+0

ありがとうございました – Rakesh0502