2017-11-23 12 views
0
import java.util.*; 
import java.io.*; 

public class Animal1 { 
    public static void main(String [] args) throws IOException { 
     ArrayList<Animal> animalFile = new ArrayList<>(); 

     try { 
      BufferedReader br = new BufferedReader(new FileReader("animal.txt")); 
      String fileRead = br.readLine();    
      while (fileRead != null) {     
       String[] tokenSize = fileRead.split(":"); 
       String animalName = tokenSize[0]; 
       int maxLength = Integer.parseInt(tokenSize[1]); 
       Animal animalObj = new Animal(animalName, maxLength); 
       animalFile.add(animalObj); 
       fileRead = br.readLine(); 
      } 
      br.close(); 
     } 
     catch (FileNotFoundException e){ 
      System.out.println("file not found"); 
     } 
     System.out.println("The three largest animals are: "); 
    }  
} 

これは私のコードでは、これまでのところ、それは私の動物ファイルからデータを抽出し、私は、ファイル内の各オブジェクトのために作成したアレイの出力です。 Javaで配列を比較するにはどうすれば3番目に大きい動物をプリントアウトすることができますか?私は最大長と共に改行にAnimalの名前を印刷したいと思います。比較配列 - Javaの

+0

by whあなたは最大の動物を決めますか? –

+0

私はコード – User786

+0

を更新しました。** NIO **と呼ばれる新しいI/Oライブラリを 'Files'、' Paths'と 'Path'の周りで動かすことを検討してください。 'Files#lines'を使って行単位で読むことができます。 – Zabuza

答えて

0

あなたはこのように行うことができます3匹の最大の動物印刷するには:3つの最初のもの

  • printkeepその後、最大の最初の
  • を取得するために、逆の順序でmaxLengthのリストにそれらを

    • sort
    animalFile.stream() 
          .sorted(Comparator.comparingInt(Animal::getMaxLength).reversed()) 
          .limit(3) 
          .forEach(a -> System.out.println(a.animalName + ", length " + a.maxLength)); 
    

    getMaxLength()第1の方法は、ソートされたこの1 yesのリストを保持しません


    ゲッターメソッドです:あなたが行うことができ

    animalFile.stream() 
          .sorted(Comparator.comparingInt(Animal::getMaxLength).reversed()) 
          .limit(3) 
          .forEach(e -> { /* do logic */ }); 
    
  • +0

    コンパレータを使用する方が簡単でしょうか? – User786

    +0

    @Mudz "the"コンパレータ?どれ ? – azro

    +0

    'Collections.sort(list、new Dog());'コレクションを使って配列をソートして比較する – User786

    0

    Collections.sort(animalFile, Collections.reverseOrder(Comparator.comparingInt(a-> a.getMaximumLength()))); 
    
    System.out.print("The 3 largest animals are: "); 
    
    animalFile.subList(0, 3).stream().forEach(n -> System.out.print(n.animalName + " ")); 
    
    0

    :何か

    Collections.sort(animalFile,Comparator.comparingInt(Animal::getMaxLength).reversed()); 
    animalFile.stream().limit(3).forEach(System.out::println); //Will use toString() you write 
    
    +0

    animalNameはエラーとして出てきます: 'スレッド"例外 "main" java.lang.RuntimeException:互換性のないソースコード - animalNameはtask1 .Animal' – User786

    +0

    @ User786 OPは私たちにAnimalクラスを示さなかったので、いくつかの前提が作られなければなりません。おそらく、AnimalクラスはanimalNameに使用するゲッターを持っています。この場合、n.animalNameはn.getAnimalName()に変更する必要があります。動物クラスを見ることなく確実に知る方法はありません。 – smitty1