2017-03-25 5 views
-1

コンソールから大量の数字を読み込み、空白で区切って入力する必要があります。これらは0から10^9までのすべての数字になります。char配列の桁数はJavaの同じ入力で異なります

以下のコードは小さな入力でも動作しますが、ファイルhereのようなデータの場合、間違った結果が表示されます。実行するたびに違います(添付ファイルの場合は968364)。

私は間違っていますか?ループ内でメソッドやクラスを使用することはできません。プリミティブ型で動作する必要がありますが、明らかに何か不足しています。

ご協力いただきありがとうございます。

int input_size = 0; 
     char[] input = new char[1000000]; 
      InputStreamReader in = new InputStreamReader(System.in); 
      in.read(input); 
      for(int a = 0; a<input.length; a++){ 
       if (input[a] >= 48 && input[a] <= 57){ 
        input_size ++; 
       } 
      } 
      System.out.println(input_size); 
+0

を終了するまで、それはあなたがわずか1万字を読ん千文字のチャンクで入力を読み込むようにコードを編集したが、あなたの入力ファイルに1,110万文字あるので、入力ファイルの約10%が欠落しています –

+0

はい、修正しましたが、それでも問題は解決しません。 –

+0

私の回答を表示してください。私は正しい出力を得る(968364)。 –

答えて

0

は、私はそれは

public static void main(String[] args) throws IOException { 
    char[] input = new char[1000]; 
    int input_size = 0; 
    int readChars; 

    //Reader in = new InputStreamReader(System.in); 
    Reader in = new FileReader("572be-stud3.txt"); 
    do { 
     readChars = in.read(input); 
     for (int a = 0; a < readChars; a++) { 
      if (input[a] >= 48 && input[a] <= 57) { 
       input_size++; 
      } 
     } 
    } while((readChars < 0) || (input[readChars-1] != '\n')); 
    in.close(); 

    System.out.println(input_size); 
} 
1

最初はin.read()が読み込んだ文字数を返します。 intint[])のデフォルト値は0であるため、その値を保存する必要があります。次に、有効なascii値をハードコーディングする代わりに'0''9'を使用できますが、Character.isDigit(char)を使用することをお勧めします。同様に、あなたはファイル全体を読んでいない

InputStreamReader in = new InputStreamReader(System.in); 
int readLen = in.read(input); 
for (int a = 0; a < readLen; a++) { 
    if (Character.isDigit(input[a])) { 
     input_size++;    
    } 
    // if (input[a] >= '0' && input[a] <= '9') { 
    // input_size++; 
    // } 
} 
System.out.println(input_size); 
+0

"if"の条件をあなたが提案したものに変更しました。しかし、input_sizeの値は引き続き別の値を返していますが、2400120桁のファイルがあり、毎回結果が間違っています。 int x = in.read(input)の結果を表示すると、次のようになります。データの一部だけをロードするたびに表示されます。私は配列のサイズを10 mlnに増やしましたが、それでもやはりうまくいきません。なぜこのように動作するのかわかりません。 –

+0

'readLen'も使いましたか?これは本当にここで最も重要なことなので、あなたの配列はデフォルトで '10,000,000 'のゼロでいっぱいです(固定長です)。 –

関連する問題