首页 > 解决方案 > 在列中显示来自arraylist的数据java

问题描述

我想知道我应该如何从列中的数组列表中获取元素(彼此下方),如下所示:

BMI:   Length:   gewicht:
1.69       30     24.25
2.58       55     28.25

这是我的代码:

 @Override
    public String toString() {
        return String.format("%-17.1f%-15.2f%.2f",lengte, gewicht,bmi);        
        
    }


    public static void main(String[]args){
        ArrayList<BMICalculator> bmilist = new ArrayList<>();
JOptionPane.showMessageDialog(null, String.format("length:%-9sgewicht:%-8sbmi:","","") );

        do {
            double lengte = getLength("Geef de lengte in Meters:");
            double gewicht = getGewicht("Geef het gewicht in Kg:");
            BMICalculator bmi = new BMICalculator(lengte, gewicht);
            bmi.setBmi(bmi.calculateBMI());
            bmilist.add(bmi);           
            
            JOptionPane.showMessageDialog(null, String.format("%s", bmi.toString()));
        } while(getUserAnswer() == 'J');

        JOptionPane.showMessageDialog(null,  String.format("%s", bmilist.toString()));
        System.out.println(bmilist);

    }

这段代码给了我这个:长度:gewicht:Bmi:1,7 80,00 28,01,长度:gewicht:bmi:1,6 55,00 22,03

我不想要那个长度,gewicht 和 bmi 一直在重复......帮助!

标签: javaarraylist

解决方案


String.format您的标题和数据在该掩码中合并在一起。这就是标题不断重复的原因。您需要将它们分开。因此String.format("length:%-9sgewicht:%-8sbmi:","",""),在循环之前使用一次打印标题。并针对每一行数据使用String.format("%-17.1f%-15.2f%.2f",lengte, gewicht,bmi)。这样我觉得你会没事的。

但是,如果您想要的是将整个文本放入同一个窗格中,它将是这样的:

public static void main(String[] args) {
    StringBuilder sb = new StringBuilder();
    ArrayList<BMICalculator> bmilist = new ArrayList<>();
    
    sb.append(String.format("length:%-9sgewicht:%-8sbmi:\n", "", ""));

    do {
        double lengte = getLength("Geef de lengte in Meters:");
        double gewicht = getGewicht("Geef het gewicht in Kg:");
        BMICalculator bmi = new BMICalculator(lengte, gewicht);
        bmi.setBmi(bmi.calculateBMI());
        bmilist.add(bmi);

    } while (getUserAnswer() == 'J');
    
    for (BMICalculator item : bmilist) {
        sb.append( item.toString() );
    }
    
    JOptionPane.showMessageDialog(null, sb.toString());
    
    System.out.println(bmilist);
}

推荐阅读