У меня есть проблема с Java, которую мне нужно сделать, и я не уверен, как это сделать. Это проблема:
Ваша задача — завершить данную программу, написав метод с именем readData и класс с именем Person. Метод readData написан внутри класса Customers. Цель программы - прочитать клиент информацию из файла с именем customers.txt, сделать новый объект из каждого клиента и, наконец, вывести на экран информацию обо всех клиентах.
В файле каждый клиент хранится на отдельной строке. Файл содержит имя и номер социального страхования каждого клиента. Класс Person имеет один атрибут типа String, в котором хранится информация о человеке (имя и номер социального страхования).
Внутри класса Person должен быть написан метод toString, который возвращает информацию о человеке. Метод readData получает в качестве параметра массив, в который помещаются созданные персоны. Цель метода — создать объект из каждого клиента в файле и поместить его в массив. Метод возвращает количество людей в файле.
Это инструкция (выше), а ниже — готовый код, который я не могу редактировать (за исключением части «ваш код здесь»):
import java.io.*;
import java.util.*;
import java.util.Scanner;
public class Customers {
public static void main(String[] args) throws IOException {
Person[] people = new Person[100];
int peopleAmount = readData(people);
for(int i = 0; i < peopleAmount; i++) {
System.out.println(people[i]);
}
}
// Your code here
Пример вывода:
James 030377-2651
John 111177-1731
Robert 161280-1822
Michael 121160-1362
William 141075-16
Если вы слишком заняты, чтобы дать полный ответ, некоторая информация о том, как это сделать, тоже подойдет. Текст инструкции изначально был не на английском языке, так что извините, если у него странная грамматика.
@CharlieArmstrong Нет больше информации, чем написано в инструкции. Вывод примера показывает, как они печатаются, я полагаю. Также в инструкции есть такая часть: «В файле каждый клиент хранится на своей строке. Файл содержит имя и номер социального страхования каждого клиента». Таким образом, в файле, вероятно, просто есть имя каждого клиента, за которым следует их номер, разделенный на отдельные строки.
@Abra Нет доступа к customers.txt для решения проблемы. Это требует, чтобы я построил его, используя только информацию, написанную в инструкциях. Но я предполагаю, что вывод примера - это то, как текст выглядит в файле.
Чтобы добавить сюда, файл customers.txt существует, но я не могу его просмотреть. Так что чтение файла будет работать только с BufferedReader file = new BufferedReader(new FileReader(”customers.txt”));
я думаю
Предполагая, что содержимое файла customers.txt такое же, как в примере, выведенном в вашем вопросе, вот моя реализация. Я предполагаю, что вы можете использовать только классы, о которых вы узнали, и я также предполагаю, что вы еще не узнали о потоковом API в java, поэтому, надеюсь, приведенный ниже код приемлем в рамках ограничений вашего задания.
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class Customers {
private static int readData(Person[] people) throws IOException {
int count = 0;
if (people != null && people.length > 0) {
try (FileReader fr = new FileReader("customers.txt");
BufferedReader br = new BufferedReader(fr)) {
String line = br.readLine();
while (line != null) {
String[] parts = line.split(" ");
Person p = new Person(parts[0], parts[1]);
people[count] = p;
count++;
if (count >= people.length) {
break;
}
line = br.readLine();
}
}
}
return count;
}
public static void main(String[] args) throws IOException {
Person[] people = new Person[100];
int peopleAmount = readData(people);
for(int i = 0; i < peopleAmount; i++) {
System.out.println(people[i]);
}
}
}
class Person {
String name;
String ssn;
public Person(String name, String ssn) {
this.name = name;
this.ssn = ssn;
}
public String toString() {
return name + " " + ssn;
}
}
Метод readData
должен быть статическим, поскольку он вызывается из метода main
, который является статическим методом.
Метод readData
читает файл customers.txt построчно. Каждая строка содержит имя, за которым следует один пробел и номер социального страхования. В соответствии с вашим примером выходные данные имени и номера социального страхования не содержат пробелов. Если это не так, то приведенный выше код не будет работать.
Метод split
создаст массив из двух элементов из строки файла. Первый элемент массива — это имя, а второй — номер социального страхования. Затем я создаю объект Person
и помещаю его в массив people
.
Просто пришлось изменить class Person
на static class Person
, так как в строке Person p = new Person(parts[0], parts[1]);
он жаловался, что на Person
нельзя ссылаться из статического контекста. После этого заработало. Спасибо.
Ну а как информация хранится в
customers.txt
? Никто не может ответить без этой информации.