2016-08-25 10 views
0

を終了していない:は、Javaインプットメソッド私は、この問題をうまくしようとしている

入力

入力ストリームは、整数愛(0≤愛≤1018)のセットが含まれています。数字はスペースや改行で区切られます。入力ストリームのサイズは256 KBを超えません。

あなたは、出力の平方根をすべき最初の1までの最後の1からそれぞれ数愛のための出力

。各平方根は、小数点以下4桁以上の別の行に印刷する必要があります。


サンプル:

入力:

1427 0 

876652098643267843 

5276538 

出力:

2297.0716 

936297014.1164 

0.0000 

37.7757 

そして、ここに私のコードがある:

public class ReverseRoot 
{//start class 
    public static void main(String[] args) 
    {//start main 
     Scanner in = new Scanner(System.in); 
     ArrayList<Long> array = new ArrayList<Long>(); 
     array.add(in.nextLong()); 

     while(in.hasNextLong()) 
     { 
      array.add(in.nextLong()); 
     } 
     in.close(); 

     for (int i = array.size(); i > 0; i--) 
      System.out.printf("%.4f%n", Math.sqrt((double)array.get(i))); 
    }//end main 
}//end class 

誰でも取引が分かりますか?

+1

私は、これが問題である特定のことはこれで十分慣れていないんだけど、JavaDocのから:「次の()とのhasNext()メソッドおよびそのプリミティブ型(nextInt()やhasNextInt()などの)コンパニオンメソッドは、最初にデリミタパターンに一致する入力をスキップし、次のトークンを返そうとします。hasNextメソッドとnextメソッドの両方が、さらに入力待ちをブロックすることがあります。関連付けられている次のメソッドがブロックするかどうかには関係がありません。 " –

+0

whileループが無限に実行されています。あなたはどこかでそれを壊す必要があります – FallAndLearn

+0

@FallAndLearn長さの違う文字を入力するまで実行されます。 – Blobonat

答えて

0

リスト内の既存の要素にアクセスしようとすると、forループが機能しません。これに

変更ループ:

for (int i = array.size() - 1; i >= 0; i--) 
      System.out.printf("%.4f%n", Math.sqrt((double)array.get(i))); 
    } 

あなたはループの外array.add(in.nextLong());を持っていないのはなぜ?これを削除することができます。

入力を終了するには、非長文文字をコンソールに入力するだけです。

+0

彼が直面しているエラーは、入力中です。 – FallAndLearn

+0

@FallAndLearn私は自分のシステムで入力コードをテストしましたが、期待どおりに動作します。 – Blobonat

+0

@Blobonat私はループの外でそれを開始するために必要と思った、私は推測する??そうではないとします。とにかく、配列の長さは常に私を得るように見えるので、それが問題であることは理にかなっています。ありがとう! –

0

私が観察したように、2つのループが必要です。最初のループは '複数の行'用で、2番目のループは1行の '複数の長い値'用です。ここで

は一例です

public static void main(String[] args) throws Exception { 
     Scanner console = new Scanner(System.in); 
     Scanner lineTokenizer; 

     // this is to handle all 'lines' 
     while (console.hasNextLine()) { 
      String lineContent = console.nextLine(); 

      if (lineContent == null || lineContent.isEmpty()) { 
       // this is to exit the program if there is no input anymore 
       break; 
      } 
      lineTokenizer = new Scanner(lineContent); 

      // this is to handle a 'line' 
      while (lineTokenizer.hasNext()) { 
       if (lineTokenizer.hasNext()) { 
        long number = lineTokenizer.nextLong(); // consume the valid token 

        System.out.printf("%.4f%n", Math.sqrt((double) number)); 
       } 
      } 
      lineTokenizer.close(); // discard this line 
     } 

     console.close(); // discard lines. 
    } 
関連する問題