我正在学习Java并使用BlueJ所以我的问题涉及我被要求做的任务的一部分。其中一些有效,但我遇到其他部分的问题。到目前为止,我将包括我在课堂上所做的一切,但首先是要求:
当读取包含跑步者名称和年龄的每一行时,应创建一个新的Runner对象,并将其实例变量设置如下:// Class Runner already created
// Class MathatonAdmin - current class.
// tested with System.out.println and all values (in display panel) are shown (*).
// tested with System.out.println and all values (in display panel) are shown (*).
基本上当我运行提供的测试代码时:
MarathonAdmin ma = new MarathonAdmin();
ma.readInRunners();
当我检查马时,我应该看到一个跑步者名单;目前列出了一个人的姓名和年龄。
所以我需要帮助3a - 3c。如何使用所述变量创建Runner的新实例,然后将实例Runner添加到runners中的列表中?
我在while循环中尝试过for循环,但由于我猜测for循环,我没有在变量ma中获得所需的列表。
我正在使用System.out.println来测试我至少有正确的文件。
任何帮助或建议都将不胜感激。
MarathonAdmin课程:
import java.util.*;
import java.io.*;
import ou.*;
/**
* MatharthonAdmin Class
*
* @author Stephen Berry
* @version 28/03/14
*/
public class MarathonAdmin
{
// instance variables
private String runners;
private String age;
/**
* Constructor for objects of class MarathonAdmin
*/
public void MarathonAdmin()
{
List<String> runners = new ArrayList<>();
}
public void readInRunners()
{
String pathName = OUFileChooser.getFilename();
File aFile = new File(pathName);
BufferedReader bufferedFileReader = null;
try
{
String currentLine;
Scanner lineScanner;
bufferedFileReader = new BufferedReader(new FileReader(aFile));
currentLine = bufferedFileReader.readLine();
while (currentLine != null)
{
lineScanner = new Scanner(currentLine);
lineScanner.useDelimiter(",");
runners = lineScanner.next();
age = lineScanner.next();
for (String aList: runners)
{
Runner runners = new Runner();
if (Integer.parseInt(age) < 18)
{
System.out.println(currentLine + " : Junior");
}
if (Integer.parseInt(age) > 55)
{
System.out.println(currentLine + " : Senior");
}
if (Integer.parseInt(age) > 18 && Integer.parseInt(age) < 55)
{
System.out.println(currentLine + " : Standard");
}
currentLine = bufferedFileReader.readLine();
}
}
}
catch (Exception anException)
{
System.out.println("Error: " + anException);
}
finally
{
try
{
bufferedFileReader.close();
}
catch (Exception anException)
{
System.out.println("Error: " + anException);
}
}
}
}
答案 0 :(得分:1)
你班上有一些要点导致你的计划失误。
练习说你应该创建一个跑步者对象列表作为实例变量吗?查看您的马拉松类的实例变量运行器并查看它的类型。 ;)
你的while循环是一个很好的方法。现在在while循环中,你可以为文本文件的每一行进行交互,这相当于一个运行符吗?那你为什么需要for循环呢?您可以使用lineScanner来获取该行的每个部分,而不需要第二个循环我尝试为您提供一个具有伪代码的结构
String runnerName; Int runnerAge;
while (currentLine != null)
{
lineScanner = new Scanner(currentLine);
lineScanner.useDelimiter(",");
runnerName = lineScanner.next();
runnerAge = lineScanner.next();
runners = lineScanner.next();
age = lineScanner.next();
create new Runner Object
set age and name of object according to the data you ve just read
runners.add(Runnerobject) // <-- this line adds the object you ve just created to the list which is your instancevariable. Make sure that this variable really is a list :)
currentLine = bufferedFileReader.readLine();
}
}
希望这对你有所帮助。
答案 1 :(得分:0)
您创建了一个Runner实例,但是没有为Runner类设置实例变量name和age / ageGroup。您可以在Runner类中创建一个构造函数来执行此操作。此外,您应该重命名变量,因为已经使用了跑步者。
此外,您将runners声明为String类型的实例变量。但是你需要一个List。创建Runner实例后,您可以将该实例添加到列表中。
答案 2 :(得分:0)
您的实例变量不正确。您需要一个对象列表而不是String运行器。 此外,您需要一个年龄的方法实例而不是类实例。
private List<Runner> runners; // instance variables for a list of runner objects
runners = new ArrayList<Runner>(); // in the constructor
我也同意MeiSign,你不需要在while循环中使用for循环