2010-07-12 2 views
1

Я полный Java-новичок. Начался в прошлый понедельник и никогда не делал никаких программ на каком-либо языке раньше. Поэтому, пожалуйста, несите меня, если я нахожу легкие вещи сложными.Java Average, Jumps

Мне предоставлен текстовый файл. Как показано ниже:

Первая часть данных времени (в секундах за полночь), вторая оценка (не имеет значения), третий прыжок (не нужно знать, что это значит ...)

Я могу с радостью прочитать это при использовании этого кода:

import java.io.FileReader; 
import java.io.BufferedReader; 
import java.util.ArrayList; 



public class ReadText { 

    public static void main(String[] args) throws Exception { 

    String InputFile="C:\\PracticeSpreads.txt"; 
    ArrayList<String> fileLines=new ArrayList<String>(); 
    FileReader fr; 
    BufferedReader br; 
    fr = new FileReader(InputFile); 
    br = new BufferedReader(fr); 
    String line; 
    br.readLine(); 

    while ((line=br.readLine()) != null) { 

    fileLines.add(line); 

    //System.out.print(line+"\n"); 



} 

} 
} 

Я пропустил первую линию, потому что это упростило.

Хорошо, в основном, мне нужно создать ежедневное взвешенное среднее значение.

Я могу получить средний прыжок, но не средневзвешенный прыжок.

Формула времени взвешенного среднего скачок является =

В то время, когда второй имеет более чем один прыжок, я хочу взять «средний скачок» в течение этого периода времени.

Но я буквально понятия не имел, поскольку я не слишком уверен в том, как петли устраиваются.

Надеюсь, кто-то может мне помочь!

+1

Это звучит как школьное задание, не так ли? – pakore

+0

Поговорите со своим инструктором или прочитайте книгу. Мы не можем научить вас элементарному программированию здесь. – msw

+0

Я в университете, который закончил месяц назад и снова начинается в октябре. Я работаю на самообслуживании своего отца, а не на тех, кто должен заниматься техническим специалистом. –

ответ

1

После прочтения ваших комментариев ниже и понимания вашего требования лучше, вот фрагмент кода, который выполняет эту работу. Обратите внимание, что он предполагает, что отметки времени в каждый день сортируются, как в вашем примере:

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.Scanner; 
import java.util.AbstractMap.SimpleEntry; 

public class ReadText { 
    public static void main(String[] args) throws IOException { 
     BufferedReader br = null; 
     try { 
      String InputFile = "C:\\PracticeSpreads.txt"; 
      br = new BufferedReader(new FileReader(InputFile)); 
      String line; 
      List<SimpleEntry<Integer, List<Double>>> valuesInDay = new ArrayList<SimpleEntry<Integer, List<Double>>>(); 
      String date = null; 
      while ((line = br.readLine()) != null) { 
       line = line.trim(); 
       if (line.startsWith("DATE")) { 
        if (line.equals(date)) // Found day footer 
         System.out.println("Average for " + date + ": " + calcDayAvg(valuesInDay)); 
        else { // Found a day header 
         valuesInDay.clear(); 
         date = line; 
        } 
       } else { // Found a value entry 
        Scanner s = new Scanner(line); 
        int sec = s.nextInt(); 
        s.nextDouble(); 
        double jump = s.nextDouble(); 

        List<Double> jumps; 
        if (!valuesInDay.isEmpty() && valuesInDay.get(valuesInDay.size() - 1).getKey() == sec) { 
         // Same time stamp as prev 
         jumps = valuesInDay.get(valuesInDay.size() - 1).getValue(); 
        }else { 
         // New time stamp 
         jumps = new ArrayList<Double>();       
         valuesInDay.add(new SimpleEntry<Integer, List<Double>>(sec, jumps)); 
        } 
        jumps.add(jump); 
       } 
      } 
     } finally { 
      if (br != null) 
       br.close(); 
     } 
    } 

    private static Double calcDayAvg(List<SimpleEntry<Integer, List<Double>>> values) { 
     if (values.isEmpty()) 
      return null; // No way to calculate for empty set 
     double min = values.get(0).getKey(); 
     double max = values.get(values.size() - 1).getKey(); 
     double span = max - min; 
     if (span == 0) 
      return null; // Division by zero...  

     double total = 0; 
     for (int i=0; i < values.size(); i++) { 
      SimpleEntry<Integer, List<Double>> entry = values.get(i); 
      int sec = entry.getKey(); 
      double jumpAvg = getJumpAvg(entry.getValue()); 
      int jumpDuration; 
      if (i == values.size() - 1) 
       jumpDuration = 1; // last jump has duration of 1 sec 
      else 
       jumpDuration = values.get(i + 1).getKey() - sec; 

      total += jumpAvg * jumpDuration; 
     } 
     return total/span; 
    } 

    private static double getJumpAvg(List<Double> jumps) { 
     double total = 0; 
     for (Double jump : jumps) { 
      total += jump; 
     } 
     return total/jumps.size(); 
    } 
} 
+0

Извините, это не домашнее задание. Университет закончил в течение года ... Я работаю над бизнесом моего папы, я сказал, что я возьму это, а не ему, чтобы попасть в ИТ-специалиста. Это единственное, что меня удерживает, поэтому, если я смогу получить этот код, я смогу продолжить работу с остальной частью проекта. A Я сказал, что начал в прошлый понедельник, так, к сожалению, так сильно, как я пытаюсь, я действительно не понимаю, что вы только что сказали? Я нахожу Java интересным, и когда uni снова запускается в октябре, я собираюсь пройти курс, но на данный момент я просто пытаюсь сделать все как можно скорее! –

+0

@ Сэм Хэнк: Извините за недоразумение :) Я обновлю ответ и прикрепите код. Во всяком случае, вам нужно будет изучить основы программирования и основы Java, чтобы быть продуктивными в этом проекте. Вы рассматривали использование Excel для этого проекта вместо Java? –

+0

Спасибо! Я бы с удовольствием использовал excel, но текстовый файл огромен. Поэтому я подумал, что лучше попробовать и получить код, который работает для небольшого файла, потому что тогда это будет работать с большим файлом? (Я надеюсь! .. ха-ха) После того, как это отсортировано, мне больше не понадобится использовать Java. Думаю, это больше похоже на сравнение с прошлыми данными и их изменение. Тогда просто гна расскажет моему отцу, что по-другому, и он возьмет его оттуда! Спасибо за вашу помощь, в полной мере оценили !! –