2016-04-11 11 views
0

Bir metin dosyası okudum ve eclipse okumadan problemsiz. Sorun şu ki, FileReader'dan sayıları nasıl tutabileceğimi bilmiyorum. Programımın, dosyalarının okul puanlarıyla 2 isme sahip olduğu bir dosyadan bir metni okuması gerekiyor. ÖrneğinBir metin dosyasındaki sayıları nasıl okuyabilir ve karşılaştırabilirim?

:

Jack 30 30 30
Martin 20 30

20 nasıl daha puanla birini bulabilirim?

public static void main(String[] args) { 
    String name = null; 
    try { 
     Scanner keybord = new Scanner(System.in); 
     System.out.println("enter in file name"); 
     String filename = keybord.nextLine(); 
     Scanner file = new Scanner(new File(filename)); 

     while (file.hasNext()) 
     { 
      name = file.nextLine(); 
      System.out.println(name); 

      ///?? what do i have to write to compare to persons points 
     } 
    } catch(IOException e) { 
     System.out.println("The file does not exist"); 
    } 
} 
+0

biri Bir yöntemin nasıl çalıştığını ve ne yaptığını anlamak için belirli sınıfların/kütüphanelerin API'sini okumak. Bu durumda: ['Scanner # nextLine()'] (https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html#nextLine--). Bu, burada aramak istediğiniz yöntem değildir. Bunun yerine 'Tarayıcı # next()' seçeneğini kullanın (nedenini öğrenmek için JavaDoc/API'yi kontrol edin). Ardından, numaraları okumak ve bunları bir koleksiyonda (https://docs.oracle.com/javase/tutorial/collections/) kaydetmek için 'Scanner # nextInt()' tuşunu kullanın. Oradan numaralara erişebilir ve onları karşılaştırabilirsiniz. – Tom

+0

Her iki öğrencinin 'adı 've' nokta' tutmak için bir sınıf ('StudentPoint' gibi) oluşturun. Ve bir satır okuduğunuzda, değerleri değerlere ayırın ve nesneyi eşleştirin, bir 'List''e ekleyin. Son olarak, 'List 'ile yineleyin ve istediğinizi bulun. –

+0

Teşekkür ederim Tom :) Tarayıcı ve tampon sınıfları hakkında daha fazla bilgi edeceğim. –

cevap

1

Biliyorum, verimli bir yöntem değildir, ama bu kod ile sorunu çözdü: yapmanız gereken ilk şeylerden

public static void main(String[] args) 
{ 
    String name = null; 
    int i = 0; 
    int max = Integer.MIN_VALUE; 
    int min = Integer.MAX_VALUE; 
    try 
    { 
     Scanner keybord = new Scanner(System.in); 
     System.out.println("enter in file name"); 
     String filename = keybord.nextLine(); 
     Scanner file = new Scanner(new File(filename)); 

     while (file.hasNext()) 
     { 
      name = file.next(); 
      System.out.println(name + " "); 

      while (file.hasNextInt()) 
      { 
       i = i + file.nextInt(); 
      } 
      if (i < min) 
      { 
       min = i; 
      } 
      System.out.println("min " + min); 
      if (i > max) 
      { 
       max = i; 
      } 
      System.out.println("max " + max); 
      i = 0; 
     } 
    } catch (IOException e) 
    { 
     System.out.println("File does not exist"); 
    } 
} 
+0

Sorunu araştırmanızla bir cevap bulduğunuzu görmek çok güzel ve biraz deneme yanılma olduğunu düşünüyorum. [kabul et] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) cevabınız :). – Tom

+1

Teşekkür ederim Tom SO MUCH :) ve iyi günler :) –

0

Bu, muhtemelen bunu çözmenin en etkili yolu değil, ama bir şans verdim. Birden çok satırı karşılaştırmak için tam kod değil, ancak bunu zaten yaptığınız gibi bir sonraki dosyaya sahip olana kadar bunu bir süre boyunca çalıştırabilirsiniz. Bunu bir kez çalıştırdığınızda, her satırın değerini bir değişkene kaydedebilir ve sonra değişkenleri karşılaştırabilirsiniz. ex: boolean xIsBigger x> y; Eğer doğruysa, x daha büyük bir sayıdır, fakat eğer yanlışsa, o zaman daha büyük bir sayı olduğunu bilirsiniz. Bu yardımcı olur umarım.

import javax.script.ScriptEngine; 

import javax.script.ScriptEngineManager; 

import javax.script.ScriptException; 

public class Test { 

    public static void main(String[] args) throws ScriptException { 
     String line = "Jack 20 20 20"; 

     line = line.replaceAll("[^0-9]", " "); 

     line = line.replaceFirst("^ *", ""); 

     line = line.replaceAll(" ", "+"); 

     ScriptEngineManager mgr = new ScriptEngineManager(); 
     ScriptEngine engine = mgr.getEngineByName("JavaScript"); 

     System.out.println(engine.eval(line)); 

} 

} 

Sistem çıkışı: 60.

+0

'ScriptEngineManager' öğesine bakın. Bu ilk kez bunu biliyorum: D –

+3

Bu çözüm balyozla bir arıyı öldürmeye çalışmaktan çok hoşlanıyor. –

+0

@Tom ve Devan için çok teşekkürler. Kodumun çok uzun olduğunu biliyorum çünkü çok fazla metod ve sınıf bilmiyorum :( –

İlgili konular