我正在尝试创建一个不带参数的公共实例方法,并且不返回任何值。需要从用户那里获得输入以选择文件,这部分我没有问题。该方法需要使用BufferReader
和Scanner
对象。这样它就可以读取所选的文件。对于每个读取的行,应创建一个新对象,并使用文件中的值设置其实例变量
然后应将创建的对象添加到列表中。这是我遇到问题的地方,它不会让我将新对象添加到列表中。以下是我的代码:
public void readInEntrants()
{
String pathname = OUFileChooser.getFilename();
File aFile = new File(pathname);
Scanner bufferedScanner = null;
Set<Entrant> entrantSet = new HashSet<>();
try
{
String currentEntrantLine;
Scanner lineScanner;
bufferedScanner = new Scanner(new BufferedReader(new FileReader(aFile)));
while (bufferedScanner.hasNextLine())
{
currentEntrantLine = bufferedScanner.nextLine();
lineScanner = new Scanner(currentEntrantLine);
lineScanner.useDelimiter(" ");
currentEntrantLine = lineScanner.next();
entrantSet.add(new Entrant(currentEntrantLine)); // <----- Here is where I am having trouble. It won't let me add the new object to the class Entrant
}
}
catch (Exception anException)
{
System.out.println("Error: " + anException);
}
finally
{
try
{
bufferedScanner.close();
}
catch (Exception anException)
{
System.out.println("Error: " + anException);
}
}
return entrantSet;
}
我不知道该怎么做。谁能看到我做错了什么?
很抱歉要添加它是一个编译问题,它将无法正确编译。
答案 0 :(得分:0)
使用IDE,我打赌你不要(否则它会立即用红色标记编译错误 - &gt; 你在void方法中使用return ),在这种情况下你会看到其他错误。
(关闭:这将是评论部分,但是根据50声明,我不被允许这样做.Stackoverflow应该改变这个imo。)
答案 1 :(得分:0)
您可以共享Entrant类吗?似乎进入者类的构造函数没有任何参数。在构造函数中将String作为参数类型传递,以在Entrant类中设置String字段。
答案 2 :(得分:0)
首先:
您将函数readInEntrants
标记为public void
,因此您无法在内部使用return。
您可以删除return entrantSet;
指令或将函数定义更改为public Set<Entrant> readInEntrants
。
关于你遇到的问题:
根据你对beatrice回答的评论,我认为你只有'Entrant'类的无参数构造函数,而你尝试创建它作为参数传递字符串。
new Entrant(currentEntrantLine)
您需要做的是定义接受String作为其参数的Entrant类构造函数。例如:
public Entrant(String dataToParse)
{
// here you parse data from string to entrant fields
}
侧面:
您可以使用bufferedReader
一次读取整个文件行,这没关系,但是您可以定义Scanner lineScanner
来迭代行元素,然后只使用一次。
文件的这种方式......让我们说:
一二三
四五六
你的while循环可以这样工作:
currentEntrantLine
内存储“一二三”。currentEntrantLine
中。这样currentEntrantLine
的内容就是“一个”。不是整行。在下一次迭代中,您将使用扫描仪处理“四五六”和“四”作为currentEntranceLine
内容。