我是一名新的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
答案 0 :(得分:1)
首先读取文件,然后遍历列表或地图进行搜索,排序等。在上面的代码中,在迭代列表之前关闭while循环。
答案 1 :(得分:0)
如果您要遍历ArrayList
,可以使用增强型for-loop
来迭代它。注意:在增强型for-loop
中,无法对ArrayList
进行更改,因为增强型for-loop
使ArrayList
基本上(并暂时)读取-只要。这可以用于迭代以提取值,但不能用于添加值。因为你正在改变ArrayList
这不起作用,但我只是认为你应该知道它,如果你还没有。增强型for-loop
就像这样工作,我将单独的部分放在花括号中,
for({Object Type of ArrayList} {Dummy Value} : {name of ArrayList}),
所以它看起来像这样:for(MovieReview x: movies)
。
关于此嵌套for-loop
的内部部分:
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);
}
}
}
为什么你有内在的部分? j
变量从不用于任何事情,因此for-loop
似乎没用。当然,除非你在内循环的顶部犯了一个错误并且意味着m2 = movies.get(j);
,但这似乎不太可能。
关于无限循环,你编写for-loops
的方式不应该是无限循环,因为它们都会增加到可达的某个值。您的while-loop
似乎无限运行,但如果break
指向null,我会注意到您有strline
。我认为这肯定发生在文件的末尾,但我建议您为while-loop
while(scannerName.hasNext())
做出条件。这样,您的while-loop
最终可以在没有额外代码的情况下终止,加上Scanner
代替BufferedReader
会稍微提高效率,并且仍会执行BufferedReader
可以执行的所有操作还有更多,就像那种方法hasNext()
。
我希望这有帮助。如果您有其他问题,请告诉我。祝你好运。