gpt4 book ai didi

java - 使用java将字符串数组打印到文本文件

转载 作者:太空宇宙 更新时间:2023-11-04 07:12:27 24 4
gpt4 key购买 nike

我正在尝试将用户输入的结果打印到一个简单的文本文件中,但我尝试的一切都失败了。我尝试在 switch case 中使用 PrintWriter,但结果仍然只是打印出 null。我对 Java 很陌生,所以也许我错过了明显的事情?这是代码:

package parkingsystem;

import java.io.*;
import java.util.Scanner;

public class Registration {

static String [][] userData;
static String [][] fileData;

public static void Registration(){

Scanner input = new Scanner(System.in);
String lotNo;
String First;
String Last;
String studentID;
String phoneNo;
String email;
String carNo;
String dateReg;
String strcontent;
String proceed;
boolean proceed2 = true;
userData = new String [50][6];
fileData = new String [50][6];
int counter = 0;
int col;
int row;
boolean carry_on = true;
MainMenu choices = new MainMenu();

while(proceed2=true){
System.out.println("Press Y/y to add a new user");
System.out.println("Press N/n to return to menu");
proceed = input.nextLine();
switch (proceed) {
case "Y":
case "y":
System.out.println("Enter your student ID");
studentID = input.nextLine();
System.out.println("Enter your first name");
First = input.nextLine();
System.out.println("Enter your last name");
Last = input.nextLine();
System.out.println("Enter your car number");
carNo = input.nextLine();
System.out.println("Enter your contact number");
phoneNo = input.nextLine();
System.out.println("Enter your email address");
email = input.nextLine();
row = counter ;
userData [row][0] = studentID;
userData [row][1] = First;
userData [row][2] = Last;
userData [row][3] = carNo;
userData [row][4] = phoneNo;
userData [row][5] = email;
if (counter == 6){
carry_on=false;
}

proceed2 = false;
break;
case "N":
case "n":
choices.Menus();
break;
}

}



}

}

最佳答案

这是重构代码的第二遍

现在,在这次重构中,我们捕获并存储新创建的 CarOwner 对象,并将它们存储在列表中。

然后我们看看如何遍历 CarOwner 列表,然后将这些对象写入名为 carOwners.dat 的文件

通常,在工业中,代码重构是在一组单元测试的背景下完成的,您可以根据这些单元测试确保重构没有破坏代码所需的行为,但我们只是在这里学习,因此这项工作旨在解释您缺少的一些概念,并且下面的第一遍迭代有其自身的一些问题,因此不要将其视为最终产品。

重构

  1. 我创建了一个 CarOwner 类。
  2. 我已重命名 boolean 变量 canProceed,以便读起来更自然。
  3. 更新:我已将 CarOwner 类设为可序列化;这将允许我们将对象写入文件。
  4. 更新:我添加了创建新 CarOwner 的代码并将其添加到列表中,然后迭代该列表以将这些 CarOwner 对象写入 FileStream。

    套餐 parking 系统;

    导入java.io.FileNotFoundException;导入 java.io.ObjectOutputStream;导入java.io.IOException;导入java.util.ArrayList;导入 java.util.Date;导入java.util.List;导入 java.io.FileOutputStream;导入java.util.Scanner;

    公开课报名{ 公共(public)静态无效主(字符串[] args){ 列表 carOwners = new ArrayList();

        Scanner input = new Scanner(System.in);
    boolean canProceed = true;

    while (canProceed) {
    System.out.println("Press Y/y to add a new user");
    System.out.println("Press N/n to return to menu");
    String optionRequested = input.nextLine();

    if (optionRequested.equalsIgnoreCase("Y")) {
    CarOwner owner = new CarOwner();
    System.out.println("Enter your student ID");
    owner.setStudentID(input.nextLine());
    System.out.println("Enter your first name");
    owner.setFirst(input.nextLine());
    System.out.println("Enter your last name");
    owner.setLast(input.nextLine());
    System.out.println("Enter your car number");
    owner.setCarNo(input.nextLine());
    System.out.println("Enter your contact number");
    owner.setContactNumber(input.nextLine());
    System.out.println("Enter your email address");
    owner.setEmail(input.nextLine());
    owner.setDateReg(new Date().toString());
    carOwners.add(owner);
    } else if (optionRequested.equals("N") || optionRequested.equals("n")) {
    canProceed = false;
    }

    }

    ObjectOutputStream objectWriter = null;

    for (CarOwner carOwner : carOwners) {
    try {
    objectWriter = new ObjectOutputStream(new FileOutputStream("carOwners.dat"));
    objectWriter.writeObject(carOwner);
    } catch (FileNotFoundException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }

    }

这是 CarOwner 类现在的样子...

package parkingsystem;

import java.io.Serializable;

public class CarOwner implements Serializable{
private String First;
private String Last;
private String studentID;
private String email;
private String carNo;
private String dateReg;
private String contactNumber;

public CarOwner() {
}

public String getFirst() {
return First;
}

public void setFirst(String first) {
First = first;
}

public String getLast() {
return Last;
}

public void setLast(String last) {
Last = last;
}

public String getStudentID() {
return studentID;
}

public void setStudentID(String studentID) {
this.studentID = studentID;
}

public String getEmail() {
return email;
}

public void setEmail(String email) {
this.email = email;
}

public String getCarNo() {
return carNo;
}

public void setCarNo(String carNo) {
this.carNo = carNo;
}

public String getDateReg() {
return dateReg;
}

public void setDateReg(String dateReg) {
this.dateReg = dateReg;
}

public void setContactNumber(String contactNumber) {
this.contactNumber = contactNumber;
}

public String getContactNumber() {
return contactNumber;
}

@Override
public String toString() {
return "CarOwner{" +
"First='" + First + '\'' +
", Last='" + Last + '\'' +
", studentID='" + studentID + '\'' +
", email='" + email + '\'' +
", carNo='" + carNo + '\'' +
", dateReg='" + dateReg + '\'' +
", contactNumber='" + contactNumber + '\'' +
'}';
}
}

好的,创建 CarOwner 类是为了让这段代码更加面向对象。

其次,重构的代码演示了 Java 中 boolean 变量的正确使用。

正如其他评论者已经指出的那样,赋值运算符 = 很容易与 boolean 相等的测试混淆。请参阅Java Operators

此外,我已将 Boolean proceed; 重命名为 Boolean canProceed; 这是一种常见的策略。命名一个 boolean 变量作为一个问题来读取,其“答案”是:,或者TrueFalse

这意味着我们可以编写像 while(canProceed) 这样的代码,读起来非常容易。另请参阅if statement on the Java tutorial

我希望这会有所帮助。

关于java - 使用java将字符串数组打印到文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20451884/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com