Java ArrayList和不同类的连接

Java ArrayList和不同类的连接,java,class,arraylist,Java,Class,Arraylist,我对Java很陌生。我正在尝试将这些类连接在一起。Go类是主类,应该最终运行程序。根据Eclipse,程序不包含任何错误,但在运行时,输出为空 围棋课: public class Go { public static void main(String[] args) { Data klasseObject = new Data(); klasseObject.infoListe(); } } An

我对Java很陌生。我正在尝试将这些类连接在一起。
Go
类是主类,应该最终运行程序。根据Eclipse,程序不包含任何错误,但在运行时,输出为空

围棋课:

public class Go {           
    public static void main(String[] args) {       
        Data klasseObject = new Data();
        klasseObject.infoListe();       
    }
}
Ansat
类:

import java.util.ArrayList;

public class Ansat {    
    public String navn;
    public int alder;

    public Ansat(String navn, int alder, ArrayList<Ansat> ansat){
        this.navn = navn;
        this.alder = alder;         
    }

    public int getAlder() {
        return alder;
    }

    public void setAlder(int alder) {
        this.alder = alder;
    }

    public String getNavn() {
        return navn;
    }

    public void setNavn(String navn) {
        this.navn = navn;
    }
}

实际上,您所遵循的过程是完全正确的,但是由于您没有打印arraylist,所以您的输出变为空白。只需添加下面的行,您将看到正确的输出

public void infoListe(){

        ansat = new ArrayList<Ansat>();
        ansat.add(new Ansat("Hej", 123, ansat));
        System.out.println(ansat);

    }
即使在数组列表上迭代,也会获取输出-

 for (Ansat ansatLoop : klasseObject.getAnsat()) {
            System.out.println(ansatLoop.getAlder() + ":"
                    + ansatLoop.getNavn());
        }

我希望这能解决您的查询。

ArrayList的内容输出到控制台

    public class Go {

        public static void main(String[] args) {

        Data klasseObject = new Data();
        klasseObject.infoListe();   

        for(Ansat ansat : getAnsat()){
           system.out.println(ansat.getNavn(), ansat.getAlder());
         }
       }
   }

我建议只进行两次修改,以获得正确的可读输出

将以下方法添加到您的
Ansat

//modify the returned string however you want it to appear
public String toString() {
    return navn + " , " + alder; 
}
然后将这一行添加到
Go
class的主方法中(最后一条语句)

添加到
Ansat
toString()
类覆盖了Ansat的toString()方法,这意味着它允许您以所需的方式打印Ansat类的字段,并且每当您在Ansat对象上调用
toString()
时,它都会为您打印它,如下所示:

Hej , 123
您可以更新
toString()
方法以按需打印

如果您希望在ArrayList中包含多个元素,则必须执行以下更改(但是,我确实希望声明您的操作方式不正确):

这将改变您的数据类

public void infoListe(){
    if(ansat != null) {
        ansat.add(new Ansat("Hej", 123, ansat));
    } else {
        ansat = new ArrayList<Ansat>();
        ansat.add(new Ansat("Hej", 123, ansat));
    }
}
public void infoListe(){
if(ansat!=null){
增加(新的安萨特(“Hej”,123,安萨特));
}否则{
ansat=新的ArrayList();
增加(新的安萨特(“Hej”,123,安萨特));
}
}
如果我要检查您的代码并提出改进建议,那么我会在您的类中做以下更改(复制/粘贴以下代码Go.java文件并运行它):

import java.util.ArrayList;
公共课围棋{
公共静态void main(字符串[]args){
//在下面运行将创建位于KlasseObject内部的ArrayList
数据对象=新数据();
//创建一个Ansat(嘿,123)并将其添加到列表中
设置数据(“嘿”,123);
//创建一个Ansat(Raf,555)并将其添加到列表中
klasseObject.setData(“Raf”,555);
//创建一个Ansat(X战警,999)并将其添加到列表中
klasseObject.setData(“X战警”,999);
//只要您想要多少类,它就会将它们全部添加到列表中
//克拉塞物体
//现在我们设置了三个ansat,我们将检索列表并打印
//全部
对于(Ansat s:klasseObject.getAnsatList())
System.out.println(s.toString());
}
}
安萨特班{
公共字符串导航;
公共国际桤木;
//从构造函数中删除数组列表(不需要)
公共安萨特(字符串导航,内部导航){
this.navn=navn;
this.alder=桤木;
}
public int getAlder(){
返回桤木;
}
公共空间塞特奥尔德(内部奥尔德){
this.alder=桤木;
}
公共字符串getNavn(){
返回导航;
}
公共void setNavn(字符串navn){
this.navn=navn;
}
//将toString方法重写为pretty print Ansat对象
公共字符串toString(){
返回navn+“,”+alder;
}
}
类数据{
私人ArrayList ansat;
//添加了数据的构造函数以使用空列表初始化数据
公共数据(){
ansat=新的ArrayList();
}
//将infoListe替换为setData,并向其中添加了参数,以便
//从主方法传递它们
public void setData(字符串名,int-age){
//每次调用setData时,都会向列表中添加一个新的Ansat
安萨特a=新安萨特(姓名、年龄);
安萨特.添加(a);
}
公共阵列列表getAnsatList(){
返回安萨特;
}
}

您的代码工作正常!它没有

       System.out.println();
在运行的方法中的任何位置。 如果修改infoListe()方法以添加println,它将打印出一些内容

   public void infoListe(){

    ansat = new ArrayList<Ansat>();
    ansat.add(new Ansat("Hej", 123, ansat));
    System.out.println("Element Added to ArrayList"); 




}
public void infoListe(){
ansat=新的ArrayList();
增加(新的安萨特(“Hej”,123,安萨特));
System.out.println(“添加到ArrayList的元素”);
}

这可能是因为您没有输出任何内容,但我已经通过数据类向ArrayList添加了信息。我希望程序输出“Hej,123”,就像在数据类中写的那样添加这个System.out.println(klasseObject.getAnsat().get(0));到您的主方法,并查看您在输出中得到了什么。您没有打印任何内容。请使用S.O.P打印输出。你已经准备好了你的接受者和接受者,所以不会有太大的问题。谢谢你的回答。输出仍然不是100%正确。输出为:[Ansat@6d06d69c]“对于(Ansat-ansatLoop:klasseObject.getAnsat()){System.out.println(ansatLoop.getAlder()+”:“+ansatLoop.getNavn());}请在main方法中尝试上述代码,以便获得答案是的。非常感谢。它仍然不会打印结果,只会打印:“元素添加到ArrayList”。@XOR Manik原始代码中没有其他行可以打印任何内容。基本上,您的答案很好,谢谢。但是如果我在ArrayList中添加更多的数据,它仍然只打印“Hej,123”,您需要在列表中循环。让我用示例更新代码。@EmilMørkeberg我修改了我的答案,以展示如何在列表中添加多个Ansat对象,然后打印它们。修改代码以允许添加多个Ansat对象是一件棘手的事情,但我在上面的示例中展示了这一点。我刚才还修改了所有代码,以帮助您轻松添加Ansat对象。复制/粘贴最后一段代码并运行它,看看它是如何工作的。非常感谢您的详细回答。非常感激
Data klasseObject = new Data();
klasseObject.infoListe(); 

Data klasseObject2 = new Data(); 
klasseObject.infoListe(); 

Data klasseObject3 = new Data(); 
klasseObject.infoListe(); 

for(Ansat s: klasseObject.getAnsat()) 
    System.out.println(s.toString());
public void infoListe(){
    if(ansat != null) {
        ansat.add(new Ansat("Hej", 123, ansat));
    } else {
        ansat = new ArrayList<Ansat>();
        ansat.add(new Ansat("Hej", 123, ansat));
    }
}
import java.util.ArrayList;
public class Go {
    public static void main(String[] args) {
        // running below creates an ArrayList<Ansat> that is inside KlasseObject
        Data klasseObject = new Data();

        // creates one Ansat(Hey,123) and add it to list
        klasseObject.setData("Hey", 123);

        // creates one Ansat(Raf,555) and add it to list
        klasseObject.setData("Raf", 555);

        // creates one Ansat(X-men,999) and add it to list
        klasseObject.setData("X-men", 999);

        //as many classes as you want, it would add them all to the list
        //of klasseObject 

        // now that we set three Ansats, we will retrieve the list and print
        // them all
        for (Ansat s : klasseObject.getAnsatList())
            System.out.println(s.toString());
    }
}

class Ansat {
    public String navn;
    public int alder;

    //remove the array list from constructor, not needed
    public Ansat(String navn, int alder) {
        this.navn = navn;
        this.alder = alder;
    }

    public int getAlder() {
        return alder;
    }

    public void setAlder(int alder) {
        this.alder = alder;
    }

    public String getNavn() {
        return navn;
    }

    public void setNavn(String navn) {
        this.navn = navn;
    }

    //overrided toString method to pretty-print Ansat object
    public String toString() {
        return navn + " , " + alder;
    }
}

class Data {
    private ArrayList<Ansat> ansat;

    // added the constructor for Data to initialize Data with empty list
    public Data() {
        ansat = new ArrayList<Ansat>();
    }

    //replaced infoListe to setData and added args to it so you can 
    //pass them from main method
    public void setData(String name, int age) {
        // every time setData is called a new Ansat is added to list
        Ansat a = new Ansat(name, age);
        ansat.add(a);
    }

    public ArrayList<Ansat> getAnsatList() {
        return ansat;
    }
}
       System.out.println();
   public void infoListe(){

    ansat = new ArrayList<Ansat>();
    ansat.add(new Ansat("Hej", 123, ansat));
    System.out.println("Element Added to ArrayList"); 




}