资源描述
一. 实验目的
理解并掌握线程与同步
学会使用java实现GUI设计
学会使用awt和Swing组件的一般功能
二. 实验内容
实验题目一:
分别建立两个线程,产生并显示[100,10000]和[2000,3000]之间的随机数各 10000个,并分别求和显示出来
1. 程序源代码
import java.util.*;
class MyThread1 implements Runnable{
public void run(){
Random r=new Random();
int n,i=0;
long p=0;
do{
n = r.nextInt(9901)+100;
p = p+n;
System.out.printf("%d ",n);
i++;
}
while( i<10000);
System.out.println();
System.out.println("the sum of 10000 number between [100,10000] is:"+p);
}
}
class MyThread2 implements Runnable{
public void run(){
Random r=new Random();
int n,i=0;
long p=0;
do{
n = r.nextInt(1001)+2000;
p = p+n;
System.out.printf("%d ",n);
i++;
}
while( i<10000);
System.out.println();
System.out.println("the sum of 10000 number between [2000,3000] is:"+p);
}
}
public class title5_1{
public static void main(String args[]){
System.out.println("the random numbers are shown as follows:");
MyThread1 holy=new MyThread1();
Thread t1=new Thread(holy);
t1.start();
MyThread2 shit=new MyThread2();
Thread t2=new Thread(shit);
t2.start();
}
}
2. 实验结果
实验题目二:
建立两个线程分别不断读取两个文本文件中的数据并求和,当为-1时结束并显示求和结果。
1. 程序源代码
import java.io.*;
import java.util.*;
class sum{
private int sum=0;
synchronized void sum(int i){
sum=sum+i;
}
public void sum1(){
System.out.println("="+sum);
}
}
class MyThread1 implements Runnable{
sum sum2;
MyThread1(sum sum2){
this.sum2=sum2;
new Thread(this).start();
}
public void run(){
try{
Scanner sc1=new Scanner(new File("num1.txt"));
int n;
while(sc1.hasNextInt()){
if((n=sc1.nextInt())==-1){
sum2.sum1();
System.exit(-1);
}
else{
System.out.printf("+%d",n);
try{
Thread.sleep(300);
}catch(InterruptedException e){}
sum2.sum(n);
}
}
}
catch(Exception e){}
}
}
class MyThread2 implements Runnable{
sum sum2;
MyThread2(sum sum2){
this.sum2=sum2;
new Thread(this).start();
}
public void run(){
try{
Scanner sc2=new Scanner(new File("num2.txt"));
int n;
while(sc2.hasNextInt()){
if((n=sc2.nextInt())==-1){
sum2.sum1();
System.exit(-1);
}
else{
System.out.printf("+%d",n);
try{
Thread.sleep(300);
}catch(InterruptedException e){}
sum2.sum(n);
}
}
}
catch(Exception e){}
}
}
public class title5_2{
public static void main(String[] args){
System.out.printf("sum=0");
sum sum1=new sum();
MyThread1 holy=new MyThread1(sum1);
MyThread2 shit=new MyThread2(sum1);
}
}
2.实验结果
实验题目三:
请编写一个swing图形界面程序,设计一个计算器,要求如下:
(1) 支持+、-、*、/ 和%等常用运算符;
(2) 支持sin、cos、max、min、pow和sqrt等常用函数;
(3) 支持十进制、八进制、十六进制和二进制之间的转换。
1. 程序源代码
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class title5_3
extends JFrame implements ActionListener {
double num1, num2, num3;
boolean end, add, mul, sub, div, sin, cos, max, min, Hex, Oct, Bin;
JTextField t = new JTextField("0");
JButton button[] = new JButton[24];
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
public title5_3() {
setTitle("计算器");
setResizable(false);
setBounds(100, 100, 330, 280);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(p1, "North");
t.setEditable(false);
t.setColumns(28);
t.setHorizontalAlignment(JTextField.RIGHT);
p1.add(t);
GridLayout l = new GridLayout(4, 0);
l.setVgap(10);
l.setHgap(10);
p2.setLayout(l);
add(p2, "Center");
button[0] = new JButton("1");
button[1] = new JButton("2");
button[2] = new JButton("3");
button[3] = new JButton("sin");
button[3].setMargin(new Insets(0,0,0,0));
button[4] = new JButton("Oct");
button[4].setMargin(new Insets(0,0,0,0));
button[5] = new JButton("+");
button[6] = new JButton("4");
button[7] = new JButton("5");
button[8] = new JButton("6");
button[9] = new JButton("cos");
button[9].setMargin(new Insets(0,0,0,0));
button[10] = new JButton("Hex");
button[10].setMargin(new Insets(0,0,0,0));
button[11] = new JButton("-");
button[12] = new JButton("7");
button[13] = new JButton("8");
button[14] = new JButton("9");
button[15] = new JButton("max");
button[15].setMargin(new Insets(0,0,0,0));
button[16] = new JButton("Bin");
button[16].setMargin(new Insets(0,0,0,0));
button[17] = new JButton("*");
button[18] = new JButton("0");
button[19] = new JButton(".");
button[20] = new JButton("=");
button[21] = new JButton("min");
button[21].setMargin(new Insets(0,0,0,0));
button[22] = new JButton(",");
button[23] = new JButton("/");
for (JButton x : button) {
p2.add(x);
x.addActionListener(this);
}
JLabel ll = new JLabel();
ll.setPreferredSize(new Dimension(10, 0));
add(ll, "West");
JLabel rl = new JLabel();
rl.setPreferredSize(new Dimension(10, 0));
add(rl, "East");
setVisible(true);
}
public static void main(String args[]) {
title5_3 calculator = new title5_3();
}
public void num(int i) {
String s = String.valueOf(i);
if (end) {
t.setText("0");
end = false;
}
if ( (t.getText()).equals("0")) {
t.setText(s);
}
else {
String str = t.getText() + s;
t.setText(str);
}
}
public void sign(int i) {
if (i == 1) {
add = true;
mul = false;
sub = false;
div = false;
sin = false;
cos = false;
max = false;
min = false;
Hex = false;
Oct = false;
Bin = false;
}
if (i == 2) {
add = false;
mul = false;
sub = true;
div = false;
sin = false;
cos = false;
max = false;
min = false;
Hex = false;
Oct = false;
Bin = false;
}
if (i == 3) {
add = false;
mul = true;
sub = false;
div = false;
sin = false;
cos = false;
max = false;
min = false;
Hex = false;
Oct = false;
Bin = false;
}
if (i == 4) {
add = false;
mul = false;
sub = false;
div = true;
sin = false;
cos = false;
max = false;
min = false;
Hex = false;
Oct = false;
Bin = false;
}
if (i == 5) {
add = false;
mul = false;
sub = false;
div = false;
sin = true;
cos = false;
max = false;
min = false;
Hex = false;
Oct = false;
Bin = false;
}
if (i == 6) {
add = false;
mul = false;
sub = false;
div = false;
sin = false;
cos = true;
max = false;
min = false;
Hex = false;
Oct = false;
Bin = false;
}
if (i == 7) {
add = false;
mul = false;
sub = false;
div = false;
sin = false;
cos = false;
max = true;
min = false;
Hex = false;
Oct = false;
Bin = false;
}
if (i == 8) {
add = false;
mul = false;
sub = false;
div = false;
sin = false;
cos = false;
max = false;
min = true;
Hex = false;
Oct = false;
Bin = false;
}
if (i == 9) {
add = false;
mul = false;
sub = false;
div = false;
sin = false;
cos = false;
max = false;
min = false;
Hex = true;
Oct = false;
Bin = false;
}
if (i == 10) {
add = false;
mul = false;
sub = false;
div = false;
sin = false;
cos = false;
max = false;
min = false;
Hex = false;
Oct = true;
Bin = false;
}
if (i == 11) {
add = false;
mul = false;
sub = false;
div = false;
sin = false;
cos = false;
max = false;
min = false;
Hex = false;
Oct = false;
Bin = true;
}
if((i!=5)&&(i!=6)&&(i!=7)&&(i!=8)){
num1 = Double.parseDouble(t.getText());
}
end = true;
}
public void point() {
String s;
if (t.getText().indexOf('.') < 0) {
s = t.getText() + ".";
t.setText(s);
}
}
public void sepa() {
String s;
s = t.getText() + ",";
t.setText(s);
}
public void sin(){
t.setText("sin");
}
public void cos(){
t.setText("cos");
}
public void max(){
t.setText("max");
}
public void min(){
t.setText("min");
}
public void eql() {
String s="";
int k; //计算
if(add||div||mul||sub)
num2 = Double.parseDouble(t.getText());
if(max||min){
s = t.getText();
k = s.indexOf(",");
num1 = Double.parseDouble(s.substring(0,k));
num2 = Double.parseDouble(s.substring(k+1,s.length()));
}
if (add)
num3 = num1 + num2;
if (mul)
num3 = num1 * num2;
if (sub)
num3 = num1 - num2;
if (div)
num3 = num1 / num2;
if (sin)
num3 = Math.sin(num2/180*Math.PI);
if (cos)
num3 = Math.cos(num2/180*Math.PI);
if (Oct)
s = Integer.toOctalString((int)num1);
if (Hex)
s = Integer.toHexString((int)num1);
if (Bin)
s = Integer.toBinaryString((int)num1);
if (max)
num3 = Math.max(num1,num2);
if (min)
num3 = Math.min(num1,num2);
if(!(Oct||Hex||Bin))
s = String.valueOf(num3);
t.setText(s);
end = true;
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == button[0])
num(1);
if (e.getSource() == button[1])
num(2);
if (e.getSource() == button[2])
num(3);
if (e.getSource() == button[6])
num(4);
if (e.getSource() == button[7])
num(5);
if (e.getSource() == button[8])
num(6);
if (e.getSource() == button[12])
num(7);
if (e.getSource() == button[13])
num(8);
if (e.getSource() == button[14])
num(9);
if (e.getSource() == button[18])
num(0);
if (e.getSource() == button[5])
sign(1);
if (e.getSource() == button[11])
sign(2);
if (e.getSource() == button[17])
sign(3);
if (e.getSource() == button[23])
sign(4);
if (e.getSource() == button[19])
point();
if (e.getSource() == button[20])
eql();
if (e.getSource() == button[3]){
sin();
sign(5);
}
if (e.getSource() == button[9]){
cos();
sign(6);
}
if (e.getSource() == button[4])
sign(10);
if (e.getSource() == button[10])
sign(9);
if (e.getSource() == button[16])
sign(11);
if (e.getSource() == button[15]){
max();
sign(7);
}
if (e.getSource() == button[21]){
min();
sign(8);
}
if (e.getSource() == button[22])
sepa();
}
}
2.试验结果
实验题目四:
编写一个swing图形界面程序能将多行文本框中的内容保存到一个文本文件,也能将一个文本文件的内容显示到这个多行文本框中。
1. 程序源代码
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
public class title5_4 {
public static void main(String args[]) {
JFrame frame = new JFrame();
FlowLayout flow = new FlowLayout();
final JTextArea textArea1 = new JTextArea(20, 30);
JButton button2 = new JButton("写入holyshit.txt");
JButton button1 = new JButton("从holyshit.txt读出");
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
Container contentPane=frame.getContentPane();
contentPane.add(p1, "North");
contentPane.add(p2, "Center");
p1.add(textArea1);
p2.setLayout(flow);
p2.add(button1);
p2.add(button2);
frame.setTitle("文本读写");
frame.setResizable(false);
frame.setBounds(100, 100, 400, 450);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
contentPane.add(p1, "North");
contentPane.add(p2, "Center");
frame.setVisible(true);
button1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
try{
Reader reader = new FileReader("holyshit.txt");
textArea1.read(reader,null);
}catch(Exception e){
System.out.println("无法读出文件");
}
}
});
button2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
try{
Writer writer = new FileWriter("holyshit.txt");
textArea1.write(writer);
}catch(Exception e){
System.out.println("无法写入文件");
}
}
});
}
}
2.试验结果
展开阅读全文