创建一个包含15个随机整数(0~9)的列表,然后去掉其中的所有重复数字。

 import java.awt.Color;
import java.awt.Cursor;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.LinkedList;
import java.util.ListIterator;
import java.util.Random;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
/**
 * 创建一个包含15个随机整数(0~9)的列表,然后去掉其中的所有重复数字。
 * @author 王兰礼
 * @date 2009/11/11
 */
public class RemoveDuplicates {
 static JButton b1;
 static JButton b2;
 static JTextField jtf1;
 static JTextField jtf2;
 
 static final int NUM = 15;
 static int[]in=new int[NUM];
 private static boolean generated=false;
 
 public static void main(String[] args) {
  generateFrame();
 }

 public static void generateFrame() {
  JFrame frame = new JFrame("Removing Duplicates");
  frame.setLayout(new GridLayout(3, 2));
  b1 = new JButton("Generate List");
  b2 = new JButton("Remove Duplicates");
  JLabel jl=new JLabel("Designed By Wanglanli   Date:2009/11/11"); 
  
  jtf1 = new JTextField();
  jtf2 = new JTextField();
  jtf1.setForeground(Color.red);
  jtf1.setFont(new Font(null, 1, 16));
  jtf2.setForeground(Color.blue);
  jtf2.setFont(new Font(null, 1, 16));
  
  frame.add(b1);
  frame.add(jtf1);
  frame.add(b2);
  frame.add(jtf2);
  frame.add(jl);
  
  b1.addActionListener(new ActionListener() {

   public void actionPerformed(ActionEvent e) {
    in=generateRandom();
    StringBuffer sb = new StringBuffer();
    sb.append("[ ");
    for (int i = 0; i < in.length- 1; i++) {
     
     sb.append(in[i] + ",");
    }
    
    sb.append(in[in.length - 1] + " ]");
    jtf1.setText(sb.toString());
   }

  });
  b2.addActionListener(new ActionListener() {

   public void actionPerformed(ActionEvent e) {
    removeDuplicates();
   }

  }); 
  
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.setSize(500, 120);
  frame.setLocation(200, 200);
  frame.setResizable(false);
  frame.setVisible(true);

 }
/**
 * 产生15个随机数
 * @return
 */
 public static int[] generateRandom() {
  
  int[] randNum = new int[NUM];
  Random r = new Random();  
  for (int i = 0; i < NUM; i++) {
   randNum[i] = r.nextInt(10);   
  }
  generated=true;
  return randNum;

 }

 /**
  * 用一个迭代器从前往后扫描列表。如果后面的有和目标元素(target)相等的,就删除这个重复的元素。
  * 同时将count加一。对于每次外循环,内循环都执行一次,删除与目标元素相同的元素。之后,目标元素变成下一次迭代列表
  * 的第c个元素,因为前c-1个元素已经验证完毕。
  * @param count 代表需要循环的次数。当删除一个重复元素时,count加一。迭代一次,count也加一。这样能保证有效外循环次数。
  */
 public static void removeDuplicates() { 
  if(generated==false)
   {
    JOptionPane.showMessageDialog(null, "Please First generateData");
    return;
   }
  LinkedList<Integer> alist=new LinkedList<Integer>();
  for(int i=0;i<in.length;i++)
   alist.add(in[i]);
  
  ListIterator iter = alist.listIterator();  
  Integer target = null;
  //控制外循环次数
  int count=0;
  //迭代次数,下一个目标元素为列表中的第c个,因为前c-1次迭代已经遍历完了前c-1个元素。
  int c=0;
  
  while(count<NUM){   
   for(int i=0;i<=c;i++)
    target=(Integer)iter.next();
   while (iter.hasNext()) {
    Integer i = (Integer) iter.next();
    if (target.equals(i)) {
     iter.remove();    
     count++;
    }       
   }
   //将指针指向迭代完后的新列表
   iter=alist.listIterator();
   count++;
   c++;
  }
  
  jtf2.setText(alist.toString());  
 }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值