📄 test.java
字号:
package firstproblem;
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Test extends JApplet {
JButton mouseInput = null;
JButton endMouseInput = null;
JLabel label = null;
JTextField field = null;
JButton randomPairs = null;
JPanel north = null;
MyCanvas canvas = null;
// 存储鼠标输入的点
List<Point1> plist = new ArrayList<Point1>();
// 用于判断输入方式
int state = -1;
// id用于表示鼠标输入点的编号
int id;
// id2用于表示随机输入点的编号
int id2;
// 用于记录最近点对
Pair pair = null;
// applet的大小
int width ,height;
public void init() {
setLayout(new BorderLayout());
// setSize(650, 400);
mouseInput = new JButton("鼠标输入");
endMouseInput = new JButton("标识最近点对");
label = new JLabel("请输入随机点的个数:");
field = new JTextField(10);
randomPairs = new JButton("输出最近的随机点对");
north = new JPanel();
north.add(mouseInput);
north.add(endMouseInput);
north.add(label);
north.add(field);
north.add(randomPairs);
add(north, BorderLayout.NORTH);
canvas = new MyCanvas();
add(canvas, BorderLayout.CENTER);
canvas.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
if (state == 0) {
++id;
plist.add(new Point1(e.getPoint().x, e.getPoint().y, id));
canvas.repaint();
}
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
});
mouseInput.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
// 鼠标输入
state = 0;
id = 0;
pair = null;
plist.clear();
canvas.repaint();
}
});
endMouseInput.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
Point1 p[] = new Point1[plist.size()];
for (int i = 0; i < p.length; i++) {
Point1 p1 = plist.get(i);
p[i] = new Point1(p1.x, p1.y, p1.id);
}
pair = ClosestPair.cpair2(p);
// System.out.println(pair.a.toString());
// System.out.println(pair.b.toString());
if(pair==null){
JOptionPane.showMessageDialog(getParent(),"请输入2个或2个以上的点");
}
canvas.repaint();
}
});
randomPairs.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
plist.clear();
state = -1;
id2 = 0;
repaint();
int count = Integer.parseInt(field.getText());
for(int i=0;i<count;i++){
++id2;
Point1 p = new Point1((int)(Math.random()*width+1),(int)(Math.random()*height+1),id2);
plist.add(p);
}
Point1 p[] = new Point1[plist.size()];
for (int i = 0; i < p.length; i++) {
Point1 p1 = plist.get(i);
p[i] = new Point1(p1.x, p1.y, p1.id);
}
// 用于计算O(nlgn)经过的时间
long start = System.nanoTime();
System.out.println("ClosestPair.cpair2 start:"+start);
pair = ClosestPair.cpair2(p);
long end = System.nanoTime();
System.out.println("ClosestPair.cpair2 end:"+end);
System.out.println("经过了:"+(end-start)+"纳秒");
// 用于计算O(n^2)经过的时间
start = System.nanoTime();
System.out.println("ClosestPair2.cpair start:"+start);
pair = ClosestPair2.cpair(p);
end = System.nanoTime();
System.out.println("ClosestPair2.cpair end:"+end);
System.out.println("经过了:"+(end-start)+"纳秒");
// System.out.println(pair.a.toString());
// System.out.println(pair.b.toString());
if(pair==null){
JOptionPane.showMessageDialog(getParent(),"请输入2个或2个以上的点");
}
canvas.repaint();
}
});
// Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
// setSize(d.width,d.height);
setSize(650,400);
width = this.getWidth();
height = this.getHeight();
}
class MyCanvas extends Canvas {
public void paint(Graphics g) {
g.clearRect(0, 0, this.getWidth(), this.getHeight());
if (plist.size() > 0) {
Iterator iterator = plist.iterator();
while (iterator.hasNext()) {
Point1 p = (Point1) iterator.next();
g.setColor(Color.BLACK);
g.drawString("●", p.x, p.y);
if (pair != null) {
if (((p.x == pair.a.x) && (p.y == pair.a.y))
|| ((p.x == pair.b.x) && (p.y == pair.b.y))) {
g.setColor(Color.RED);
g.drawString("●", p.x, p.y);
}
}
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -