2013-11-26 2 views
0

Я получаю супер разочарование этим. я нужно прочитать из любого файла и записать обратно в файл дни недели с высокой и низкой температурой и в среднем за этот день ...Дни недели Высокие низкие температуры Средний массив

1  62 

2  54 

7  55 

6  77 

1  55 

и это предполагается перейти на неограниченную неизвестность. Мне нужно взять этот файл и написать его как это

dow   high   low   average 
1   78   66   70 

2   87   77   81 

3   70    80   75 

Я не могу понять, где я иду не так.

import java.io.File; 
import java.util.Formatter; 
import java.util.Scanner; 

public class dowsdowsdows { 

    public static void main(String [] args) { 

     try { 

      Scanner scanner = new Scanner(new File("Dowinputnumbers.txt")); 
      Formatter formatter = new Formatter(new File("Dowoutputnumbers.txt")); 

      int [] dows; 
      int [] hightemps; 
      int [] lowtemps; 
      int [] count = null; 

      while (scanner.hasNext()) { 

       int dow = scanner.nextInt(); 
       int temp = scanner.nextInt(); 
       dows = new int [8]; 

       hightemps = new int [8]; 

       lowtemps = new int [8]; 

       formatter.format("%d %d\n", dows, hightemps, lowtemps); 
       { 
        for (int i = 0 ; i < 7 ; i++) { 
         int j = i + 1; 
         int d = (int) dows[i]/count[i]; 
         formatter.format(j + " " + " " + " " + d); 

        } 

        break; 

       } 

      } 
      formatter.flush(); 
      formatter.close(); 

     } 
     catch (Exception e) { 
     } 
    } 
} 
+0

Почему вы инициализации массивы на каждой итерации цикла while? .. – Maroun

+0

Рассмотрите возможность использования «Карты», которая содержит идентификатор в качестве ключа и пользовательский объект с max, min и average, который вы можете изменить на каждой итерации как значение –

+0

до тех пор, пока сканер имеет больше ints, он будет продолжаться? – sobey

ответ

0

Я вижу 2 вещи, которые облегчают вам задачу.

Первый из них - используйте контейнер (потому что вы пишете не в чистом C, используйте «функции» Java, которые делают ваш код легким). Я буду выбирать карту для чтения. А для записи результата - Карта>. int - for dow, List - для информации. (и это плохая практика распределяет память шаг за шагом в цикле «while»)

Во-вторых - вам следует более четко понимать, что вы хотите делать. Райт этот алгоритм в слове (английский или русский или испанский) и после этого напишите код.

0

Вы можете рассчитать самые высокие, низкие температуры из файла с помощью следующего кода:

Учитывая Dowinputnumbers.txt содержит:

1 62 
2 54 
7 55 
6 77 
1 55 

Тогда Temperatures.java:

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.Formatter; 
import java.util.Scanner; 
import java.util.NoSuchElementException; 

public class Temperatures 
{ 
    public static final int DOWS = 7; 
    public static final int NOVAL = 999; 
    public static final String DI = "Dowinputnumbers.txt"; 
    public static final String DO = "Dowoutputnumbers.txt"; 

    public static boolean isValid(int dow) 
    { 
     return 1 <= dow && 7 >= dow; 
    } 

    public static void main(String[] args) 
    { 
     /** 
     * we need array starting from 1 ([1..DOWS]) 
     * so just use 1 plus size array 
     */ 
     int[] hightemps = new int[DOWS + 1]; 
     int[] lowtemps = new int[DOWS + 1]; 
     int[] counts = new int[DOWS + 1]; 
     int[] sum  = new int[DOWS + 1]; 
     int dow; 
     int temp; 

     /** 
     * init highest and lowest temps to "no value" values 
     */ 
     for (int i = 1; i < DOWS + 1; i++) 
     { 
      hightemps[i] = -NOVAL; 
      lowtemps[i] = NOVAL; 
     } 

     try 
     { 
      Scanner scanner = new Scanner(
        new File(DI)); 
      Formatter formatter = new Formatter(
        new File(DO)); 

      while (scanner.hasNextInt()) 
      { 
       try 
       { 
        dow = scanner.nextInt(); 
        temp = scanner.nextInt(); 
        if (isValid(dow)) 
        { 
         counts[dow]++; 
         sum[dow] += temp; 
         if (hightemps[dow] < temp) 
         { 
          hightemps[dow] = temp; 
         } 
         if (lowtemps[dow] > temp) 
         { 
          lowtemps[dow] = temp; 
         } 
        } 
       } 
       catch (NoSuchElementException e) 
       { 
        /** 
        * input has ended 
        */ 
        System.out.println("No data left?!.. :("); 
       } 
      } 

      /** 
      * now we have collected all temperatures 
      */ 
      formatter.format("dow high low average\n"); 
      for (dow = 0; dow < DOWS; dow++) 
      { 
       /** 
       * if we have temps for dow 
       */ 
       if (0 < counts[dow]) 
       { 
        formatter.format(
          "%d %d %d %.2f\n", 
          dow    , 
          hightemps[dow] , 
          lowtemps[dow] , 
          ((double) sum[dow])/counts[dow]); 
       } 
      } 
      formatter.flush(); 
      formatter.close(); 
     } 
     catch (FileNotFoundException e) 
     { 
      System.out.println("File not found!"); 
     } 
    } 
} 
Смежные вопросы