2017-10-15 58 views
1

我正在尝试制作一个Java程序,它根据价格对不同类型的自行车进行排序。为此,我有两种不同类型的自行车:山地自行车和赛车。他们都可以是绿色或蓝色。它具有以下格式:如何在Java中扫描文件后将字符串保存在文件中?

Blue Racing: 
Price: 300 
Topspeed: 50 
Green Mountain: 
price: 400 
Topspeed: 30 
Blue Mountain: 
Price: 150 
Topspeed: 20 
Green Racing: 
Topspeed: 50 
price: 750 

做这些自行车进行排序,我做了一个父类“自行车”,与子类“RaceBike”和子类“山地车”。这个班有一个扫描方法。该方法扫描自行车的类型并根据扫描自行车的类型调用其中一个子类的扫描方法。

所有的扫描方法必须是这样的:

public static Bike scanner(Scanner scan); 

然而,只要,例如,“蓝色赛车”在父类扫描的,这话不能再由accesed扫描仪在子类的扫描仪方法中,但这是确定新自行车颜色所必需的。

所以我的问题是,如何在扫描后仍然可以访问文件中的单词?

不幸的是,由于我的大学规则,我无法显示任何代码。不过,我可以写一些伪代码,使其稍微更清晰:

public static Bike scanner(Scanner scan){ 
    scan first word; 
    scan second word; 
    if second word equals racing 
     return racingbike.scanner(scan) 
    else 
     return mountainbike.scanner(scan) 
} 

public static RacingBike scanner(Scanner scan){ 
    String color = scan first word //The color 
    scan second word //kind of bike 
    scan third word 
    int price = scan first number // price 
    return a new Racingbike, with attributes color and price 
} 

像上面的例子实施是不可能的,因为颜色不能在RacingBike扫描方法accesed了。所以我必须找到一种方法来继续访问它。

我不能改变方法的返回类型和参数。

谢谢。

回答

1

你不应该通过扫描仪的工厂方法(或构造函数),因为它情侣方式你得到的值,值的用户

编写代码来解析文件并处理文件中值的顺序和类型。远离任何使用从文件中解析出的字符串和整数的地方。

通过将字符串和整数(可能枚举)传递给构造函数,可以使测试变得更容易,并且应该编写大量的单元测试。

+0

这实际上就是我在做的事情(如果我明白你的意思):例如,要得到我要做的价格:int price = scan.nextInt()。等我认为这很清楚,但我现在将在我原来的问题中编辑它。 –

+0

@JasonMacville不,你不是(我打算说*工厂方法*而不是*构造函数*)。让我们这样说吧:不应该有一个使用/导入RacingBike和Scanner的类。 – Bohemian

相关问题