java - прочитать файл и создать массив - PullRequest
0 голосов
/ 23 февраля 2020

Я должен следовать указанному формату c и использовать сканер. Я знаю, что есть лучшие методы, но это требование, и я новичок в java и пытаюсь это выяснить. Есть файл с именем клиента, датой рождения и другой информацией. Мне нужно посчитать количество записей в файле, затем файл должен создать массив на основе количества записей в файле и преобразовать массив в массив строк. Есть еще код, который мне нужно сделать, но я застрял на этой части. Try / catch должен быть использован.

public class Customers {
  //////// MAIN ////////
  public static void main(String[] args) {
    File file = new File("customers.txt");
    int numEntries = countCustomers(file);
    Person[] customers = readIntoArray(file, numCustomers);
    int min = locateBirthdate(customers);
    System.out.println("Birthdays this month: " + customer[mon].getBirthdate());

  }
  //* Counts customers in the file.//
  public static int countCustomers(File f) {
    int i = 0;
    try {
      Scanner scan = new Scanner(f);
      while (scan.hasNextLine()) {
        i++;
        scan.nextLine();
      }
    } catch (Exception e) {
      System.out.println("Check filename.");
    }

    return i;
  }
  //read data into array and convert into string array

  public static Customer[] readIntoArray(File f, int num) {
      //num = countCustomers(f);
      num = 0;
      try {
        Scanner input = new Scanner(f);
        Customer[] birth = new Customer[num];
        String[] strBirth = new String[num];
        while (num < countCustomers(f)) {
          strBirth[num] = input.nextLine();
          birth[num] = makeCustomer(strBirth[num]);
          num++;
          System.out.println(num);
        }

      } catch (Exception e) {
        System.out.println("Error");
      }
      return null;

1 Ответ

0 голосов
/ 24 февраля 2020

Хорошо. У меня есть несколько комментариев. Во-первых, вам действительно нужен массив 'strBirth'? Похоже, вы только пишете элементы, но не читаете из массива. Второе - метод readIntoArray всегда возвращает ноль. Кроме того, вы считаете клиентов дважды, но достаточно только одного. Тогда вам действительно нужен массив с клиентами? Поскольку вы используете массив, вам нужно точно знать количество клиентов, и, следовательно, вам нужно дважды отсканировать файл. Если вы используете ArrayList, вам нужно сканировать файл только один раз.

Я исправил проблемы в приведенном ниже коде.

public class Customers {
  //////// MAIN ////////
  public static void main(String[] args) {
    File file = new File("customers.txt");
    Person[] customers = readIntoArray(file, numCustomers);
    int numEntries = customers.length;
    int min = locateBirthdate(customers);
    System.out.println("Birthdays this month: " + customer[mon].getBirthdate());

  }

  public static Person[] readIntoArray(File f, int num) {
      List<Customer> customers = new ArraList<>();
      try {
        Scanner input = new Scanner(f);
        String[] strBirth = new String[num];
        while (scan.hasNextLine()) {
          customers.add(makeCustomer(scan.nextLine()));
        }
      } catch (Exception e) {
        throw new RuntimeException(e);
      }
      return customers.toArray(Person[]::new);
  }
...