对象参考

时间:2016-01-25 16:45:28

标签: java object

我有一个问题要找到正确的对象。当我启动程序时,它会创建一个对象。当我将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();

}

2 个答案:

答案 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

}