填充ArrayList和在期望的输出
您好SO专家除去forwardSlash,填充ArrayList和在期望的输出
步骤1 .I已经创建了一个类DVDInfo具有标题,流派,leadActor与相应getter和setter如图中下面的代码。
问题:我必须从dvdInfo.txt文件中填入“正斜杠/”,并且所需的输出应该包含不带“正斜杠/”的arrayList。
------------------------------------
dvdInfo.txt file
------------------------------------
Donnie Darko/sci-fi/Gyllenhall, Jake
Raiders of the Lost Ark/action/Ford, Harrison
2001/sc-fi/??
Caddy Shack/comedy/Murray, Bill
Star Wars/sc-fi/Ford, Harrison
Lost in Translation/comedy/Murray, Bill
Patriot Games/action/Ford, Harrison
-------------------------------------
import java.util.*;
import java.io.*;
class DVDInfo{
private String title;
private String genre;
private String leadActor;
DVDInfo(String t,String g,String a){
this.title = t;
this.genre =g;
this.leadActor=a;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getGenre() {
return genre;
}
public void setGenre(String genre) {
this.genre = genre;
}
public String getLeadActor() {
return leadActor;
}
public void setLeadActor(String leadActor) {
this.leadActor = leadActor;
}
@Override
public String toString() {
return "DVDInfo [title=" + title + ", genre=" + genre + ", leadActor="
+ leadActor + "]";
}
}
public class TestDVD {
/*
* //access dvdInfo.txt file and populate the arrayList by removing forward slash.
*/
public static void populateList() throws Exception {
BufferedReader br = new BufferedReader(new FileReader(new File("C:\\src\\dvdInfo.txt")));
//read each line of dvdInfo.txt below
String line=br.readLine();
while(line !=null) {
DVDInfo = new DVDInfo(t,g,a);
// Step 1.Wanted to create a DVDInfo Instance for each line of data we read in from dvdInfo.txt file.//failed to do so
// Step 2.for each DVDInfo Instance ,we need to parse the line of data and populate DVDInfo's 3 instance variables --no clue.
// Step 3.Finally put all DVDInfo instances into the ArrayList--- i dont know how to proceed(no clue)
}
}
public static void main(String[] args) {
ArrayList<DVDInfo> dvdList= new ArrayList<DVDInfo>();
try{
populateList();
}catch(Exception e){
System.out.println("Exception caught"+e.getMessage());
}
System.out.println(dvdList);
}
}
------------------------------------------------------
output of populateList should be without forward slash
------------------------------------------------------
Donnie Darko sci-fi Gyllenhall, Jake
Raiders of the Lost Ark action Ford, Harrison
2001 sc-fi ??
Caddy Shack comedy Murray, Bill
Star Wars sc-fi Ford, Harrison
Lost in Translation comedy Murray, Bill
Patriot Games action Ford, Harrison
请帮我PopulateList方法的Java版本1.5的代码,我坚持这一点。
谢谢它所有的工作!欢呼所有SO专家。
populateList()
//Signature of method changed to add List<DVDInfo> as a parameter
public static void populateList(List<DVDInfo> info) throws Exception {
BufferedReader br = new BufferedReader(new FileReader(new File("C:\\src\\dvdInfo.txt")));
//read each line of dvdInfo.txt below
String line = null;
while ((line = br.readLine()) != null) { //check line in loop
String[] tokens = line.split("/");
DVDInfo infoItem = new DVDInfo(tokens[0],tokens[1],tokens[2]);
info.add(infoItem);
}
}
主()
//dvdList is now passed to the method.
public static void main(String[] args) {
ArrayList<DVDInfo> dvdList= new ArrayList<DVDInfo>();
try{
populateList(dvdList);
}catch(Exception e){
System.out.println("Exception caught"+e.getMessage());
}
System.out.println(dvdList);
}
无限循环问题
代码的这一部分将导致无限循环。
String line=br.readLine();
while(line !=null) {
DVDInfo = new DVDInfo(t,g,a);
}
这是因为从缓冲区读取一行,然后在该行不为空时执行循环。由于不会从缓冲区读取新行,因此行永远不会为空,从而创建无限循环。这可以使用固定:
String line = null;
while ((line = br.readLine()) != null) { //check line in loop
}
这种循环结构分配从缓冲区`〜应变
行
将分隔线置于/上,您应该获得所需的值。尝试line.split(“/”);
我无法在populateList()方法中做到这一点。你可以帮我使用填充列表方法中的代码,你能完成populatelist方法吗? – Deepak 2013-03-18 09:37:57
String [] array = line.split(“/”); //这会给你数组中的元素,只是在构造函数中传递它们。 – 2013-03-18 09:39:17
//第一步:为我们从dvdInfo.txt文件中读取的每一行数据创建一个DVDInfo实例//不能这样做 //步骤2.对于每个DVDInfo实例,我们需要解析数据并填充DVDInfo的3个实例变量 - 无从得知。 //第3步。最后把所有的DVDInfo实例放入ArrayList ---我不知道如何继续(不知道) – Deepak 2013-03-18 09:40:01
你必须填充数据并返回列表返回到您的主要功能:
public static ArrayList<DVDInfo> populateList() throws Exception {
ArrayList<DVDInfo> dvdList= new ArrayList<DVDInfo>();
BufferedReader br = new BufferedReader(new FileReader(new File("C:\\src\\dvdInfo.txt")));
//read each line of dvdInfo.txt below
String line=br.readLine();
while ((String line = br.readLine()) != null) {
//for each line use
String[] tokens = line.split("/");
DVDInfo dvdInfo = new DVDInfo(tokens[0],tokens[1],tokens[2]); //step 1 & 2
dvdList.add(dvdInfo);//step 3
}
return dvdList;
}
线程“main”中的异常java.lang.OutOfMemoryError:java.util.ArrayList上的java.util.Arrays.copyOf(Unknown Source)上的java.util.Arrays.copyOf(Unknown Source)上的Java堆空间。在TestDVD.main处的TestDVD.populateList(TestDVD.java:74)处的java.util.ArrayList.add(未知源)处的java.util.ArrayList.ensureCapacityInternal(未知源)处的增长(未知源)(TestDVD.java:88 – Deepak 2013-03-18 09:59:29
@Deepak只需重新启动你的tomcat一次,然后再次运行程序。 – Lakshmi 2013-03-18 10:05:34
这是一个单一的程序 – Deepak 2013-03-18 10:06:28
即时获取以下错误 – Deepak 2013-03-18 09:54:19
线程“main “java.lang.OutOfMemoryError:Java堆空间 \t在java.util.Arrays.copyOf(来源不明) \t在java.util.Arrays.copyOf(来源不明) \t在java.util.ArrayList.grow(未知源) \t at java.util.ArrayList.ensureCapacityInternal(Unknown Source) \t at java.util.ArrayList.add(Unknown Source) \t at TestDVD.populateLi st(TestDVD.java:74) \t at TestDVD.main(TestDVD.java:88) – Deepak 2013-03-18 09:54:35
@Deepak看到更新,我很惊讶没人发现 – 2013-03-18 10:00:46