【发布时间】:2015-04-01 18:14:23
【问题描述】:
我是一名新的 Java 程序员,我正在做一个项目,该项目需要我阅读包含电影评论的文本文件。
读取文件后,系统会要求我搜索和排序电影数组,然后返回每部电影的评论总数以及每部电影的平均评分。
我目前坚持的部分是遍历数组列表。
我正在使用内部和外部 for 循环,我似乎得到了一个无限循环。
我会很感激第二双眼睛。我已经盯着这个项目几天了,开始看不到错误。
代码如下:
import java.io.*;
import java.util.*;
import java.lang.*;
public class MovieReviewApp {
public static void main(String[] args)
{
String strline = "";
String[] result = null;
final String delimit = "\\s+\\|\\s+";
String title ="";
//int rating = (Integer.valueOf(- 1));
ArrayList<MovieReview> movies = new ArrayList<MovieReview>();
//ArrayList<String> titles = new ArrayList<String>();
//ArrayList<Integer> ratings = new ArrayList<Integer>();
//HashMap<String, Integer> hm = new HashMap<String, Integer>();
//ListMultimap<String, Integer> hm = ArrayListMultimap.create();
try
{
BufferedReader f = new BufferedReader(new FileReader("/Users/deborahjaffe/Desktop/Java/midterm/movieReviewData.txt"));
while(true)
{
strline = f.readLine(); // reads line by line of text file
if(strline == null)
{
break;
}
result = strline.split(delimit, 2); //creates two strings
//hm.put(result[0], new Integer [] {Integer.valueOf(result[1])});
//hm.put(result[0], Integer.valueOf(result[1]));
// titles.add(result[0]);
//ratings.add(Integer.valueOf(result[1]));
MovieReview m = new MovieReview(result[0]);
movies.add(m);
MovieReview m2 = new MovieReview();
int rating = Integer.valueOf(result[1]);
int sz = movies.size();
for (int i = 0; i < sz; i++)
{
for (int j = 0; j < sz; j++)
{
m2 = movies.get(i);
if (movies.contains(m2))
{
m2.addRating(rating);
}
else
{
movies.add(m2);
m2.addRating(rating);
}
}
}
movies.toString();
//Collections.sort(movies);
} //end while
f.close();
//Set<String> keys = hm.keySet();
//Collection<Integer> values = hm.values();
} //end of try
catch(FileNotFoundException e)
{
System.out.println("Error: File not found");
}
catch(IOException e)
{
System.out.println("Error opening a file.");
}
} // end main
} // end class
【问题讨论】:
-
我在打电话,所以代码很难阅读,但你确实有。那不是故意的无限循环吗?
-
它看起来不像无限循环,但您确实设置了指数循环结构。在 1,000 部电影中,您将添加一百万条评论,而且只会变得更糟。您可能想尝试电影的一个子集(如 5-10 部),以便找出代码中的所有错误。
-
@DeborahJaffe 我建议您快速查看我的答案,尤其是关于使用 Scanner 而不是 BufferedReader 以获得更高效率和更多功能的部分。关于您在 Sujan Reedy A 的回答中提到的问题,您能详细说明一下吗?我知道它没有被正确阅读,但也许代码的输入与输出在找出问题所在方面会更有用。
标签: java arraylist bufferedreader