2017-10-13 12 views
1

で削除文字を保存するには、それはこれがtxtファイルから私の入力されたStringBufferで削除された文字を保存したり、「I」インデックス に1以外のすべての文字を削除することは可能です:どのようにStringBuilderの

3;8;4;5;3;2 
3 4 5 1 2 3 
9;8;3;2;3;4 
9 8 9 7 8 1 

私は各行を集計し、どれが偶数の大部分であるかを見なければならないので、全体の行を読み、スペースで区切り文字列ビルダーの助けを借りて、「i」の位置以外のすべての文字を削除することにしました最後に二次元配列で保存します。 あなたはそれをどうやってより良いアイデアを持っているでしょうか?

マイコード:

package Operacje_na_plikach; 

import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.Arrays; 
import java.util.Scanner; 

public class Zad3 { 
    /* 
    Plik tekstowy ‘dane.txt’ ma postać: 
3;8;4;5;3;2 
3 4 5 1 2 3 
9;8;3;2;3;4 
9 8 9 7 8 1 
Pobierz z pliku tekstowego kolejne wiersze liczb i wypisz na ekranie numer wiersza, w którym występuje najwięcej elementów parzystych. 
    */ 
    public static String[][] odczyt(String nazwa) 
    { 
     String[][] arr = new String[1][1]; 
     int[] suma = new int[1]; 
     int max = -1; 
     int wiersz=-1; 
     String text = null; 
     try { 
      FileReader reader = new FileReader(nazwa); 
      Scanner sc = new Scanner(reader); 
      while(sc.hasNextLine()) 
      { 
       arr=Arrays.copyOf(arr,arr.length+1); 
       text = sc.nextLine().replaceAll(";"," "); 
       int[] temp= new int[text.length()]; 
       StringBuilder sb = new StringBuilder(text); 
       for (int i = 0; i <temp.length ; i++) { 
       temp[i]=sb.delete(); 
       } 
       for (int i = 0; i < ; i++) { 
        for (int j = 0; j < ; j++) { 
         arr[i][j] = text 
        } 
       } 
      } 

      /* while (sc.hasNextLine()) 
      { 
       arr=Arrays.copyOf(arr,arr.length+1); 
       text = sc.nextLine().replaceAll("[;]"," "); 

       for (int i = 0; i <arr.length ; i++) { 
        while(text!=null) 
        { 
         int temp = Integer.parseInt(text); 
        } 
        for (int j = 0; j <arr.length ; j++) { 

         arr[i][j] = text.nextInt(); 
         if(arr[i][j]%2==0) 
         { 
          suma[i]+=arr[i][j]; 
          if(suma[i]>max) 
          { 
           max = suma[i]; 
           wiersz=i; 
          } 
         } 
        } 
       } 
      } 
      System.out.println("Najwiecej liczb parzystych jest w wierszu: " + wiersz); 
*/ 



      sc.close(); 
      reader.close(); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return arr; 
    } 

    public static void main(String[] args) { 
     int[][] arr = odczyt("dane.txt"); 
    } 
} 
+0

明確にするために - 出力は、あなたが何でありますこのファイルを取得する予定ですか? – Mureinik

+0

偶数の和が最大である行の数 –

答えて

0

私はあなたが上に複雑なものかもしれないと思います。ファイルの行をストリーミングして解析し、偶数の合計にマップすることができます。その後、(ちょうどそれの楽しみのために、また、ストリームで行うことができます)和のアレイの上に移動して、最大の要素のインデックスを見つけることができます:

long[] sums = 
    Files.lines(Paths.get("dane.txt")) 
     .mapToLong(s -> Arrays.stream(s.split("[ ;]")) 
           .mapToInt(Integer::parseInt) 
           .filter(i -> i % 2 == 0) 
           .sum()) 
     .toArray(); 

int lineNum = 
    IntStream.range(0, sums.length) 
      .boxed() 
      .max(Comparator.comparingLong(i -> sums[i])) 
      .get(); 
+1

ありがとう、しかし、あなたのソリューションが私のスキルを超えているので、私はそれを見た方法でそれを行いました。私はまだJavaを学んでいるし、私はまさに私が行ったような問題を解決することから遠いと思う。私はレベルにあります:オブジェクト指向プログラミングの紹介:Dしかし、ありがとう! –