实验四

1、1)声明一个类Person,该类拥有:

①成员变量name(protected,String);//用于存放姓名;age(protected,int);//用于存放年龄;address(protected,String);//用于存放家庭地址

② 两个构造方法

无参构造方法()//默认将姓名设置为“张三”;

有参构造方法(Stringname,int age,String addr)//创建Person对象时设置姓名、年龄和地址;

2)声明一个类Student,它继承了上面的Person类。还拥有:

①一个成员变量department(私有,String)//用于存放所在系

②两个构造方法

无参构造方法()//先调用父类构造方法,并把所在系的默认设为“信息系”;

有参构造方法(Stringname,int age,String addr ,String dep)//先调用父类的构造方法,然后再设置所在系

3)编写类Test作为主类完成如下测试。

编写应用程序,以自己个人信息作为参数分别创建Person类和Student类的实例对象,并在主方法main中编写代码输出个人信息。

 

2 编写一个类,该类有如下一个方法:public int f(int a ,int b){     

…………………………………..//要求该方法返回a和b的最大公约数

}

再编写一个该类的子类,要求子类重写方法发(),而且重写的方法返回两个整数的最小公倍数。

3.

1)定义一个图形类Shape,定义两个方法分别用来求面积和周长。(这两个方法的体内容应该为空)

2)定义图形类Shape的子类Rectangular类重写求面积及周长的功能

3)定义图形类Shape的子类Circle类重写求面积及周长的功能

编写应用程序,通过上转型对象调用被重写的方法。

class Person{
	protected String name;
	protected int age;
	protected String address;
	Person(){
		name="张三";
	}
	Person (String a,int b,String addr){
		name=a;
		age=b;
		address=addr;
	}
}
class  Student extends Person{
		private String department;
		Student(){
			department="信息系";			
		}
		Student(String name,int age,String addr,String dep){
			super(name,age, addr);
			department=dep;
		}
		void x(){
			System.out.println(department);
		}
}
public class Main {
public static void main(String args[]){
	Person people1=new Person("吕",18,"汶上");
	Student people2=new Student("小明",18,"哈尔滨","信息2系");
	System.out.println(people1.name+people1.age+people1.address);
	System.out.println(people2.name+people2.age+people2.address);
	people2.x();
}
}
import java.text.NumberFormat;
class Person{
	public int f(int a,int b){
	     if(a==0)
	    	 return b;
	     return f(a%b,a);
	}
}
class A extends Person{
	public int f1(int a,int b){
		if(a==0)
			return b;
		return f1(a%b,a);
	}
	public int f(int a,int b){
		return a*b/f1(a,b);
	}
	
}
public class Main {
public static void main(String args[]){
	Person a=new Person();
	A b=new A();
	System.out.println(a.f(3,6)+" "+b.f(3,6));
}
}



import java.text.NumberFormat;
class Shape{
	void area(){
		
	}
	void length(){
		
	}
}
class Rectangular extends Shape{
	 void area(){
		 System.out.println("长方形的面积");
	 }
	 void length(){
		 System.out.println("长方形的周长");
	 }
}
class Circle extends Shape{
     void  area(){
	 System.out.println("圆的面积");
	 }
	 void length(){
		 System.out.println("圆的周长");
	 }
}
public class Main {
public static void main(String args[]){
	Shape a;
	Rectangular b=new Rectangular();
	Circle c=new Circle();
	a=b;
	a.area();
	a.length();
	a=c;
	a.area();
	a.length();
}
}


实验5


1.设计一个抽象类,声明有关算术运算的方法,并创建四个子类继承该抽象的类,完成进行加、减、乘、除四则运算。要求:在应用程序的主类中使用这些子类创建对象,再让他们的上转型对象调用算术运算方法。

2.编写一个ComputerAverage抽象类,类中有一个抽象方法求平均分average,可以有参数。定义Gymnastics类和School类,它们都是ComputerAverage的子类,Gymnastics类中计算选手的平均成绩的方法是去掉一个最低分,去掉一个最高分,然后求平均分。School中计算平均分的方法是直接是总分除以总科目。

要求:定义ComputerAverage的对象为上转型对象,并调用重写的方法averge。

3.将1或2中完成的功能使用接口回调重新实现。

4.编写一个类,完成功能为通过scanner对象获得从键盘输入的值,如int,但实际从键盘输入非int值,如float,触发异常,并在catch中处理此异常,如输出异常的信息。(e.getMessage())

abstract class A{
	abstract double op(int a,int b);
}

class B extends A{
	double op(int a, int b) {
		return a+b;
	}	
}
class C extends A{

	double  op(int a, int b) {
		
		return a-b;
	}
}
class D extends A{
	double  op(int a, int b) {
		return a*b;
	}
}
class E extends A{
	double  op(int a, int b) {
		return a*1.0/b;
	}
}

public class Main {
     public static void main(String args[]){
	 B b=new B();
	 C c=new C();
	 D d=new D();
	 E e=new E();
	 System.out.println(b.op(3,4)+" "+c.op(3,4)+" "+d.op(3,4)+" "+e.op(3,4));
     }
}



interface A{
	double op(int a,int b);
}

class B implements A{
	public double op(int a, int b) {
		return a+b;
	}	
}
class C implements A{
	public double op(int a, int b) {
		return a-b;
	}
}
class D implements A{
	public double op(int a, int b) {
		return a*b;
	}
}
class E implements A{
	public double  op(int a, int b) {
		return a*1.0/b;
	}
}

public class Main {
     public static void main(String args[]){
	 A sm;
	 sm=new B();
	 System.out.println(sm.op(3,4));
	 sm=new C();
	 System.out.println(sm.op(3,4));
	 sm=new D();
	 System.out.println(sm.op(3,4));
	 sm=new E();
	 System.out.println(sm.op(3,4));
     }
}




import java.util.*;
public class Main {
     public static void main(String args[]){
    	 Scanner reader=new Scanner(System.in);
    	 int n;
    	 try{
    		 n=reader.nextInt();
    	 }
    	 catch(Exception e){
    		 System.out.println("发生异常");
    	 }
     }
}



实验6

实验内容(1.2中任选一个,3.4.5中任选一个,6必做)
1.编写一个程序,实现字符串的大小写转换并倒序输出,如输入为“HelloWord”,输出为“DROwOLLEH”。要求如下:不能使用StringBudder类的reverse()方法实现。

编程思路:将字符串放入字符数组中,从最后一个字符开始遍历,通过方法判断如是小写字符则转换为大写,反之转换为小写;定义一个StringBuffer对象,调用方法将数字中转换后的字符放入,用toString()方法输出。

注:String的toLowerCase()方法,可将大写字符转换为小写,toUpperCase()方法可将小写转换为大写。其余方法书上参考或查API帮助。

2.编写一个应用程序,用户从键盘输入一行含有数字和字符的字符串,程序仅仅输出字符串中的全部数字字符。

3.编写一个应用程序,计算从今天起,100天后是几月几号,并使用SimpleDateFormat类,按你设置的格式显示某面某月某日,星期几。

注:可用Calendar类的Add()方法计算100天后的日期。

4编写一个应用程序,输出某年某月的日历。

5.编写一个应用程序,使用BigInteger类实现计算大整数的阶乘。

6.自己编写一个泛型的例子。

import java.util.*;
public class Main {
     public static void main(String args[]){
    	 Scanner reader=new Scanner(System.in);
    	 String a;
    	 int i;
    	 a=reader.next();
    	 char[] ch=a.toCharArray();
    	 for(i=0;i<ch.length;i++)
    		   if(ch[i]>='0'&&ch[i]<='9')
    			   System.out.printf("%c",ch[i]);
    	  System.out.printf("\n");
    	 
     }
}
import java.math.*;
public class Main {
     public static void main(String args[]){
    	 BigInteger n=new BigInteger("5");
    	 BigInteger mul=new BigInteger("1");
    	 BigInteger one=new BigInteger("1");
    	 for(BigInteger i=n;i.compareTo(one)>=0;i=i.subtract(one)){
    		 mul=mul.multiply(i);
    	 }
    	  System.out.println(mul);
    	 
     }
}



import java.util.ArrayList;
import java.util.List;
public class Main {

    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        list.add("1234567");
        list.add("89101112");
        for (int i = 0; i < list.size(); i++) {
            String name = list.get(i);
            System.out.println("name:" + name);
        }
    }
}

实验7

二、实验内容(1.2.3.4中任选一个,5.6任选一个)
1.使用TreeSet类,编写一个应用程序,输入5个学生的姓名和数学分数、英语分数。程序分别按英语、数学和总分排序输出学生的姓名和分数。

2.使用LinkList类,编写一个应用程序,用一个二维数组模拟4*4方针,然后将整数1~8随机放入方阵中,要求1~8中的每个数在方阵中恰好出现2次。

提示:首先将1~8添加到链表中,使得链表的长度为16,前8个是1~8,后8个也是1~8,然后随机删除链表中的节点,同时将该结点中的数据顺序的放入方阵中。

3.有集合A={1,2,3,4},和B={1,3,7,9,11},编写一个应用程序输出A和B交集、并集和差集。

4.有5个硬盘,有两个重要的属性:价格和容量。使用TreeMap类编写一个应用程序,分别按照价格和容量排序输出10个硬盘的详细信息。

5. 编写一个java程序,在主线程中在创建2个线程,一个线程输出“我是线程A”10次, 一个线程输出“我是线程B”10次,多次运行此程序,观察结果是否一样。

6. 哈尔滨火车站下面有三个火车票代售点,假如哈尔滨到北京的火车票总共是200张,如何用程序来实现三个售票点同时卖票的功能。

import java.util.*;
class Student implements Comparable{
	int english=0;
	int math=0;
	int sum=0;
	String name;
	Student(int e,int m,String n){
		english=e;
		name=n;
		math=m;
		sum=m+e;
	}
	public int compareTo(Object b) {
		Student st=(Student)b;
		//return (this.english-st.english);//按英语排序
		//return (this.math-st.math);//按数学排序
		return (this.sum-st.sum);//按总分排序
	}
}
public class Main{
	public static void main(String args[]){
		TreeSet<Student>mytree=new TreeSet<Student>();
		Student st1,st2,st3;
		st1=new Student(90,80,"张");
		st2=new Student(70,85,"吕");
		st3=new Student(20,95,"刘");
		mytree.add(st1);
		mytree.add(st2);
		mytree.add(st3);
		Iterator <Student>te=mytree.iterator();
		while(te.hasNext()){
			Student stu=te.next();
			System.out.println(" "+stu.name+"  "+" "+stu.english+" "+" "+stu.math+" "+" "+stu.sum);
		}
	}
}
class WriteWordThread extends Thread{
	WriteWordThread(String s){
		setName(s);
	}
	public void run(){
		for(int i=1;i<=10;i++){
			System.out.println(" "+getName());
		}
	}
}
public class Main{
	public static void main(String args[]){
		WriteWordThread zhang,wang;
		zhang=new WriteWordThread("我是线程A");
		wang=new WriteWordThread("我是线程B");
		zhang.start();
		wang.start();
	}
}



实验8

二、实验内容(1.2.3任选一个,4.5.6任选一个)
1.在某目录下创建一个文本文件test.txt,通过字节输出流向文件中写入“Beijing欢迎你!”,通过字节输入流读出文件中的内容并显示;如果再已有文件中再追加“我的学号是:你自己的学号”如何实现?

2.文件的拷贝的实现原理通常是通过输入流来读取文件中的数据,通过输出流将数据写入文件。通过编写一段程序来文成文件拷贝的工作。首先在当前目录下创建文件夹source和target,然后在source文件夹中存放“High.mp3”,使用字节输入流读入文件,使用字节输出流写入文件夹target下。(试试你拷贝的文件是否好使)

3.将字符串加密后,通过字符输出流写入文件,然后读取该文件,并解密。

4.编程包含一个文本框和一个文本区域,文本框内容改变时,将文本框中的内容显示在文本区域中;在文本框中按回车键时,清空文本区域的内容。
5.编写一个算术测试小软件,用来训练小学生的算术能力。程序由3个类组成:teacher类的对象充当监视器,负责给出算术题目,并判断回答者的答案是否正确;ComputerFrame类的对象负责为算术题目提供视图,如用户提供ComputerFrame类的对象提供GUI界面看到题目,并通过该GUI界面给出题目的答案;MailClass类是软件的主类。

6.编写一个简单的计算器,要求能实现简单的加、减、乘、除四则运算和置零的功能。



import java.io.*;
public class Main{
	public static void main(String args[]){
		File file=new File("E:/","hello.txt");
		byte b[]="Beijing 欢迎你!".getBytes();
		try{
			FileOutputStream out=new FileOutputStream(file);
			out.write(b);
			out.close();
			FileInputStream in=new FileInputStream(file);
			int n=0;
			while((n=in.read(b,0,2))!=-1){
				String str=new String(b,0,n);
				System.out.println(str);
			}
			FileWriter writer = new FileWriter("E:/hello.txt", true);  
		      writer.write("我的学号是:你自己的学号");  
		      writer.close();
		    n=0;
		    while((n=in.read(b,0,2))!=-1){
				String str=new String(b,0,n);
				System.out.println(str);
			}
		}
		catch(IOException e){
			System.out.println(e);
		}
		
	}
}