Java期末复习题库(封装,继承,抽象类,接口,GUI)

包与字符串

1.创建包的基本操作

在biology包中的animal包中有human类,它具有name,height,weight的属性,还具有eat(),sleep()和work()的行为,在biology包中的plant包中有flower类,它具有name,color,smell的属性,还具有drink()和blossom()的行为.

现在在一个school包中的garden包中一个张三的人,他是一个human类的对象,种植的rose是一个flower类对象,编程实现并测试各自的方法.
 

package biology.animal;

public class human {
	String name;
	int height;
	int weight;
	void eat() {
		System.out.println("吃饭");
	}
	void sleep() {
		System.out.println("睡觉");
	}
	void work() {
		System.out.println("工作");
	}
	public human(String name, int height, int weight) {
		super();
		this.name = name;
		this.height = height;
		this.weight = weight;
	}
	public human() {
		super();
		// TODO Auto-generated constructor stub
	}
	
}

package biology.plant;

public class flower {
	String name;
	String color;
	String smell;
	void drink() {
		System.out.println("喝水");
	}
	void blosson() {
		System.out.println("开花");
	}
	public flower(String name, String color, String smell) {
		super();
		this.name = name;
		this.color = color;
		this.smell = smell;
	}
	public flower() {
		super();
		// TODO Auto-generated constructor stub
	}
	
}

package school.garden;

import biology.animal.human;
import biology.plant.*;

public class zhangsan {
	public static void main(String[] args) {
		human zs = new human("张三",180,160);
		flower rose = new flower("玫瑰花","红色","香");
	}
}

2.跨包访问

2. 在computer包中的mainbroad包中有一个VGACard的类,它有一个显示方法show(),显示”VGA checked success”,在server的包的mainbroad包中的showCard类是继承自VGACard,请测试showCard的show()功能。

package computer.mainbroad;

public class VGACard {
	public void show() {
		System.out.println("VGA checked success");
	}
}

方法记得写成public,不然跨包可能会访问不到

package serve.mainbroad;
import computer.mainbroad.*;

public class showCard extends VGACard {
	public static void main(String[] args) {
		showCard t = new showCard();
		t.show();
	}
}

3.跨包使用类

3. 在com.graphic包中定义一个圆柱体类Cylinder,其半径r,高h都为私有属性,有构造方法和求体级方法volume()。在com.test包中定义一个测试类test,测试一个半径为5.34、高为2的圆柱体体积。半径PI为3.14

package com.graphic;

public class Cylinder {
	private double r,h;

	public Cylinder() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Cylinder(double r, double h) {
		super();
		this.r = r;
		this.h = h;
	}
	public double volume() {
		return h*3.14*r*r;
	}
}

package com.test;

import com.graphic.Cylinder;

public class test {
	public static void main(String[] args) {
		Cylinder t = new Cylinder(5.34,2);
		System.out.println(t.volume());
	}
}

4.统计子串出现次数

4. 编写程序统计一个字符子串在一个字符串中出现的次数和位置。如子字符串“nba”在字符串”asfasfnabaasdfnbasdnbasnbasdnbadfasdf”中出现的次数和出现的位置。

package com.test;


public class test {
	public static void main(String[] args) {
		String Str = "asfasfnabaasdfnbasdnbasnbasdnbadfasdf";
		String str = "nba";
		int index = 0;
		int cnt = 0;
		while(true) {
			index = Str.indexOf(str, index);
			if(index==-1) break;
			cnt++;
			System.out.println("第"+cnt+"次出现在下标"+index);
			index+=str.length();
			
		}
		System.out.println("共出现了"+cnt+"次");
	}
}

5.数组排序

5. 对字符串“23 10 -8 0 3 7 108”中的数值进行升序排序,生成一个数值有序的字符串 “-8 0 3 7 10 23 208”。

一些前置知识

1)ArrayList是基于动态数组实现的,它可以存储任意类型的元素,并且具有自动扩容的能力。以下是一些常用的ArrayList方法:

  • add(element):向列表末尾添加一个元素。
  • get(index):获取指定索引位置的元素。
  • size():返回列表中元素的数量。
  • remove(index):删除指定索引位置的元素。

2)使用Collections.sort()方法进行排序:

import java.util.ArrayList;
import java.util.Collections;

public class Main {
    public static void main(String[] args) {
        ArrayList<Integer> numbers = new ArrayList<>();
        numbers.add(5);
        numbers.add(2);
        numbers.add(8);
        numbers.add(1);
        
        System.out.println("排序前:" + numbers);
        
        Collections.sort(numbers);
        
        System.out.println("排序后:" + numbers);
    }
}

3)如果你想将一串字符转化为整数,可以使用Java提供的Integer.parseInt()方法。这个方法可以将字符串转换为对应的整数。以下是一个示例代码:

public class Main {
    public static void main(String[] args) {
        String numberString = "12345";
        int number = Integer.parseInt(numberString);
        
        System.out.println("转换后的整数是:" + number);
    }
}

4)如果你想输入一行字符串含空格,不能用sc.next(),而是用sc.nextLine()

思路:先将字符串(含空格)输入,以空格为界限,将数字字符串提取出来,将数字字符串转换为整形,插入ArrayList集合,用Collections.sort()排序。最后输出

package com.test;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class test {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String s;
		s = sc.nextLine();
		String temp = null;
		ArrayList<Integer> a = new ArrayList<>();
		for(int i = 0;i<s.length();i++) {
			char c = s.charAt(i);
			if(c==' ') {
				a.add(Integer.parseInt(temp));
				temp = "";
			}
			else {
				temp+=c;
			}
		}
		//a.add(100);
		Collections.sort(a);
		for(int i = 0;i<a.size();i++) {
			if(i!=0) System.out.printf(" ");
			System.out.printf("%d",a.get(i));
		}
	}
}

分支循环

1.模拟掷色子

1.编写一个模拟同时掷骰子的程序。要用Math.random()模拟产生两个骰子,将两个结果相加,相加的和等于7的可能性最大,等于2和12的可能性最小。程序模投掷3600次,判断求和的结果是否合理。

先介绍Math.random()的用法

Math.random()方法返回的是0.0到1.0之间的一个随机双精度浮点数

//如果需要生成指定范围内的随机数,可以使用以下公式:
double randomNumInRange = Math.random() * (max - min) + min;


//如果想生成随机整数1—10
int randomInt = (int) (Math.random() * 10) + 1;

package com.test;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class test {
	public static void main(String[] args) {
		int[] a = new int[20];
		int t = 3600;
		while(t-->0) {
			int b = (int)(Math.random()*6+1);
			int c = (int)(Math.random()*6+1);
			a[b+c]++;
		}
		for(int i = 2;i<=12;i++) {
			System.out.println("和为"+i+"出现了"+a[i]+"次");
		}
	}
}

2.打印图形

2.编程:从键盘读取星号数,采用循环语句打印如下图形。如:从键盘输入10,则星号排列最大数是10。注意图4图5星号数需要为奇数:

package com.test;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class test {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		for(int i = 1;i<=n;i++) {
			for(int j = 1;j<=i;j++) {
				System.out.printf("*");
			}
			System.out.println();
		}
		for(int i = 1;i<=n-1;i++) {
			for(int j = 1;j<=i;j++) {
				System.out.printf(" ");
			}
			for(int j = 1;j<=n-i;j++) {
				System.out.printf("*");
			}
			System.out.println();
		}
	}
}

package com.test;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class test {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		for(int i = 1;i<=n;i++) {
			for(int j = 1;j<=i;j++) {
				System.out.printf("*");
			}
			System.out.println();
		}
		for(int i = 1;i<=n-1;i++) {
			
			for(int j = 1;j<=n-i;j++) {
				System.out.printf("*");
			}
			System.out.println();
		}
	}
}

package com.test;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class test {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		
		for(int i = 1;i<=n;i++) {
			for(int j = 1;j<=n-i;j++) {
				System.out.printf(" ");
			}
			
			for(int j = 1;j<=i;j++) {
				System.out.printf("*");
			}
			System.out.println();
		}
	}
}

package com.test;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class test {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		for(int i = 1;i<=n;i++) {//打印2*i-1
			for(int j = 1;j<=n-i;j++) {
				System.out.printf(" ");
			}
			
			for(int j = 1;j<=2*i-1;j++) {
				System.out.printf("*");
			}
			System.out.println();
		}
		
		for(int i = n-1;i>=1;i--) {//打印2*i-1
			for(int j = 1;j<=n-i;j++) {
				System.out.printf(" ");
			}
			
			for(int j = 1;j<=2*i-1;j++) {
				System.out.printf("*");
			}
			System.out.println();
		}
	}
}

package com.test;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class test {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		for(int i = 1;i<=n;i++) {//打印2*i-1
			for(int j = 1;j<=n-i;j++) {
				System.out.printf(" ");
			}
			
			for(int j = 1;j<=2*i-1;j++) {
				System.out.printf("*");
			}
			System.out.println();
		}
		
		
	}
}

3. 猜数字游戏

编写一个猜数字游戏的程序,预先生成一个0-9的随机数,用户键盘录入一个所猜的数字,如果输入的数字和后台预先生成的数字相同,则表示猜对了,这时,程序会打印“恭喜您,答对了!”如果不相同,则比较输入的数字和后台预先生成的数字大小,如果大了,打印“sorry,您猜大了!”如果小了,打印“sorry,您猜小了!”如果一直猜错,则游戏一直继续,直到数字猜对为止。

package com.test;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class test {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int ans = (int)(Math.random()*9);
		while(true) {
			int g = sc.nextInt();
			if(g==ans) {
				System.out.println("猜对了");
				break;
			}
			else if(g>ans) {
				System.out.println("猜大了");
			}
			else {
				System.out.println("猜小了");
			}
			
		}
		
		
	}
}

封装

1.有参构造的考察

定义一个类Person,定义name和age私有属性,定义有参的构造方法对name和age进行初始化。在测试类中创建该类的2个对象,姓名、年龄分别为lili、19和lucy、20,在屏幕打印出2个对象的姓名和年龄。

class Person {
	private String name;
	private int age;
	
	Person(){}
	Person(String name,int age){
		this.name = name;
		this.age = age;
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}
	
	
	
}

public class Main {
	
    public static void main(String[] args) {
        Person p1 = new Person("lili",19);
        Person p2 = new Person("lucy",20);
        System.out.println(p1.toString());
        System.out.println(p2.toString());
    }

    
}

2.计算长方形

首先定义一个计算长方形面积的类rectangleClass,要求类中有一个定义长方形左上角和右下角座标的构造函数,以及一个通过长方形右下角座标与左上角座标计算长方形面积,并实例化两个长方形进行测试.

用到了Math库的函数

class rectangleClass {
	private int x1,y1,x2,y2;

	public rectangleClass(int x1, int y1, int x2, int y2) {
		super();
		this.x1 = x1;
		this.y1 = y1;
		this.x2 = x2;
		this.y2 = y2;
	}
	
	public int calc() {
		return Math.abs(this.x1-this.x2)*Math.abs(this.y1-this.y2);
	}
	
}

public class Main {
	
    public static void main(String[] args) {
        rectangleClass r1 = new rectangleClass(-5,3,-3,1);
        rectangleClass r2 = new rectangleClass(2,-3,4,-6);
        
        System.out.println(r1.calc());
        System.out.println(r2.calc());
        
        
    }

    
}

3.设计Book类

设计一个表示图书的Book类,它包含图书的书名、作者、月销售量等私有属性,另有两个构造方法(一个不带参数,另一个带参数),成员方法setBook( ) 和printBook()分别用于设置和输出书名、作者、月销售量等数据。并设计相应的测试Book类的应用程序主类,测试并显示输出提供所有功能的结果。
 

class Book {
	private String bookname,author;
	private int sell;
	public Book(String bookname, String author, int sell) {
		super();
		this.bookname = bookname;
		this.author = author;
		this.sell = sell;
	}
	public Book() {
		super();
	}
	
	public void setBook(String bookname,String author,int sell) {
		this.bookname = bookname;
		this.author = author;
		this.sell = sell;
	}
	
	public void printBook() {
		System.out.println("书名:"+this.bookname+" 作者:"+this.author+" 月销量:"+this.sell);
	}
}

public class Main {
	
    public static void main(String[] args) {
    	Book b1 = new Book("书本1","作者1",1234);
    	Book b2 = new Book("书本2","作者2",1234567);
    	b1.printBook();b2.printBook();
    	
    }

    
}

4.设计银行账户

请创建一个银行帐户类,要求如下:(1)类包括帐户名、帐户号、存款额等私有属性;(3)有三个参数的构造方法(2)可实现余额查询,存款和取款的操作。(3)创建该类的对象,验证以上两项。

其实还有一些可以完善的地方,例如取款存款不能为负数,懒得补充了。

class BankAccount {
	private String account_name,account_id;
	private int money;
	public BankAccount(String account_name, String account_id, int money) {
		this.account_name = account_name;
		this.account_id = account_id;
		this.money = money;
	}
	public BankAccount() {
	}
	
	public int search_money() {
		return this.money;
	}
	public void take_money(int val) {
		if(val>this.money) {
			System.out.println("余额不足,取钱失败");
		}
		else {
			this.money-=val;
			System.out.printf("已取%d元,账户余额:%d\n",val,this.money);
		}
	}
	
	public void save_money(int val) {
		this.money+=val;
		System.out.printf("已存%d元,账户余额:%d\n",val,this.money);
	}
}

public class Main {
	
    public static void main(String[] args) {
    	Scanner sc = new Scanner(System.in);
    	BankAccount b = new BankAccount("cwm","1234567890",999999);
    	System.out.println("0.退出 1.存钱 2.取钱 3.查询余额");
    	while(true) {
    		int op = sc.nextInt();
    		if(op==0) break;
    		else if(op==1) {
    			System.out.printf("存入:");
    			int save = sc.nextInt();
    			System.out.println();
    			b.save_money(save);
    			
    		}
    		else if(op==2) {
    			System.out.printf("取出:");
    			int take = sc.nextInt();
    			System.out.println();
    			b.take_money(take);
    		}
    		else {
    			System.out.println(b.search_money());
    		}
    	}
    	
    }

	

    
}

继承

1.设计学生类

设计一个学生类Student,其数据成员有name(姓名)、age(年龄)和degree(学位)。由Student类派生出本科生类Undergraduate和研究生类Graduate,本科生类Undergraduate增加成员specialty(专业),研究生类增加成员direction(研究方向)。每个类都有show()方法,用于输出数据成员信息。最后请输出下列信息:
 

class Student{
	String name,degree;
	int age;
}

class Undergraduate extends Student{
	String specialty;
	Undergraduate(String name,int age,String degree,String specialty){
		this.name = name;this.age = age;this.degree = degree;this.specialty = specialty;
	}
	
	void show() {
		System.out.printf("姓名:%s  年龄:%d  学位%s  专业:%s\n",name,age,degree,specialty);
	}
}
class Graduate extends Student{
	String direction;
	Graduate(String name,int age,String degree,String direction){
		this.name = name;this.age = age;this.degree = degree;this.direction = direction;
	}
	void show() {
		System.out.printf("姓名:%s  年龄:%d  学位%s  研究方向:%s\n",name,age,degree,direction);
	}
}

public class Main {
	
    public static void main(String[] args) {
    	Undergraduate u1 = new Undergraduate("张三",20,"本科","通信");
    	Graduate g1 = new Graduate("李四",25,"研究生","计算机");
    	u1.show();g1.show();
    }
    
}

2.计算薪资

有工人、服务员、教师、科学家四种角色,其中服务员、工人只有月固定工资(元/月),教师除月固定工资外,还有课酬(元/节)。科学家除月固定工资外,还有科研激励奖(元/季度)。请通过继承设计出相应的类,将各种类型的员工的全年工资打印出来,并测试(张三、工人、4000元/月)、(李四、服务员、3500元/月)、(王五、教师、5000元/月、100元/节,200节/年)、(刘六、科学家、7000元/月、20000元/季度)。

package demo;
import java.util.*;
import java.util.Scanner;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
import java.util.Random;
import java.util.Arrays;
import javax.swing.*;
import java.awt.*;
import java.awt.*;
import java.awt.event.*;


class Person{
	String name;
	int basicSalary;
	public Person(String name, int basicSalary) {
		super();
		this.name = name;
		this.basicSalary = basicSalary;
	}
	
}

class woker extends Person{
	public woker(String name, int basicSalary) {
		super(name, basicSalary);
		// TODO Auto-generated constructor stub
	}

	int show() {
		return basicSalary*12;
	}
	
}

class waiter extends Person{
	public waiter(String name, int basicSalary) {
		super(name, basicSalary);
		// TODO Auto-generated constructor stub
	}

	int show() {
		return basicSalary*12;
	}
	
}

class teacher extends Person{
	public teacher(String name, int basicSalary) {
		super(name, basicSalary);
		// TODO Auto-generated constructor stub
	}

	int show() {
		return basicSalary*12+100*200;
	}
	
}

class scientist extends Person{
	public scientist(String name, int basicSalary) {
		super(name, basicSalary);
		// TODO Auto-generated constructor stub
	}

	int show() {
		return basicSalary*12+20000*4;
	}
	
}

public class Main {
    public static void main(String[] args) throws InterruptedException, ExecutionException {
    	woker t1 = new woker("张三",4000);
    	waiter t2 = new waiter("李四",3500);
    	teacher t3 = new teacher("王五",5000);
    	scientist t4 = new scientist("刘六",7000);
    	System.out.println(t1.name+t1.show());		
    	System.out.println(t2.name+t2.show());		
    	System.out.println(t3.name+t3.show());		
    	System.out.println(t4.name+t4.show());		
    	
    }
}

3.Pet继承

根据下述继承关系图,请完成父类Pet 、子类Dog、Penguin的设计,并写一个测试类,测试类中完成狗对象的创建与输出,企鹅对象的创建与输出。

abstract class Pet{//因为print函数是无法统一的,所以写成抽象方法
	String name;
	int health,love;
	
	abstract void print();//注意,抽象方法就不用写{}了

	public String getName() {
		return name;
	}


	public int getHealth() {
		return health;
	}

	public int getLove() {
		return love;
	}

	
}

class Dog extends Pet{
	
	String strain;
	public Dog(String strain,String name,int health,int love) {
		this.name = name;
		this.health = health;
		this.love = love;
		this.strain = strain;
	}
	String getStrain() {
		return strain;
	}
	@Override
	void print() {
		// TODO Auto-generated method stub
		System.out.printf("品种:%s  名字:%s  健康:%d  喜爱程度%d\n",strain,name,health,love);
	}

}

class Penguin extends Pet{
	String sex;
	public Penguin(String sex,String name,int health,int love) {
		this.name = name;
		this.health = health;
		this.love = love;
		this.sex = sex;
	}
	
	String sex() {
		return sex;
	}

	@Override
	void print() {
		// TODO Auto-generated method stub
		System.out.printf("性别:%s  名字:%s  健康:%d  喜爱程度%d\n",sex,name,health,love);
	}
}

public class Main {
	
    public static void main(String[] args) {
    	Dog d = new Dog("牧羊犬","狗子",100,60);
    	Penguin p = new Penguin("公","Q仔",90,50);
    	d.print();p.print();
    	
    	
    }
    
}

抽象类,接口

1.学生抽象类

首先设计一个学生抽象类Student,其数据成员有name(姓名)、age(年龄)和degree(学位),以及一个抽象方法show()。然后由Student类派生出本科生类Undergraduate和研究生类Graduate,本科生类Undergraduate增加成员specialty(专业),研究生类增加成员direction(研究方向)。并且每个类都有show()方法,用于输出数据成员信息。请定义对象,并打印输出下列信息:

abstract class Student{
	String name;
	int age;
	String degree;
	
	public Student() {}
	public Student(String name, int age, String degree) {
		this.name = name;
		this.age = age;
		this.degree = degree;
	}

	abstract void show();
}

class Undergraduate extends Student{
	String specialty;
	
	
	
	public Undergraduate() {
		super();
		// TODO Auto-generated constructor stub
	}



	public Undergraduate(String name, int age, String degree,String specialty) {
		super(name, age, degree);
		this.specialty = specialty;
		// TODO Auto-generated constructor stub
	}



	@Override
	void show() {
		// TODO Auto-generated method stub
		System.out.println(name+"  "+age+"岁  "+degree+"  "+specialty);
	}
}

class Graduate extends Student{
	String direction;
	
	
	public Graduate() {
		super();
		// TODO Auto-generated constructor stub
	}


	public Graduate(String name, int age, String degree,String direction) {
		super(name, age, degree);
		// TODO Auto-generated constructor stub
		this.direction = direction;
	}


	@Override
	void show() {
		// TODO Auto-generated method stub
		System.out.println(name+"  "+age+"岁  "+degree+"  "+direction);
	}
	
}

public class Main {
	
    public static void main(String[] args) {
    	Undergraduate u = new Undergraduate("张三",20,"计算机","软件工程");
    	Graduate g = new Graduate("李四",30,"计算机","计算机视觉");
    	u.show();g.show();
    	
    }
    
}

2.图形抽象类

设计一个抽象类Graphics,它具有一个String类型参数name和两个抽象方法parameter()、area(),name用来存储图形的名称,parameter()方法用于输出图形的名称和其它属性特征,area()方法用于输出图形的面积。请用该类派生的子类实现输出一个形状为长方形、长为3宽为2和它的面积以及输出一个形状为圆形、颜色为红色、半径为4和它的面积。
 

abstract class Graphics{
	String name;
	
	abstract void parameter();
	abstract void area();
	
}

class Rectangle extends Graphics{
	
	int highth,width;
	
	Rectangle(String name,int h,int w){
		this.name = name;
		this.highth = h;
		this.width = w;
	}
	
	@Override
	void parameter() {
		// TODO Auto-generated method stub
		System.out.println(name+"长为"+highth+" 宽为"+width);
	}

	@Override
	void area() {
		// TODO Auto-generated method stub
		System.out.println(name+"面积为"+highth*width);
	}
	
	
}

class Round extends Graphics{
	int r;String color;
	Round(String name,int r,String color){
		this.name = name;
		this.r = r;
		this.color = color;
	}
	void parameter() {
		System.out.println(name+"颜色是"+color+" 半径为"+r);
	}
	@Override
	void area() {
		// TODO Auto-generated method stub
		System.out.println(name+"面积为"+3.14*r*r);
	}
	
}

public class Main {
	
    public static void main(String[] args) {
    	Rectangle re = new Rectangle("长方形",3,2);
    	Round ro = new Round("圆形",4,"红色");
    	
    	re.parameter();re.area();
    	ro.parameter();ro.area();
    }
    
}

3.圆形接口

设计一个接口circleInterface,要求接口中有一个定义PI的常量以及一个计算圆面积的空方法circleArea()。然后设计一个类circleClass实现该接口,通过构造函数circleClass(double r)定义圆半径,并增加一个显示圆面积的方法。最后,通过上述类生成两个半径分别为3.5、5.0的圆对象circle1、circle2进行测试。
 

interface circleInterface{
	final double PI = 3.14;
	double circleArea();
	
}

class circleClass implements circleInterface{
	double r;
	circleClass(double r){
		this.r = r;
	}
	@Override
	public double circleArea() {
		// TODO Auto-generated method stub
		return PI*r*r;
	}
	
	
}

public class Main {
	
    public static void main(String[] args) {
    	circleClass c1 = new circleClass(3.5);
    	circleClass c2 = new circleClass(5.0);
    	System.out.println(c1.circleArea());
    	System.out.println(c2.circleArea());
    }
    
}

4.Shape接口

设计一个Shape接口和它的两个实现类Square和Circle,要求如下:1)Shape接口中有一个抽象方法area(),方法接收一个double类型的参数,返回一个double类型的结果。2)Square和Circle中实现了Shape接口的area()抽象方法,分别求正方形和圆形的面积并返回。在测试类中创建Square和Circle对象,计算边长为2的正方形面积和半径为3的园面积

interface Shape{
	abstract double area(double x);
}

class Square implements Shape{

	@Override
	public double area(double x) {
		// TODO Auto-generated method stub
		return x*x;
	}
	
}

class Circle implements Shape{

	@Override
	public double area(double x) {
		// TODO Auto-generated method stub
		return 3.14*x*x;
	}
	
}


public class Main {
	
    public static void main(String[] args) {
    	Square s = new Square();
    	System.out.println(s.area(2));
    	
    	Circle c = new Circle();
    	System.out.println(c.area(3));
    	
    }
    
}

5.接口数组的应用

定义一个USB接口,并通过Mouse和U盘类实现它,具体要求是:

1.接口名字为USB,里面包括两个抽象方法:

void work();描述可以工作

void stop(); 描述停止工作

2.完成类Mouse,实现接口USB,实现两个方法:

work方法输出“我点点点”;

stop方法输出 “我不能点了”;

3.完成类UPan,实现接口USB,实现两个方法:

work方法输出“我存存存”;

stop方法输出 “我走了”;

4测试类Main中,main方法中

定义接口变量usb1 ,存放鼠标对象,然后调用work和stop方法

定义接口数组usbs,包含两个元素,第0个元素存放一个Upan对象,第1个元素存放Mouse对象,循环数组,对每一个元素都调用work和stop方法。
 

分析:这题用到了接口数组,跟普通数组的定义是一样的。

那么接口数组存在的意义是什么呢?

它可以存放不同类型的实例化。例如Mouse和UPan类都实现了USB接口,此时我们定义一个USB接口数组,里面就能存Mouse和Upan的实例化对象。

interface USB{
	void work();
	void stop();
}

class Mouse implements USB{

	@Override
	public void work() {
		// TODO Auto-generated method stub
		System.out.println("我点点点");
	}

	@Override
	public void stop() {
		// TODO Auto-generated method stub
		System.out.println("我不能点了");
	}
	
}

class UPan implements USB{

	@Override
	public void work() {
		// TODO Auto-generated method stub
		System.out.println("我存存存");
	}

	@Override
	public void stop() {
		// TODO Auto-generated method stub
		System.out.println("我走了");
	}
	
}

public class Main {
	
    public static void main(String[] args) {
    	Mouse usb1 = new Mouse();
    	usb1.work();usb1.stop();
    	
    	USB usbs[] = new USB[2];
    	UPan up = new UPan();
    	usbs[0] = usb1;
    	usbs[1] = up;
    	for(int i = 0;i<2;i++) {
    		usbs[i].work();
    		usbs[i].stop();
    	}
    }
    
}

6.抽象类Person

设计抽象类Person,派生出具体类:学生类Student和教师类Teacher,创建若干不同类对象后并在主方法中测试。
数据成员定义:
Person [ID,姓名,生日]
Student [专业,成绩]
Teacher [职称,工资]
带参构造方法分别为:
Person(int id,String name, int bir)
Student(int id,String name, int bir, String major,double score)
Teacher(int id,String name, int bir, String title, double salary)
toString方法(Eclipse自动生成)

输入格式:
第一行整数n表示有n个对象,每个对象占2行,第一行为数字0(表示学生)或1(表示教师),第二行为生成对象的参数。

输出格式:
按行输出具体对象的信息。

输入样例:
在这里给出一组输入。例如:

5
0
10101 Peter 20010121 Computer 87.5
1
20110014 Crystal 19900103 AI 7000
0
10102 Rose 20010715 E-Commerce 90
1
20120019 David 19781218 Prof 12000
0
10103 Semon 20000405 Computer 88


 

输出样例:

在这里给出相应的输出。例如:

Student [id=10101, name=Peter, bir=20010121, major=Computer, score=87.5]
Teacher [id=20110014, name=Crystal, bir=19900103, title=AI, salary=7000.0]
Student [id=10102, name=Rose, bir=20010715, major=E-Commerce, score=90.0]
Teacher [id=20120019, name=David, bir=19781218, title=Prof, salary=12000.0]
Student [id=10103, name=Semon, bir=20000405, major=Computer, score=88.0]

abstract class Person{
	int id,bir;
	String name;

	public Person(int id, String name, int bir) {
		this.id = id;
		this.name = name;
		this.bir = bir;
	}

	public Person() {
	}
	
}
class Student extends Person{
	String specialty;
	double score;
	public Student() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Student(int id, String name, int bir,String specialty,double score) {
		super(id, name, bir);
		// TODO Auto-generated constructor stub
		this.specialty = specialty;
		this.score = score;
	}
	@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + name + ", bir=" + bir + ", specialty=" + specialty + ", score=" + score
				+ "]";
	}
	
}
class Teacher extends Person{
	String title;
	double salary;
	public Teacher() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Teacher(int id, String name, int bir,String title,double salary) {
		super(id, name, bir);
		// TODO Auto-generated constructor stub
		this.title = title;
		this.salary = salary;
	}
	@Override
	public String toString() {
		return "Teacher [id=" + id + ", name=" + name + ", bir=" + bir + ", title=" + title + ", salary=" + salary
				+ "]";
	}
	
}


public class Main {
	
    public static void main(String[] args) {
    	Scanner sc = new Scanner(System.in);
    	int n = sc.nextInt();
    	while(n--!=0) {
    		int op = sc.nextInt();
    		String name,major,title;
    		double score,salary;
    		int id,bir;
    		id = sc.nextInt();
			name = sc.next();
			bir = sc.nextInt();
    		if(op==0) {
    			//学生
    			major = sc.next();
    			score = sc.nextDouble();
    			Student s = new Student(id,name,bir,major,score);
    			System.out.println(s.toString());
    		}
    		else {
    			title = sc.next();
    			salary = sc.nextDouble();
    			Teacher t = new Teacher(id,name,bir,title,salary);
    			System.out.println(t.toString());
    		}
    	}
    	
    }
    
}

7.矩形类(简单封装)

编写一个矩形类 Rect,包含:两个 private 属性: 矩形的宽width;矩形的高 height。
两个构造方法:

(1)一个带有两个参数的构造器方法,用于将 width 和 height 属性初化;

(2)一个不带参数的构造器,将矩形初始化为宽和高都为 10。

两个方法:
(1)求矩形面积的方法area()
(2)求矩形周长的方法 perimeter()

定义测试类 RectTest,在它的main 方法中定义一个 Rect类的对象,从键盘输入两个数据分别作为宽和高,并用area()和 perimeter()方法输出其面积和周长。
 

class Rect{
	private double width,height;
	Rect(){
		this.width = 10;
		this.height = 10;
	}
	Rect(double width,double height){
		this.width = width;
		this.height = height;
	}
	
	double area() {
		return width*height;
	}
	double perimeter() {
		return 2*(width+height);
	}
	
}



public class Main {
	
    public static void main(String[] args) {
    	Scanner sc = new Scanner(System.in);
    	double w = sc.nextDouble();
    	double h = sc.nextDouble();
    	
    	Rect r = new Rect(w,h);
    	System.out.println(r.area());
    	System.out.println(r.perimeter());
    	
    }
    
}

GUI

前置知识

如果要自定义按钮在面板上的位置,可以使用绝对布局(AbsoluteLayout)或固定布局(FixedLayout)。

在绝对布局中,每个组件可以通过设置其坐标和大小来精确地放置在面板上。这种布局方式适用于需要完全控制组件位置和大小的场景,但是需要注意的是,当窗口大小发生变化时,组件的位置和大小不会自动调整,需要手动更新。

在固定布局中,每个组件都有一个固定的大小和位置,通常使用网格布局(GridBagLayout)或表格布局(TableLayout)来实现。这种布局方式适用于组件数量较少且位置固定的场景,可以使代码更加简洁易懂。

1.改变字体颜色

public class Main {
	
    public static void main(String[] args) {
    	JFrame f = new JFrame("操作事件");
    	f.setBounds(220,160,320,240);
    	f.setVisible(true);
    	f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	
    	JTextArea t = new JTextArea("字体颜色",5,20);
    	JButton b = new JButton("设置字体颜色");
    	b.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				t.setForeground(Color.red);
			}
    		
    	});
    	
    	JPanel pane = new JPanel();
    	JPanel p1 = new JPanel();
    	JPanel p2 = new JPanel();
    	
    	pane.add(p1);
    	pane.add(t);
    	pane.add(p2);
    	pane.add(b);
    	
    	f.add(pane);
    	
    }
    
}

2.颜色控制器

题目要求按钮的位置和大小,说明需要使用的布局是空布局,但JFrame窗口的内容面板默认布局是边界布局(BorderLayout),所以需要设置一下,注意是设置Jpanel类对象(容器)的布局,而不是窗口的布局。

pane.setLayout(null);

 

public class Main {
	static int r = 0;
	static int b = 0;
	static int g = 0;
    public static void main(String[] args) {
    	
    	JFrame f = new JFrame();
    	f.setBounds(220,160,320,240);
    	f.setVisible(true);
    	f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	
    	JButton b1 = new JButton("红色");
    	JButton b2 = new JButton("绿色");
    	JButton b3 = new JButton("蓝色");
    	b1.setBounds(20,80,80,40);
    	b2.setBounds(120,80,80,40);
    	b3.setBounds(220,80,80,40);
    	
    	JPanel p = new JPanel();
    	
    	
    	b1.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				r+=10;
				r = r>255?0:r;
				p.setBackground(new Color(r,b,g));
			}
		});
    	
    	b2.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				b+=10;
				b = b>255?0:b;
				p.setBackground(new Color(r,b,g));
			}
		});
    	
    	b3.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				g+=10;
				g = g>255?0:g;
				p.setBackground(new Color(r,b,g));
			}
		});
    	
    	p.setLayout(null);
    	p.add(b1);p.add(b2);p.add(b3);
    	f.add(p);
    }
    
}

关于GUI部分的解析,部分参考自Java期末复习题之GUI-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/319935.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

服务器经常宕机的原因及解决办法

随着如今互联网信息化时代的不断发展&#xff0c;数据存储和传输在各种网络科技面前也显得越来越重要&#xff0c;对于企业来讲&#xff0c;建站之后服务器的安全稳定是至关重要的选择。那么选择一款好用的服务器愈发重要。 当然&#xff0c;不管是多好的服务器提供商&#xff…

延时任务的解决方案

延时任务的解决方案 1.数据库轮询2. JDK的延迟队列3.netty时间轮算法4.使用消息队列 1.数据库轮询 该方案通常是在小型项目中使用&#xff0c;即通过一个线程定时的去扫描数据库&#xff0c;通过订单时间来判断是否有超时的订单&#xff0c;然后进行update或delete等操作 代码示…

leetcode206.反转链表

https://leetcode.cn/problems/reverse-linked-list/description/ 题目 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2&#xff1a; 输入&am…

ruoyi后台管理系统部署-2-安装mysql

centos7 mysql 安装 1. 手动安装 安装 首先查看系统是否安装了&#xff1a; rpm -qa|grep mariadb rpm -qa | grep mysql systemctl status mysqld find / -name mysql.cnf卸载自带的 mariadb: rpm -e mariadb-libs-5.5.68-1.el7.x86_64 --nodeps去官网下载 mysql 安装包&…

基于Springboot的网上点餐系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的网上点餐系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&am…

13、Redis高频面试题

1、项目中为什么用Redis 我们项目中之所以选择Redis&#xff0c;主要是因为Redis有下面这些优点&#xff1a; 操作速度快&#xff1a;Redis的数据都保存在内存中&#xff0c;相比于其它硬盘类的存储&#xff0c;速度要快很多数据类型丰富&#xff1a;Redis支持 string&#x…

imgaug库指南(18):从入门到精通的【图像增强】之旅

引言 在深度学习和计算机视觉的世界里&#xff0c;数据是模型训练的基石&#xff0c;其质量与数量直接影响着模型的性能。然而&#xff0c;获取大量高质量的标注数据往往需要耗费大量的时间和资源。正因如此&#xff0c;数据增强技术应运而生&#xff0c;成为了解决这一问题的…

GUI编程(函数解析以及使用)

1.介绍 AWT&#xff08;Abstract Window Toolkit&#xff09;和Swing 是 Java 提供的用于创建图形用户界面&#xff08;GUI&#xff09;的类库。 AWT&#xff1a;AWT 是 Java 最早提供的 GUI 类库&#xff0c;它基于本地平台的窗口系统&#xff0c;使用操作系统的原生组件进行…

高级分布式系统-第10讲 分布式控制系统

自动化是关于一切人造系统自动、智能、自主、高效和安全运行的科学与技术 计算机控制技术是实现自动化的主要方法和手段 分布式控制技术是伴随着机器大工业生产而诞生的特殊计算机控制技术 计算机控制系统 指利用计算机&#xff08;通常称为工业控制计算机&#xff0c;简称工…

专业课140总分410+大连理工大学852信号与系统考研经验电子信息与通信

通过将近一年的复习&#xff0c;今年如愿以专业140分&#xff0c;总分410被大连理工录取&#xff0c;回望这一年复习还是有很多做的不足&#xff0c;整理了一下自己复习的经验&#xff0c;希望可以对后面报考大连理工的同学有所帮助。●政治&#xff1a; 真心建议大家至少暑假…

final关键字--java学习笔记

final final关键字是最终的意思&#xff0c;可以修饰类、方法、变量修饰类&#xff1a;该类被称为最终类&#xff0c;特点是不能被继承了修饰方法&#xff1a;该方法被称为最终方法&#xff0c;特点是不能被重写了修饰变量&#xff1a;该变量只能被赋值一次 就相当于给类、方…

最新 Vmware (17 )下载安装教程

文章目录 Vmware安装Vmware官网Vmware官网选择对应的平台 win或者 linux安装包下载完成后 双击开始安装秘钥vmware workstation pro17密钥分享: Vmware安装 Vmware官网 中文网: https://www.vmware.com/cn.html 英文网: https://www.vmware.com/Vmware官网 选择对应的平台 wi…

腾讯云优惠券介绍、种类、领取入口及使用教程

腾讯云作为国内领先的云服务提供商&#xff0c;为广大的企业和开发者提供了优质的云计算、大数据、人工智能等服务。为了更好地吸引用户&#xff0c;腾讯云推出了多种优惠活动&#xff0c;其中就包括腾讯云优惠券。本文将详细介绍腾讯云的优惠券种类、领取入口以及使用教程。 一…

OpenHarmony硬件合成方案解析

本文档主要讲解在OpenHarmony中&#xff0c;硬件合成适配的方法及原理说明。 环境说明&#xff1a; OHOS版本&#xff1a;3.1-Release及以上 一、背景介绍 1.1 什么是合成 ​ 要理解什么是合成&#xff0c;合成做了什么&#xff1f;我们先通过分解设置界面来回答这个问题:…

黑马程序员SpringBoot2-开发实用篇

视频连接&#xff1a;开发实用篇-67-手工启动热部署_哔哩哔哩_bilibili 热部署 手动启动热部署 热部署仅包含restart的过程。 自动启动热部署 按CtrlAltShift/打开下列界面。 禁用热部署 配置高级 ConfigurationProperties 宽松绑定/松散绑定 常用计量单位绑定 数据校验 设置…

解锁新角色:售前方案工程师 - 女性程序员的新挑战与机遇

在当今的科技行业中&#xff0c;解决方案工程师是一个备受瞩目的角色。他们是技术与业务之间的桥梁&#xff0c;凭借深入的技术知识以及对业务需求的敏锐洞察&#xff0c;为客户提供定制化的解决方案。 那么&#xff0c;对于女性程序员来说&#xff0c;售前方案工程师是否是一…

RandLA-Net导出onnx模型并使用onnxruntime推理

首先下载RandLA-Net工程&#xff1a;https://github.com/tsunghan-wu/RandLA-Net-pytorch 导出onnx模型 import torch from utils.config import ConfigSemanticKITTI as cfg from network.RandLANet import Networkmodel Network(cfg) checkpoint torch.load("./pret…

使用 GitHub 远程仓库

使用 GitHub 远程仓库 GitHub 是最大的 Git 版本库托管商&#xff0c;是成千上万的开发者和项目能够合作进行的中心。 大部分 Git 版本库都托管在 GitHub&#xff0c;很多开源项目使用 GitHub 实现 Git 托管、问题追踪、代码审查以及其它事情。本篇文章主要带大家上手 GitHub …

html+css+Jquery 实现 文本域 文字数量限制、根据输入字数自适应高度

先看效果&#xff1a;初始的效果&#xff0c;样式多少有点问题&#xff0c;不重要&#xff01;重要的是功能&#xff01; 输入后&#xff1a; 根据文字长度&#xff0c;决定文本域长度 限制文字数量 话不多说&#xff0c;直接上代码&#xff01; <!DOCTYPE html> <h…

科研绘图(四)火山图

火山图是生物信息学中常用的一种图表&#xff0c;用来显示基因表达数据的变化。它通常将每个点表示为一个基因&#xff0c;x轴显示对数比率&#xff08;log ratio&#xff09;&#xff0c;表示基因表达的变化大小&#xff1b;y轴显示-log10(p-value)&#xff0c;表示变化的统计…