Java如何计算随机删除某些元素的arrayList的平均值?

Java如何计算随机删除某些元素的arrayList的平均值?,java,arrays,swing,arraylist,Java,Arrays,Swing,Arraylist,我有一个arrayList和arrayList。Integer将货币作为整数保存,JLabel将值作为字符串保存。我想从两个标签中随机删除元素。例如,如果在JLabel中删除20TL(tl是货币),我也希望在integer arrayList中删除它。很简单。但我想计算ArrayList中剩余资金的平均值。这是我的另一个数组列表,可以将0到23个数字混洗。因此,我删除了相同的元素IntList和JLabel list ArrayList<Integer> Numbers = new

我有一个
arrayList
arrayList
。Integer将货币作为整数保存,JLabel将值作为字符串保存。我想从两个标签中随机删除元素。例如,如果在JLabel中删除20TL(tl是货币),我也希望在integer arrayList中删除它。很简单。但我想计算ArrayList中剩余资金的平均值。这是我的另一个数组列表,可以将0到23个数字混洗。因此,我删除了相同的元素IntList和JLabel list

ArrayList<Integer> Numbers = new ArrayList<Integer>();
            for(int n = 0; n<24; n++){
                Numbers.add(n);
            }
        Collections.shuffle(Numbers);
当我试图删除InArrayList中的钱时,计算方法无法正常工作。因为例如,如果数字数组的第一个元素是5,那么50将被删除。arrayList将缩小。之后,当Numbers.get(asd)等于23时,int-arraylist中不会有第23个元素。因为它收缩了,没有第23种元素。我希望我能把我的问题说清楚


Ps:我尝试使用数组而不是arraylist。但我无法计算出左撇子的平均数。因为当删除某些元素时,数组不会收缩。

我会对代码做很多更改。首先,我会尝试创建一个值集合,这样我就不必对并行集合进行修改,因为我知道这样可以减少出错的机会。对于这种情况,我将使用
JList
并用整数填充其模型
DefaultListModel
。然后,我可以使用设置为土耳其语言环境的NumberFormat货币实例轻松地将其显示为土耳其里拉。例如,如果我这样创建模型:

// constants used to populate my model
private static final Integer[] VALUES = { 1, 5, 10, 25, 50, 100, 500, 1000, 2000, 5000, 10000,
        20000, 25000, 30000, 40000, 50000, 100000, 200000, 300000, 400000, 500000, 750000,
        1000000, 2000000 };

// locale for Turkey used to get its currency
private Locale trLocale = new Locale("tr", "TR");
// currency number formatter for Turkish Lira
private NumberFormat tlFormat = NumberFormat.getCurrencyInstance(trLocale);

// my JList's model
private DefaultListModel<Integer> listModel = new DefaultListModel<>();
// create the JList with its model
private JList<Integer> jList = new JList<>(listModel);

// elsewhere in my constructor
    // populate my list model with the array values
    for (Integer value : VALUES) {
        listModel.addElement(value);
    }

    // set my JList's renderer to render the numbers as Turkish Lira
    jList.setCellRenderer(new MyCellRenderer());

    // add my list to a JScrollPane and set how many rows are visible
    jList.setVisibleRowCount(10);
    JScrollPane scrollPane = new JScrollPane(jList);
//用于填充我的模型的常量
私有静态最终整数[]值={1,5,10,25,50,100,500,1000,2000,5000,10000,
20000, 25000, 30000, 40000, 50000, 100000, 200000, 300000, 400000, 500000, 750000,
1000000, 2000000 };
//土耳其的区域设置用于获取其货币
私有区域设置trLocale=新区域设置(“tr”、“tr”);
//土耳其里拉的货币编号格式化程序
私有NumberFormat tlFormat=NumberFormat.getCurrencyInstance(trLocale);
//我的JList模型
private DefaultListModel listModel=新的DefaultListModel();
//创建JList及其模型
私有JList JList=新JList(列表模型);
//在我的构造函数中的其他地方
//用数组值填充我的列表模型
for(整数值:值){
listModel.addElement(值);
}
//设置我的JList渲染器以将数字渲染为土耳其里拉
jList.setCellRenderer(新的MyCellRenderer());
//将我的列表添加到JScrollPane并设置可见的行数
jList.setVisibleRowCount(10);
JScrollPane scrollPane=新的JScrollPane(jList);
JList的单元格渲染器将其保存的值(此处为整数)更改为表示为土耳其里拉的字符串:

private class MyCellRenderer extends DefaultListCellRenderer {

    @Override
    public Component getListCellRendererComponent(JList<?> list, Object value, int index,
            boolean isSelected, boolean cellHasFocus) {
        String textValue = tlFormat.format(value); // format the Integer to its currency String

        // pass it into the super's renderer
        return super.getListCellRendererComponent(list, textValue, index, isSelected, cellHasFocus);
    }        
}
私有类MyCellRenderer扩展了DefaultListCellRenderer{
@凌驾
公共组件getListCellRenderComponent(JList列表、对象值、int索引、,
布尔值(已选择,布尔单元格已聚焦){
String textValue=tlFormat.format(value);//将整数格式化为其货币字符串
//将其传递到super的渲染器中
返回super.getListCellRenderComponent(列表、textValue、索引、isSelected、cellHasFocus);
}        
}
然后,如果以后我可以从按钮的ActionListener中的列表中删除所选值,并让它调用一个方法来计算列表中所有项目的平均值:

@Override
public void actionPerformed(ActionEvent e) {
    List<Integer> selectedValues = jList.getSelectedValuesList();
    for (Integer selectedValue : selectedValues) {
        listModel.removeElement(selectedValue);
    }

    // method elsewhere that iterates through the listModel, calculates an average
    // and displays it
    calculateAndDisplayAverage();
}
@覆盖
已执行的公共无效操作(操作事件e){
List selectedValues=jList.getSelectedValuesList();
for(整数selectedValue:selectedValues){
listModel.removeElement(selectedValue);
}
//方法遍历listModel,计算平均值
//并显示它
CalculateAndisplayeaverage();
}
可能看起来是这样的:


我会对代码做很多修改。首先,我会尝试创建一个值集合,这样我就不必对并行集合进行修改,因为我知道这样可以减少出错的机会。对于这种情况,我将使用
JList
并用整数填充其模型
DefaultListModel
。然后,我可以使用设置为土耳其语言环境的NumberFormat货币实例轻松地将其显示为土耳其里拉。例如,如果我这样创建模型:

// constants used to populate my model
private static final Integer[] VALUES = { 1, 5, 10, 25, 50, 100, 500, 1000, 2000, 5000, 10000,
        20000, 25000, 30000, 40000, 50000, 100000, 200000, 300000, 400000, 500000, 750000,
        1000000, 2000000 };

// locale for Turkey used to get its currency
private Locale trLocale = new Locale("tr", "TR");
// currency number formatter for Turkish Lira
private NumberFormat tlFormat = NumberFormat.getCurrencyInstance(trLocale);

// my JList's model
private DefaultListModel<Integer> listModel = new DefaultListModel<>();
// create the JList with its model
private JList<Integer> jList = new JList<>(listModel);

// elsewhere in my constructor
    // populate my list model with the array values
    for (Integer value : VALUES) {
        listModel.addElement(value);
    }

    // set my JList's renderer to render the numbers as Turkish Lira
    jList.setCellRenderer(new MyCellRenderer());

    // add my list to a JScrollPane and set how many rows are visible
    jList.setVisibleRowCount(10);
    JScrollPane scrollPane = new JScrollPane(jList);
//用于填充我的模型的常量
私有静态最终整数[]值={1,5,10,25,50,100,500,1000,2000,5000,10000,
20000, 25000, 30000, 40000, 50000, 100000, 200000, 300000, 400000, 500000, 750000,
1000000, 2000000 };
//土耳其的区域设置用于获取其货币
私有区域设置trLocale=新区域设置(“tr”、“tr”);
//土耳其里拉的货币编号格式化程序
私有NumberFormat tlFormat=NumberFormat.getCurrencyInstance(trLocale);
//我的JList模型
private DefaultListModel listModel=新的DefaultListModel();
//创建JList及其模型
私有JList JList=新JList(列表模型);
//在我的构造函数中的其他地方
//用数组值填充我的列表模型
for(整数值:值){
listModel.addElement(值);
}
//设置我的JList渲染器以将数字渲染为土耳其里拉
jList.setCellRenderer(新的MyCellRenderer());
//将我的列表添加到JScrollPane并设置可见的行数
jList.setVisibleRowCount(10);
JScrollPane scrollPane=新的JScrollPane(jList);
JList的单元格渲染器将其保存的值(此处为整数)更改为表示为土耳其里拉的字符串:

private class MyCellRenderer extends DefaultListCellRenderer {

    @Override
    public Component getListCellRendererComponent(JList<?> list, Object value, int index,
            boolean isSelected, boolean cellHasFocus) {
        String textValue = tlFormat.format(value); // format the Integer to its currency String

        // pass it into the super's renderer
        return super.getListCellRendererComponent(list, textValue, index, isSelected, cellHasFocus);
    }        
}
私有类MyCellRenderer扩展了DefaultListCellRenderer{
@凌驾
公共组件getListCellRenderComponent(JList列表、对象值、int索引、,
布尔值(已选择,布尔单元格已聚焦){
String textValue=tlFormat.format(值);//f