我有一个问题要找到正确的对象。当我启动程序时,它会创建一个对象。当我将opon称为opode时,方法会创建一个新对象,但是当我尝试打印对象信息时,我从第一个对象获取信息。我如何参考新对象?
public Meny () {
tekstgr = new Tekstgrensesnitt();
fil = new Fil();
this.cde = new CDarkiv();
}
public CDArkivADT lesFraFil(CDArkivADT cde, String filnavn) throws java.io.IOException {
try {
// // 1 - FileReader
FileReader ansFil = new FileReader(filnavn);
// 2 - BufferedReader
BufferedReader innfil = new BufferedReader(ansFil);
// 3 - Leser den første posten som er antall info-poster
String linje = innfil.readLine();
int n = Integer.parseInt(linje);
// Oppretter CDarkiv
cde = new CDarkiv(n);
// 4 - Les postene, en hel post om gangen
for (int i = 0; i < n; i++) {
String post = innfil.readLine();
String[] felt = post.split(SKILLE);
int nr = Integer.parseInt(felt[0]);
String artist = felt[1];
String tittel = felt[2];
int år = Integer.parseInt(felt[3]);
Sjanger sjanger = Sjanger.valueOf(felt[4]); //Eventuelt lagret som heltall
//...Må så konvertere til enum
String plselskap = felt[5];
CD cd = new CD(nr, artist, tittel, år, sjanger, plselskap);
cde.leggTilCd(cd);
}
System.out.println(Arrays.toString(cde.getArkiv()));
// 4 - Lukk filen
innfil.close();
}
catch (FileNotFoundException unntak) {//arver fra IOException må stå først
// hvis ikke vil unntaket for IOException skygge
System.out.println("Finner ikke filen " + filnavn);
System.exit(-1);
}
catch (IOException e) {
System.out.println("Feil ved lesing av fil: " + e);
System.exit(1);
}
return cde;
}
public void start() {
Scanner tast = new Scanner(System.in);
String filnav = "test.txt";
System.out.println("Press '1' for å 'Lese fra fil'" + "\n" + "Press '2' for å 'Skrive til fil'");
int g = tast.nextInt();
if(g == 1) {
try {
fil.lesFraFil(cde, filnav);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("Tast '1' for å søke etter tittel." + "\n" + "Tast '2' for å søke etter artist/gruppe");
int f = tast.nextInt();
if(f == 1) {
String twmp = tast.nextLine();
String temp = tast.nextLine();
CD d = cde.finnCD(temp);
tekstgr.visCD(d);
} else {
String temp = tast.nextLine();
cde.finnArtist(temp);
}
}
public static void main(String[] args) {
Meny meny = new Meny();
meny.start();
}
答案 0 :(得分:0)
您对cde
的第一次声明在哪里?
当您通过方法传递它时,参数中的参考是原始参考的副本,因此为其指定值不会更改原始变量。
我看到你在方法中返回cde
,这样可行,但是你没有在main方法中使用返回的对象。我建议删除cde
参数,因为它毫无意义,并按照以下方式更改lesFraFil
来电:
CDArkivADT cde = file.lesFraFil(filnav);
答案 1 :(得分:0)
公共类CDarkiv实现了CDArkivADT {
private CD[] cdTabell;
private int antall;
public CDarkiv (int antall) {
this.antall = antall;
cdTabell = new CD[antall];
}
public CDarkiv() {
antall = 0;
cdTabell = new CD[0];
}
{...}
public interface CDArkivADT {
public void utvidKapasitet(); //Utvider kapasiteten til et CD arkiv
public CD[] getArkiv(); //Henter arkiv
public void leggTilCd (CD c); //Legger til en CD i arkiv
public void slettCd (CD c); //Sletter en CD i arkiv
public CD finnCD (String s); //Finner CD-er ved gitt delstreng
public String finnArtist (String s); //Finner alle CD-er som tilhører en artist ved gitt delstring
public int hentAntall(Sjanger sjanger); //Henter antall CD-er i en sjanger
public int getAntall (); //Henter antall CD-er
}