#java #file
Вопрос:
У меня есть текстовый файл, содержащий поддельные записи о самолетах. Мне нужно написать код, который найдет запись на основе ее строки идентификатора и отобразит ее. У меня есть основной, классный и текстовый файл. В принципе, пользователь должен иметь возможность ввести «идентификатор», сказать «DA0», и код найдет его и отобразит строку.
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package lastassignment;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;
/**
*
* @author djiml
*/
public class LastAssignment {
public LastAssignment() {
}
private ArrayList<AirplaneSeatRecords> airplaneSeats = new ArrayList<AirplaneSeatRecords>();
Scanner scnr = new Scanner(System.in);
String airlineIndex;
String name;
int seat;
double ticketCost;
public void OpenRecord() throws IOException {
FileInputStream inputfile = new FileInputStream("input.txt");
Scanner inFile = new Scanner(inputfile);
while (inFile.hasNext()) {
airlineIndex = inFile.next();
ticketCost = inFile.nextDouble();
seat = inFile.nextInt();
name = inFile.nextLine();
airplaneSeats.add(new AirplaneSeatRecords(airlineIndex, ticketCost, seat, name));
}
inFile.close();
}
public static void main(String[] args) throws IOException {
Scanner scnr = new Scanner(System.in);
int input;
System.out.println("What would you like to do?:");
System.out.println("1. Open a Record.");
System.out.println("2. Display a Record.");
System.out.println("3. Display All Records.");
System.out.println("4. Add a New Record.");
System.out.println("5. Edit a Record.");
System.out.println("6. Delete a Record.");
System.out.println("7. Save Progress.");
System.out.println("8. Exit.");
System.out.print(": ");
input = scnr.nextInt();
if (input != 8) {
switch(input) {
case 1 -> new LastAssignment().OpenRecord();
case 2 -> System.out.println("FIXME: Add 'Display a Record'");
case 3 -> System.out.println("FIXME: Add 'Display All Records'");
case 4 -> System.out.println("FIXME: Add 'Add a New Record'");
case 5 -> System.out.println("FIXME: Add 'Edit a Record'");
case 6 -> System.out.println("FIXME: Add 'Delete a Record'");
case 7 -> System.out.println("FIXME: Add 'Save Progress'");
}
}
else {
System.out.println("FIXME: Add 'Exit'");
}
}
}
Файл класса
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package lastassignment;
/**
*
* @author djiml
*/
public class AirplaneSeatRecords {
private String airlineIndex;
private double ticketCost;
private String customerFlying;
private int seatNum;
public AirplaneSeatRecords() {
// Constructor
}
public AirplaneSeatRecords(String ID, double cost, int seat, String name) {
airlineIndex = ID;
ticketCost = cost;
seatNum = seat;
customerFlying = name;
}
public void displayTickets() {
System.out.printf("%8s t %-20s tt $%.2f t %d n", airlineIndex, customerFlying, ticketCost, seatNum);
}
public String getTicketID() {
return airlineIndex;
}
public double getTicketCost() {
return ticketCost;
}
public int getSeatNum() {
return seatNum;
}
public String getCustomerName() {
return customerFlying;
}
public void setSeatNum(int seat) {
seatNum = seat;
}
public void setCustomerName(String name) {
customerFlying = name;
}
public void setTicketPrice(double price) {
ticketCost = price;
}
}
Текстовый файл
DA0 215.00 19 Doug Anderson
DA1 200.00 20 Drew Bates
DA2 185.00 21 Theresa Patty
DA3 170.00 22 Andrew Abrams
Ответ №1:
В case 2
снова запросите у пользователя идентификатор и считайте его с помощью сканера.
Создайте метод, в котором вы повторяете цикл по своему airplaneSeats
массиву, и если введенный идентификатор совпадает с идентификатором одного из элементов AirplaneSeatRecords
в вашем массиве, затем распечатайте запись и разорвите цикл. У вас уже есть необходимые методы для этого в AirplaneSeatRecords
классе.
Кроме того, не забудьте добавить регистр по умолчанию в инструкцию switch.
Комментарии:
1. Это
switch
выражение , оно не нуждаетсяbreak
в s.2. @FedericoklezCulloca спасибо вам за ваш комментарий! Я узнал кое-что новое 🙂 Я знаком только с Java 8, поэтому я не знал о новых функциях и синтаксисе для
switch
оператора в более поздних версиях. Я соответствующим образом отредактировал свой ответ. Однако этоdefault
дело все еще актуально?3. Да, выражение переключателя должно быть исчерпывающим, поэтому в данном случае
default
оно необходимо.4. Что вы подразумеваете под повторением в цикле? И какой метод из записей о сиденьях в самолете?
5. @YuliyaSheludyakova Вместо этого я использовала цикл «для каждого», но спасибо! Ваш комментарий мне очень помог!