面向对象程序设计:多线程与异常处理、文件I/O流设计

1、多线程编程:创建一个AccountThread类(定义一个成员变量balance,初始值1000),继承Runnable接口,实现线程功能:

(1)一个线程取名为:按照要求计算数字个数。每次线程执行时,求出300~400之间满足以下条件的所有数。条件:各数字之和为12,各数字之积为42。并将求出的数字依次输出。当按要求输出所有数字后退出线程。

(2)另外一个线程取名为:计算。每次线程执行时,完成形式如“操作数 运算符 操作数”的四则(+ - * /)运算,并输出运算结果,(例如输入:3.1+4.8 输出:7.9)。当输入的运算符有误时,退出线程;

(3)主测试类TestDemo中,创建的2个线程对象分别为t1(按照要求计算数字个数)、t2(计算)。

编程实现以上要求。

package hml;


import java.util.ArrayList;
import java.util.Scanner;
import java.awt.List;

public class ml {
    public static void main(String[] args) {
        AccountThread t = new AccountThread();
        MathThread s = new MathThread();
        Thread t1 = new Thread(t,"算数字");
        Thread s1 = new Thread(s,"计算");
        t1.start();
        s1.start();
    }

}
class AccountThread implements Runnable{
    int balance = 1000;

    public void run() {
        int a,b,c = 0;
        int sum,mul = 0;
        ArrayList<Integer> list = new ArrayList<>();
        for(int i=300; i<=400; ++i) {
            a = i / 100;
            b = (i%100) / 10;
            c = i % 10;
            sum = a+b+c;
            mul = a*b*c;
            if((sum == 12) && (mul == 42)) {
                list.add(i);
            }
        }
        System.out.println(list.toString());
        System.exit(0);
    }
}

class MathThread implements Runnable{

    public void run() {
        int a,b,c = 0;
        Scanner sc = new Scanner(System.in);
        String s;
        a = sc.nextInt();
        s = sc.next();
        b = sc.nextInt();
        switch(s) {
            case "+" :
                c = a + b;
                System.out.println(c);
                break;
            case "-" :
                c = a - b;
                System.out.println(c);
                break;
            case "*" :
                c = a * b;
                System.out.println(c);
                break;
            case "/" :
                c = a / b;
                System.out.println(c);
                break;
            default :
                System.exit(0);
        }
    }
}

运行截图

2、在任意位置使用File类创建test.txt文件,完成以下操作:

(1)向文件内写入如图所示内容(用程序写入,不能直接在文件里编辑)。

(2)在屏幕上显示文件内容。(用程序实现显示,不能直接打开文件完成显示

(3)在屏幕上显示文件属性(文件的路径、修改时间、大小、长度、可读性)。

要求:结合缓冲流来实现。

package asd;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Date;

public class test2 {
	public static void main(String[] args) throws IOException {
		 try {
			String a = "1、只解沙场为国死,何须马革裹尸还。出自清代徐锡麟的<出塞》\r\n" + 
					"\r\n" + 
					"译文:战士只知道在战场上为国捐躯,哪会想将来战死后尸体以马革包裹而还。\r\n" + 
					"\r\n" + 
					"2、黄沙百战穿金甲,不破楼兰终不还。--出自唐代王昌龄的《从军行七首.其四》\r\n" + 
					"\r\n" + 
					"译文:守边将士身经百战,铠甲磨穿,壮志不灭,不打败进犯之敌,誓不返回家乡。\r\n" + 
					"\r\n" + 
					"3、人生自古谁无死,留取丹心照汗青。--出自宋代文天祥的《过零丁洋》\r\n" + 
					"\r\n" + 
					"译文:自古以来,人终不免一死!倘若能为国尽忠,死后仍可光照千秋,青史留名。\r\n" + 
					"文件长度:430字节\r\n" + 
					"文件或者目录:是文件\r\n" + 
					"文件或者目录:不是目录\r\n" + 
					"是否可读:可读取\r\n" + 
					"是否可写:可写入\r\n" + 
					"是否隐藏:不是隐藏文件\r\n" + 
					"最后修改日期:2021-04-22\r\n" + 
					"文件名称:test.txt\r\n" + 
					"文件路径:E:\\test.txt\r\n" + 
					"绝对路径:E:\\test.txt";
			File fos=new File("E:/","test.txt");
			FileOutputStream fo = new FileOutputStream(fos);
			FileReader fr = new FileReader(fos);
			fo.write(a.getBytes());
			int i;
			while ((i = fr.read()) != -1) {
			System.out.print((char) i);
			}
		 } catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		 
	}
}

运行截图

3、利用Java的绘图功能,在窗体上绘制如下饼图:红色占20%、蓝色占45%、绿色占35%,如下图所示。

package hml;

import java.awt.*;
import javax.swing.*;


class mycanvas extends Canvas
{
    mycanvas()
    {
        setSize(400,400);
    }
    public void paint(Graphics e)
    {
        e.setColor(Color.green);
        e.fillOval(50,50,100,100);
        e.setColor(Color.red);
        e.fillArc(50,50,100,100,85,125);
        e.setColor(Color.blue);
        e.fillArc(50,50,100,100,145,145);

    }
}


public class ml extends JFrame {
    ml(){
        super("绘制饼图");
        setSize(500,500);
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        mycanvas c = new mycanvas();
        add(c);
    }
    public static void main(String args[]){
        new ml();
    }


}

运行截图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值