我正在尝试使用FileReader
读取文本文件。
要读取的文本文件与使用StoreData
过程写入的文本文件相同。
我试图让程序读入.txt
文件中的名称并将它们放入'mainName'
类中的Room
字符串中(见下文)。
显然,从文本文件中读取的每个名称都需要单独的Room
'宾语。请更正' loadData
'中的代码。程序
public class HotelObjects {
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws Exception {
String command;
Scanner input = new Scanner(System.in);
Room[] myHotel = new Room[10];
for (int x = 0; x < myHotel.length; x++) {
myHotel[x] = new Room();
}
String roomName;
int roomNum = 0;
while (roomNum < 11) {
Scanner sc = new Scanner(System.in);
System.out.print("Enter command : ");
command = input.next();
command = command.toLowerCase();
if (command.charAt(0) == 'v') {
viewCustomers(myHotel);
}
if (command.charAt(0) == 'a') {
addCustomers(myHotel);
}
if (command.charAt(0) == 'e') {
emptyRooms(myHotel);
}
if (command.charAt(0) == 's') {
storeData(myHotel);
}
if (command.charAt(0) == 'l') {
loadData(myHotel);
}
}
}
private static void viewCustomers(Room hotelRef []) {
for (int x = 0; x < 10; x++) {
System.out.println("room " + x + " occupied by " + hotelRef[x].getName());
}
}
private static void addCustomers(Room myHotel[]) {
String roomName;
int roomNum;
System.out.println("Enter room number (0-10) or 11 to stop:");
Scanner input = new Scanner(System.in);
roomNum = input.nextInt();
System.out.println("Enter name for room " + roomNum + " :");
roomName = input.next();
myHotel[roomNum].setName(roomName);
}
private static void emptyRooms(Room[] myHotel) {
for (int x = 0; x < 10; x++ )
if (myHotel[x].getName().equals("e"))System.out.println("room " + x + " is empty");
}
private static void storeData(Room [] myHotel) throws IOException {
FileWriter writer = new FileWriter("HotelObjects.txt");
for (int x = 0; x < 10; x++) {
writer.write(myHotel[x].getName());
writer.write("\r\n");
}
writer.close();
System.out.println("File 'HotelObjects.txt' saved to C:\\Users\\Ganz\\Documents\\NetBeansProjects\\HotelObjects");
}
private static void loadData(Room[] myHotel) throws Exception {
int lineCount =0 ;
try {
Scanner sc = new Scanner(new BufferedReader(new FileReader("C:\\Users\\Ganz\\Documents\\NetBeansProjects\\Hotel\\HotelArray.txt")));
String fileLine;
while (sc.hasNext()) {
fileLine = sc.nextLine();
myHotel[fileLine].setName();
lineCount++;
}
sc.close();
System.out.println("File 'HotelArray.txt' loaded from C:\\Users\\Ganz\\Documents\\NetBeansProjects\\Hotel");
}
catch (IOException e) {
}
}
}
这是Room类:
public class Room {
private String mainName;
int guestsInRoom;
public Room() {
mainName = "e";
System.out.println("made a room ");
}
public void setName(String aName) {
mainName = aName;
}
public String getName() {
return mainName;
}
}
答案 0 :(得分:0)
myHotel[fileLine].setName();
首先需要一个字符串参数,如下所示:,
public void setName(String aName) {
你是在没有参数的情况下调用它,这显然是lead to an error and your code will not compile and run.
和其次它需要 myHotel [] 的整数参数
如果要将名称设置为行字符串并使用lineCount作为整数索引,请将其更改为:
myHotel[lineCount].setName(fileLine);
或者您可以使用其他index
替换lineCount
,但必须是整数。然后它应该工作。
答案 1 :(得分:0)
fileLine是一个String。您不能像这样使用String作为数组索引:
String fileLine;
... (modify fileLine)
myHotel[fileLine].setName();
如果要将String映射到对象,可以使用Map。
您需要使用整数作为数组索引。 e.g:
myHotel[4].setName();
此外,setName()接受一个String参数,并且您没有传递任何参数。它应该像这样使用:
myHotel[4].setName("some string");
因此,此行有两个错误:myHotel[fileLine].setName();