Как распечатать ArrayList из отдельного метода? - PullRequest
0 голосов
/ 09 мая 2019

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

Пример вывода:

Дата: 10 января,2018 г. Выходные данные: 236,9 Дата: 11 января 2018 г. Выходные данные: 267,6 Дата: 12 января 2018 г. Выходные данные: 278,1

Для выполнения этой задачи напишите метод с именем PrintData.Выберите подходящие параметры и тип возврата.

После завершения печати главное меню отобразится снова.

Я уже прочитал данные в моем списке массивов в моем методе Upload Data, сейчас я пытаюсь выяснить, как создать отдельный метод, в котором он печатает Arraylist UploadData.

То, что у меня есть сейчас, не сработает, я не думаю.

           : `  public static void main(String[] args) throws IOException {
     Scanner keyboard = new Scanner(System.in);
    //calling menu
    showMenu();
   int userChoice=keyboard.nextInt();
    while (userChoice == 1)
    {
        UploadData();
        showMenu();
        int userchoice=keyboard.nextInt();
    }
    while(userChoice ==2)
    {

        PrintData();
        showMenu();
        int userchoice=keyboard.nextInt();
    }
}

public static void showMenu()
{
    //creating menu
    System.out.println("Welcome to the Power Plant Analyzer program. Please choose from the following options:\n"
            + " 1. Upload Data\n 2. View Data \n 3. Download Statistics \n 4. Print Month \n 5. Exit the program");

}
public static String[] UploadData() throws IOException
{
    Scanner keyboard = new Scanner(System.in);
    //Asking for file
    System.out.println("What is the name of the file that contains the data?");
    String inputFileName=keyboard.nextLine();
   //creating file
    File f = new File(inputFileName);
    Scanner inputFile = new Scanner(f);

    //creating arraylist
    ArrayList<Entry> MonthList = new ArrayList<>();
    //reading the file
    while(inputFile.hasNext())
    {
        //read a line
        String m = inputFile.next();
        String d = inputFile.next();
        String y = inputFile.next();
        float p = inputFile.nextFloat();

        //create Entry with info read in
        Entry i = new Entry(m,d,y,p);
        //add it to the arraylist
        MonthList.add(i);

    }
    //print Entry's into arraylist
    //for(int i =0; i <MonthList.size(); i++)
        //MonthList.get(i).print();
    return null;

}
public static void PrintData(ArrayList<Entry> MonthList)
{
    for(int i =0; i <MonthList.size(); i++)
        MonthList.get(i).print();


    //ArrayList<Entry> MonthList = new ArrayList<>(Arrays.asList());
    //int pos = Collections.binarySearch(MonthList);

}

} `

  //declaring variables
private String month;
private String day;
private String year;
private float powerOutput;

//Constructors
public Entry(){}

public Entry (String m, String d, String y, float p)
{
    month = m;
    day =d;
    year =y;
    powerOutput=p;
}
//creating print to call ArrayList in main
public void print()
{
    System.out.println("Month: " + month + " Day: " + day + " Year: " + year + " Power Output: " + powerOutput);
}

}

Ответы [ 2 ]

0 голосов
/ 09 мая 2019

Это похоже на упражнение в классе, поэтому я не буду писать решение для вас, но я постараюсь дать вам несколько советов, которые укажут вам правильное направление

1) У вас нет прямого доступамассив данных создан в методе UploadData(), потому что это локальная переменная.Учитывая, что ваше описание требует от вас «выбрать подходящие параметры и тип возврата», вы должны вернуть «MonthList» из UploadData() вместо нуля.[Примечание: вам, возможно, придется добавить результат MonthList в другой список в вашем основном классе, поскольку вы вызываете этот метод в цикле while]

2) Ваш метод PrintData() принимает ArrayList<Entry> MonthList в качестве параметра,но в вашем основном методе вы пытаетесь вызвать его, не передавая никаких аргументов.В вашем основном методе должен быть ArrayList, который вы передаете в вызов

Надеюсь, это поможет

0 голосов
/ 09 мая 2019

В вашем методе uploadData сделайте так, чтобы он возвращал List<Entry> (вместо String [], который вы даже не возвращаете), поэтому вместо return null; сделайте return MonthList; Также измените его подпись на:

public static List<Entry> UploadData() throws IOException {

Затем в коде основного метода добавьте объявление этого и используйте его соответственно с вашими методами UploadData и PrintData:

public static void main(String[] args) throws IOException {
    ArrayList<Entry> MonthList = null;
    ...

    while (userChoice == 1)
    {
        MonthList = UploadData();
        showMenu();
        int userchoice=keyboard.nextInt();
    }
    while(userChoice ==2)
    {

        PrintData(MonthList);
        showMenu();
        int userchoice=keyboard.nextInt();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...