-2

我有一个方法可以返回我通过 buttonListener 调用的数组列表。我需要能够将每个推送结果数组列表存储在另一个数组列表中。我该怎么做呢?每次我尝试时,它都会复制我用来跟踪推送结果的数组列表中的现有元素。

private class ButtonListener implements ActionListener{
public  void actionPerformed (ActionEvent e){
    numCounter++;
    String reqVal1 = requestor.getText();
    int reqVal = Integer.parseInt(reqVal1);
    request = reqVal;
    requestsArray.get(3).set(0,0);
    if(numCounter == 1){//---------------------------numCounter == 1 beginning--------   -------------------------
        workingVar = memSize/2; 
                if(request>workingVar){
                    requestsArray.get(3).set(0,1);
                }
                else{   
           reqCounter++;
    while (workingVar>=request){
        workingVar = workingVar/2;
        holes2.add(workingVar);
    }
    if(workingVar<request){
        workingVar=workingVar*2;
        holes2.add(workingVar);    
        holes2.remove(holes2.size()-2);
        holes2.remove(holes2.size()-1);
            }
    }
    e1=workingVar;
    }//-----------------------------------------------end of numCounter == 1 section-------------------------------------
    if(numCounter > 1){
        for (int y = 0; y<requestsArray.get(0).size();y++){
            if(requestsArray.get(1).get(y).equals("H")){
                holes.add((Integer)requestsArray.get(0).get(y));
            }
        }
        //BubbleSort of holes ArrayList
        int in, out;
        for(out= holes.size()-1; out>0;out--) 
            for(in =0; in<out;in++)
            if(holes.get(in)<holes.get(in+1)){
                int temp1 = holes.get(in+1);
                int temp2 = holes.get(in);
                holes.set(in, temp1);
                holes.set(in+1, temp2);
            }

    //calculates the value of e1 using holes array
        if(holes.isEmpty()){
            requestsArray.get(3).set(0, 1); 
        }
        else{
        for(element=holes.size()-1;element>-1;element--){//starts at end of holes array loops backwards
            e1 = holes.get(element); //assigns value of each element to e1  
         if(e1>=request)    //if value e1 is greater than request stop looping                                                           
            break;                        
            }

    workingVar=e1; //assign the value of e1 to workingVar
    if (request>e1){
        requestsArray.get(3).set(0, 1);                   
    }
    else{
        //---------------------code for populating holes2 array---------------------------
        reqCounter++;
    if(workingVar!=request && workingVar/2>=request){
        while (workingVar/2>=request){
            workingVar = workingVar/2;
            holes2.add(workingVar);
            }     
        if(workingVar<request){
            workingVar=workingVar*2;
            holes2.add(workingVar); 
                    }
                }
            }
        }
    }

    //Sort of Holes2 ArrayList - reorder's holes2 for initial set up and subsequent inserts
    int in, out;
    for(out= holes2.size()-1; out>0;out--) 
        for(in =0; in<out;in++)
        if(holes2.get(in)>holes2.get(in+1)){
            int temp1 = holes2.get(in+1);
            int temp2 = holes2.get(in);
            holes2.set(in, temp1);
            holes2.set(in+1, temp2);
        }

   //-------------------------------requestsArray Setups----------------------------------------------------
        //Initial setup of requestsArray 
    if(numCounter == 1){
        if(requestsArray.get(3).get(0).equals(0)){
        requestsArray.get(0).set(0,e1);
        requestsArray.get(1).set(0,"R");
        requestsArray.get(2).set(0, reqCounter);;
        for(int i = 0; i<holes2.size();i++){
            requestsArray.get(0).add(holes2.get(i));
            requestsArray.get(1).add("H");
            requestsArray.get(2).add(0);
            }
        }
        else{
            requestsArray.get(0).set(0,e1);
            requestsArray.get(1).set(0, "H");       
            requestsArray.get(2).set(0,0);
        }
    }

    //Subsequent setup of requestsArray

    int element2;           
    if(numCounter >1 && requestsArray.get(3).get(0).equals(0)){
        for(element2 = 0; element2< requestsArray.get(0).size(); element2++){
            if((Integer)requestsArray.get(0).get(element2)==e1 &&requestsArray.get(1).get(element2).equals("H") ){
                break;
                    }
        }
            if(holes2.isEmpty()){
            requestsArray.get(1).set(element2, "R");
            requestsArray.get(2).set(element2, reqCounter);
                    }
            else{ //holes2 is not empty
                requestsArray.get(0).add(element2, workingVar);
                requestsArray.get(2).add(element2,reqCounter);
                requestsArray.get(1).add(element2, "R");
                requestsArray.get(0).remove(element2+1);
                requestsArray.get(2).remove(element2+1);
                requestsArray.get(1).remove(element2+1);                    
                for(int i = 1; i<holes2.size()+1;i++){
                    requestsArray.get(0).add(element2+i,holes2.get(i-1));
                    requestsArray.get(1).add(element2+i,"H");
                    requestsArray.get(2).add(element2+i,0);
                    }
                }                           
        }


    //-----------------End Section for populating requestsArraywhen numCounter > 1---------------------------           

        //remove all values from holes1 and holes2
        holes.clear();
        holes2.clear();
        System.out.println(results1);

好的。我写了一个类似的程序,它更简单,更容易理解。每次按下按钮时,结果都会作为 arrayList 保存到另一个 arrayList。问题是它将它附加到前一个元素。我需要能够将每次印刷的结果添加为单独的元素。例如:第一次按下:[5, 3, 5, 2, 6, 5] 第二次按下将显示:[5, 3, 5, 2, 6, 5][2, 1, 4, 1, 4, 1]这样我可以循环遍历并分别获取每个数组结果。我该怎么做呢?

public class mainClass{
        public static void main(String[] args){
JFrame frame1 = new JFrame("testButton");
frame1.setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE);
buttonExample b1 = new buttonExample(); 
frame1.getContentPane().add(b1);
frame1.pack();
frame1.setVisible(true);
            }

    }

    public class Example {
            private int rand1; 
            private ArrayList<ArrayList> count; 
            private ArrayList<Integer> count2;
            private Random rnd;
            private int counter1;
            private ArrayList<ArrayList>count3;
        public Example(){
            count = new ArrayList<ArrayList>();
            count2 = new ArrayList<Integer>();
            rnd = new Random();
            count3 = new ArrayList<ArrayList>();
}
        private void addCount2(){
            for(int x = 0; x<6;x++){
            rand1 = rnd.nextInt(6)+1;
            count2.add(rand1);// count2 == Integers
            }
        }

        public void addCount(){
            addCount2();
            count.add(count2);// count == count3
        }
        public ArrayList<ArrayList> displayCount(){
        return count;   

        }
}

public class buttonExample extends JPanel {
private JButton button1;
private Example example1;
public buttonExample(){
button1 = new JButton("Submit");
add(button1);
button1.addActionListener(new ButtonListener());
example1 = new Example();
}
private class ButtonListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
    example1.addCount();
    System.out.println(example1.displayCount().get(0));;
    }
}
}
4

1 回答 1

3

我会考虑至少两个解决方案......

  1. 创建一个List<...> list将持续的(全局变量或类似的东西,取决于您的需要)并使用list.addAll()方法
  2. 创建一个Map<String, List<...> map并且您可以单独记录您的列表,例如,您的密钥可能是时间戳

好吧,现在当您发布代码时,您将不得不从不同的事情开始——重构。您的代码很长,难以阅读且容易出错。您必须考虑一下重写它。相信我,一开始你在代码中投入的精力越多,结果就会越好。否则你可能会得到一个充满错误的难以管理的代码......

于 2012-12-09T01:08:11.610 回答