2016-05-26 4 views
1

私はHackerRankの問題を解決するために努力してきました。私は現在のものを稼働させることができたが、不必要なコードが含まれていると感じ、誰かが私に悪い習慣を拾うのが嫌なので、それをより良くする方法を教えてもらえる。不要なscan.nextLine()を置き換える方法を改善しました。 StdIn Stringを見つけるには?

このレッスンでは、HackRankコード30日目(2日目)、Stdinから3行(Int、Double、String)を読み込み、スキャナを使用してそれらを読み取り、保存して操作してください。 INTとダブル用

Scanner scan = new Scanner(System.in); 

    /* Declare second integer, double, and String variables. */ 
    int myI = scan.nextInt(); 
    double myDouble = scan.nextDouble(); 
    scan.nextLine(); 
    String myString = scan.nextLine(); 

スキャンが十分に簡単だったが、私はいくつかの問題に遭遇した文字列をスキャンしようとしたときに:私はscan.nextを使用した場合

A)();私は完全な文字列の代わりに1つの単語を得た。

B)scan.nextLine()を使用した場合。私は空白の行を戻しました。

私はちょうどscan.nextDouble()を行ったので、それを示唆している人がいました。 scan.nextLine();その行の最後に空白を読み込んでいただけです(これはあまり意味がありませんでした)。そして、余分な "scan.nextLine();"私の文字列を宣言する前にそれは動作するはずです。

もちろんです。私は本当に理由を理解していないし、これを解決するための正しい方法だとは思わない。それを頻繁にやらなければならないのであれば、コードを膨らませることになるでしょうか?

誰でも上のいくつかの光を当てることができます:

1)なぜscan.nextLine();私は余分なものを追加するまで空白に戻りましたか?

2)スキャンから文字列を見つけるより良い方法はありますか?

答えて

1

scan.nextLine()は、次の改行または\ nまでのすべてを返します。だから、私は入力を想定してい

はこのような何かを見て:

1 2.5 
whatever 

ので、この文字列は、実際に最初の行、2行目の間に次の行区切り文字を持っています。前に、あなたがその余分なnextLine()を持っていなかったとき、あなたの文字列は次の行区切り文字を消費していたので、空の文字列に割り当てられていました。

余分なnextLine()が不要な次の行区切り文字を消費していたため、文字列を必要なものに割り当てることができました。

+0

これは、問題を回避するのに役立ちます。nextDoubleを使用して、私はその行全体ではなくダブルを選択していました。 これについてもっと雄弁な解決策がありますか? – AdamSC

+1

@ AdamS.Cochran私が知る限り、実際にはありません。これは私が今使っている方法です。また、これが正しいとマークすることをお勧めします。 – coolioasjulio

1

コードをより少ない行で記述するために、改行文字を読み込んで、同じ行にmyDoubleを解析することができます。

int myI = scan.nextInt(); 
    double myDouble = Double.parseDouble(scan.nextLine()); 
    String myString = scan.nextLine(); 
+0

これは行数が少ないのと同じですが、実際には同じ数の処理が行われるため、プロセス集中度は低いとは思いませんが、形式は確かに優れています。私は余分な "nextLine"を必要とせずにそれを行う方法があるかどうかもっと尋ねていたと思います。 – AdamSC

0

scan.nextLine();
なぜこれがありますか?私はそれがなぜそれを台無しにするのかと思う。
また、私はそれをやることを学んだ方法はこれのようです。

System.out.println("Enter String"); 
    String string = read.nextLine(); 
+0

上記のコードスニペットはそのまま動作しています。私はちょうど良い方法があるかどうかを知りたがっていました。また、入力が1つしかない場合、メソッドは機能します。このテストケースでは、Int、Double、およびStringを同時に3つの入力に渡しています。 – AdamSC

関連する問題