2014-12-13 3 views
-2

В настоящее время я делаю проект в школе, который включает чтение целых чисел из TXT-файла и ввод их в массив. Эти целые числа будут представлять количество продуктов, которые команда производит за год. Затем мне нужно рассчитать среднюю производительность, высоту и т. Д.Создание массива в многочисленных методах?

Все идет хорошо до сих пор, и я знаю, как это сделать, единственное, что я не уверен в том, как заставить массив работать в другие методы, чтобы я мог вычислить среднее значение. Это код, который у меня есть до сих пор. Есть несколько комментариев о меню, которые я еще не закодировал, но, надеюсь, вы можете увидеть, что я хочу сделать, дать пользователю возможность, если они хотят видеть среднюю, самую высокую или наименьшую производительность. Файл, который сканируется, буквально представляет собой только файл .txt с номером на его собственной строке (1 для каждого месяца).

/** 
* @author Jack Orr 
* @version 1.0 
* @since 10-12-2014 
*/ 

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.Scanner; 
import java.util.ArrayList; 

// Begin by importing the utilities allowing for scanners and reading from files 

public class Assignment { 

    // main method which will call the other methods, employ a switch to choose 
    // methods 

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

     readStats2012(); 
     readStats2013(); 
    } 

    public static void readStats2012() throws FileNotFoundException { 

     // This method reads the values from a keyboard scanner and assigns them to an array 

     System.out.println("Productivity for 2012\n"); 
     ArrayList<Integer> teams = new ArrayList<Integer>(); 
     int inTeam; 

     Scanner in = new Scanner(new File("in2012.txt")); 
     while (in.hasNextInt()) { 
      inTeam = in.nextInt(); 
      teams.add(inTeam); 
     } 

     in.close(); 

     for (int i = 0; i < teams.size(); i++) { 
      System.out.println("Team " + (i + 1) + "\t" + teams.get(i)); 
     } 
    } 

    public static void readStats2013() throws FileNotFoundException { 

     // This method reads the values from a keyboard scanner and assigns them to an array 

     System.out.println("\nProductivity for 2013\n"); 
     ArrayList<Integer> teams = new ArrayList<Integer>(); 
     int inTeam; 

     Scanner in = new Scanner(new File("in2013.txt")); 
     while (in.hasNextInt()) { 
      inTeam = in.nextInt(); 
      teams.add(inTeam); 
     } 

     in.close(); 

     for (int i = 0; i < teams.size(); i++) { 
      System.out.println("Team " + (i + 1) + "\t" + teams.get(i)); 
     } 

    } 
    static void calculateandDisplay(){ 

     // This will be a menu option to calculate the average, the highest and the lowest 

     } 

    public static double calculateAverage(){ 

     double average = 0; 
     if(i = 0; i < teams.length; i++){ 

     } 
     return average; 

    } 
} 
+1

Во-первых, рассмотрите один метод, который принимает строку имени файла в качестве аргумента вместо того, чтобы иметь идентичный код для чтения данных конкретного года. Что произойдет в следующем году или году спустя, или через десять лет; разумно ли писать дублированные методы для каждого потенциального года? – ChiefTwoPencils

+0

Это хороший момент, ваше предложение гораздо практичнее! –

ответ

0

Предлагаю вам вернуть списки и сохранить их как локальную переменную и передать эти переменные в качестве аргументов методам, которые вы хотите вызвать.

0

Я предлагаю вам реорганизовать ваши два методов чтения только один parametarised один:

public static void readStats(int year) throws FileNotFoundException { 
    ... 
    Scanner in = new Scanner(new File("in" + year + ".txt")); 
    ... 
} 

Затем использовать статическое поле списка типа для хранения всех данных:

static List<List<Integer>> years = new ArrayList<List<Integer>>(); 

И на день вашего метода чтения:

years.add(teams); 
Смежные вопросы