首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环FileReader

循环FileReader
EN

Stack Overflow用户
提问于 2011-10-22 12:26:56
回答 3查看 2.4K关注 0票数 0

我必须逐行读取文本文件,除了7行之后,我想通过将7行赋给7个不同的变量来使用所读取的内容。一旦我分配了它们,我就想使用这些变量。这是一个简单的部分,我知道如何做,我坚持的是,在我使用了这7个变量之后,我希望能够将文本文件的接下来7行分配给相同的变量,并再次使用它们。我知道我得用循环,但是,

  • 如何使它在7行之后停止,而不只是将行重新赋值给变量?
  • 应该使用两个循环吗?
  • 还是有类似于中断的东西,或者可能是某种“暂停”?
  • 或者是否有某种计数器可以与FileReader类一起使用?
  • 还是应该创建一个?H 210f 211>f 211

这是我们老师想要的。

停车罚单

该做什么:这个作业是基于编程挑战问题-第574页的第8页,并作了一些修改,所以仔细阅读这份讲义。如果你愿意的话,你可以在两个人的团队里工作。合作和讨论将是有益的。注:这是本课程中最长也可能是最困难的课程,所以请认真学习并按照说明进行。

在这个任务中,您将设计一组类,这些类一起工作,以模拟一位停车官员向一些停在收费表处的汽车开出停车罚单。与真正的计价器和门票相比,这个问题可能有点人为的。

您将设计四个单独的类和一个演示程序来运行所有的东西。在开始编写Java代码之前,请阅读整个作业直到结束。您需要了解几个类的结构,并了解数据文件的组织方式。

基本设置是一组停车收费表,汽车停在他们的不同时间。

每辆车都会购买一些以分钟为单位的停车时间。每辆车都会停一定的时间,也记录在几分钟内。有些人停车的时间比他们买的要长,而有些人的时间比他们买的要少。

以下是您需要开发的四个类。·ParkedCar级:这个类应该模拟一辆停放的汽车。该类的职责如下:-了解汽车的制造、型号、颜色、牌照号码--了解其停车计价器的标识号。-有一个toString()方法来报告其识别信息

·ParkingMeter级:这堂课将模拟停车收费表。这个类的责任如下:-知道自己的计价器标识号-知道购买的分钟数-知道停放的分钟数-有一个toString()方法来报告它的信息

·ParkingOfficer级:这门课应该模拟一名停车管理人员检查停放的汽车。该类的职责如下:-有两个实例变量:一个用于官员的名称,另一个用于该官员的警徽号--具有两个参数的构造函数,其中有一个toString()方法,它接收一个ParkedCar对象,一个ParkingMeter对象作为参数。此方法确定时间是否已过期,如果时间已过期,则创建一个停车罚单对象,该对象作为()返回的返回值返回。如果时间尚未过期,则返回null。

·ParkingTicket级:这堂课将模拟停车罚单。类的职责如下:-具有一个构造函数,它接收作为参数的ParkedCar对象、ParkingMeter对象和ParkingOfficer对象,这些对象用于初始化类中的相应实例变量。确保对每个参数对象使用复制构造函数。-这个类还有一个实例变量来表示罚款的数额。-罚款是由ParkingTicket的构造者计算的:该车辆非法停放的第一个小时或不足一个小时的罚款为25美元,另加该车辆非法停放的每一小时或不足一小时的罚款10美元。如果时间尚未过期,罚款设置为零。-有一个toString()方法,它以有用的设计格式准备票证(尝试匹配下面所示的示例输出或自己的改进)。它必须报告一辆非法停放的汽车的制造、型号、颜色和牌照号码。它还报告了罚款数额以及签发罚单的警官的姓名和徽章号码。在这个toString()方法中,必须对停车罚单中的其他类(即ParkedCar、ParkingMeter和ParkingOfficer)有效地使用toString()方法

Testing使用main()编写一个测试类TicketDemo,使用上面的类运行模拟,如下所示:·创建一个PoliceOfficer对象。编出你自己的名字和警徽号码。您可以将这些硬连接到您的测试程序中,或者向用户询问输入数据(您的选择)。·在循环中从数据文件Asg-5_in.txt读取数据。(注意:ASG-5_inExplan.txt文件描述了如何解释文件内容。)O读取汽车和收费表的一个数据块,并创建一个ParkedCar对象和一个ParkingMeter对象,使用您的ParkedCar和停车收费表对象作为参数调用泊车官ParkedCar()方法。检查方法将返回票证或null。如果返回票证,则调用toString()方法在屏幕上打印票证。如果没有罚单,则打印有关汽车的识别信息(使用其toString()方法)。O让循环重复,直到输入文件中没有更多可用的数据为止。

这是我到目前为止所拥有的,虽然我还远远没有完成。

ParkedCar类:

代码语言:javascript
复制
public class ParkedCar{

private String make;
private String model;
private String color;
private String license;
private String meterID;

public String getMake(String make)
{
    this.make = make;
    return make;
}

public String getModel(String model)
{
    this.model = model;
    return model;
}

public String getColor(String color)
{
    this.color = color;
    return color;
}

public String getLicense(String license)
{
    this.license = license;
    return license;
}

public String getMeterID(String meterID)
{
    this.meterID = meterID;
    return meterID;
}

public String toString()
{
    String str = "\nMake: " + make + "\nModel: " + model + "\nColor: " + color +
                 "\nLicense: " + license + "\nMeter ID: " + meterID;
    return str;
}
}

ParkingMeter类:

代码语言:javascript
复制
public class ParkingMeter{

private String meterID;
private int minsPurchased;
private int minsParked;

public String getMeterID(String meterID)
{
    this.meterID = meterID;
    return meterID;
}

public int getMinsPurchased(int minsPurchased)
{
    this.minsPurchased = minsPurchased;
    return minsPurchased;
}

public int getColor(int minsParked)
{
    this.minsParked = minsParked;
    return minsParked;
}

public String toString()
{
    String str = "\nMeter ID: " + meterID + "\nMinutes Purchased: " + minsPurchased +
                 "\nMinutes Parked: " + minsParked;
    return str;
}
}

ParkingOfficer类:

代码语言:javascript
复制
public class ParkingOfficer{

private String officerName;
private String badgeNumber;

public ParkingOfficer(String officerName, String badgeNumber)
{
    this.officerName = officerName;
    this.badgeNumber = badgeNumber;
}

public ParkingOfficer(ParkingOfficer object2)
{
    officerName = object2.officerName;
    badgeNumber = object2.badgeNumber;
}


public void setParkingOfficer(String officerName, String badgeNumber)
{
    this.officerName = officerName;
    this.badgeNumber = badgeNumber;
}

public String toString()
{
    String str = "\nOfficer's Name: " + officerName + "\nOfficer's Badge Number: " + badgeNumber;
    return str;
}

}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-22 15:26:40

一个基本结构应该是这样的:

代码语言:javascript
复制
while (true) {
  String v1 = reader.readLine();
  if (v1 == null)
    break;
  String v2 = reader.readLine();
  ...
  String v7 = reader.readLine();
  /* Do what ever you want with v1 through v7. */
  ...
}
/* End of loop. */
票数 0
EN

Stack Overflow用户

发布于 2011-10-22 12:34:25

代码语言:javascript
复制
int lineCounter = 0;
int variableCounter = 7;
BufferedReader br = new BufferedReader(new FileReader(new File("your-file-here.txt")));
String line = "";
List<String> lineSavers = new ArrayList<String>();
while ((line = br.readLine()) != null) {
    lineSavers.add(line);
    ++lineCounter;
    if (lineCounter == variableCounter) {
        // do something with the lineSaver
        lineSavers.clear();
        linteCounter = 0;
        // start the cycle again.
    }
}

这里有很多我没有考虑到的东西:

  1. 清理资源--我没有关闭阅读器。如果您读取的文件的行数不均匀地除以7,会发生什么情况。您永远不会像我写的那样得到最后一行。
  2. 硬编码变量计数器。我会把它作为一个要输入的变量。
  3. 不是很模块化;我会传入那个文件名,并将整个文件封装在一个方法中。
  4. 我会尝试一种更实用的方法,将我想要的东西传回,然后对它进行操作,而不是混合读取和处理

七行?你拿他们做什么?它们真的是以一种更好的表达方式联系在一起的吗?你可能没有以最好的方式思考这个问题。--

票数 4
EN

Stack Overflow用户

发布于 2011-10-22 14:19:34

您可以使用commons一次读取文件,然后遍历列表。一些示例代码:

代码语言:javascript
复制
public static void main(String[] args) {
  // Read the content of the file in one go
  InputStream input = null;
  // This is where the file content is stored
  List<String> lines = null; 
  try {
    input = new FileInputStream("input.txt");
    lines = IOUtils.readLines(new BufferedInputStream(input));
  } catch (FileNotFoundException e) {
    e.printStackTrace();
  } catch (IOException e) {
    e.printStackTrace();
  } finally {
    // Always (try to) close the file
    if (input != null) {
      try {
        input.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }

  if (lines != null) {
    String[] params = null; // per 7 lines
    for (int i = 0; i < lines.size(); i++) {
      int fromZeroToSixCounter = i % 7; 
      if ( fromZeroToSixCounter == 0 ) { 
        if (params != null) { 
          // the first time (i == 0) params is null and this will not execute
          doSomethingWithParams(params);
        }
        // new batch of 7 lines
        params = new String[7];
      }
      params[fromZeroToSixCounter] = lines.get(i);
    }
    if (params != null) {
      // the last batch 
      doSomethingWithParams(params);
    }
  }
}

public static void doSomethingWithParams(String[] params) {
  System.out.println("New batch");
  for (int i=0; i < params.length; i++) {
    System.out.println(params[i]);
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7859514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档