《面向对象程序设计(Java)》
实验报告
一、实验类型
验证性实验
二、实验目的
1、成员变量:
声明、定义使用和封装
2、成员方法:
☆ 设计、调用
3、OOP 编程的思想
- 理解主类的编写
- 调用其他类的方法
- 在编程过程中体会 oop 的思想(并熟悉定义类、创建对象、对象
属性的使用)
三、实验内容及步骤
(1) 参考《面向对象程序设计(java)实验指导书-李枚毅.doc》
(2) 题目从上机练习系统中选取
(3) 每道题都需要实验过程和结果的屏幕截图
第1题(上机练习系统第64题 )
填写代码,算术运算异常处理(Try/Catch-finally)例子(10分)
此题的上机步骤是:
- 建立一个Java项目,名称可以按题号取名;
- 建立一个类, 类的名称为Main。这一点非常重要;
- 填代码;
- 提交代码,注意题号要一致。
有如下程序,是异常处理(Try/Catch)的例子,完成的功能为捕获异常,并进行处理(输出错误信息)。请将下面程序的【代码】替换为Java代码,使程序运行正确。
文件Main.java
public class Main {
public static void main(String[] args) {
【代码1】{
int i = 0;
i = 3 / i;// 将产生算术运算异常。
} catch (ArithmeticException e)// 找到了匹配的异常,执行该catch块。
{
System.out.println(“发生了ArithmeticException异常”);
} 【代码2】 (ArrayIndexOutOfBoundsException e)// 不是匹配的异常,则不会再捕获
// 异常,如果发生数组下标(索引)超出范围所产生的异常,将执行该catch块。
{
System.out.println(“发生了ArrayIndexOutOfBoundsException异常”);
} catch (Exception e)
// 前两个catch块均无法捕获try块中发生的异常时,才会执行该catch块。
{
System.out.println(“发生了异常”);
} 【代码3】 {
{
System.out.println(“执行Finally”);
}
}
}
}
解答:
public class Main {
public static void main(String[] args) {
try{
int i = 0;
i = 3 / i;// 将产生算术运算异常。
} catch (ArithmeticException e)// 找到了匹配的异常,执行该catch块。
{
System.out.println(“发生了ArithmeticException异常”);
}catch(ArrayIndexOutOfBoundsException e)// 不是匹配的异常,则不会再捕获
// 异常,如果发生数组下标(索引)超出范围所产生的异常,将执行该catch块。
{
System.out.println(“发生了ArrayIndexOutOfBoundsException异常”);
} catch (Exception e)
// 前两个catch块均无法捕获try块中发生的异常时,才会执行该catch块。
{
System.out.println(“发生了异常”);
}finally {
{
System.out.println(“执行Finally”);
}
}
}
}
第2题(上机练习系统第65题 )
填写代码,算术运算异常处理(Try/Catch)例子(10分)
此题的上机步骤是:
- 建立一个Java项目,名称可以按题号取名;
- 建立一个类, 类的名称为Main。这一点非常重要;
- 填代码;
- 提交代码,注意题号要一致。
有如下程序,是异常处理(Try/Catch)的例子,完成的功能为捕获异常,并进行处理(输出错误信息)。请将下面程序的【代码】替换为Java代码,使程序运行正确。
文件Main.java
import java.util.;
public class Main {
public static void main(String[] args) {
// 键盘输入数n作为分母,做除法
Scanner in = new Scanner(System.in);
int y = 0;
int n = 0;
【代码1】 {
n = in.nextInt();
y = (3 / n);
} catch (【代码2】 e) {//输入数据不匹配
// TODO Auto-generated catch block
e.printStackTrace();//显示堆栈数据
System.out.println(“请输入整数!”);
} catch (ArithmeticException e) {
// TODO Auto-generated catch block
System.out.println(“请输入非零整数!”);
} 【代码3】 (Exception e) {
// TODO Auto-generated catch block
System.out.println(“出现了未知情况!”);
}
System.out.println(“程序正常结束!”);
}
}
解答:
import java.util.;
public class Main {
public static void main(String[] args) {
// 键盘输入数n作为分母,做除法
Scanner in = new Scanner(System.in);
int y = 0;
int n = 0;
try{
n = in.nextInt();
y = (3 / n);
} catch (InputMismatchException e) {//输入数据不匹配
// TODO Auto-generated catch block
e.printStackTrace();//显示堆栈数据
System.out.println(“请输入整数!”);
} catch (ArithmeticException e) {
// TODO Auto-generated catch block
System.out.println(“请输入非零整数!”);
} catch (Exception e) {
// TODO Auto-generated catch block
System.out.println(“出现了未知情况!”);
}
System.out.println(“程序正常结束!”);
}
}
第3题(上机练习系统第66题 )
填写代码,自定义异常处理类(继承Exception)例子(10分)
此题的上机步骤是:
- 建立一个Java项目,名称可以按题号取名;
- 建立一个类, 类的名称为Main。这一点非常重要;
- 填代码;
- 提交代码,注意题号要一致。
有如下程序,是自定义异常处理类(继承Exception)的例子,完成的功能为键盘输入字符串作为异常处理提示信息。请将下面程序的【代码】替换为Java代码,使程序运行正确。
文件Main.java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String st=in.nextLine();// 键盘输入字符串作为提示信息
try {
【代码1】 new MyException(st);
} catch (MyException e) {
// TODO Auto-generated catch block
System.out.println(st);
}
}
}
// 子类,继承Exception
class MyException extends 【代码2】 {
public MyException() {
super();
// TODO Auto-generated constructor stub
}
public 【代码3】(String s) {
super(s);
// TODO Auto-generated constructor stub
}
}
解答:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String st=in.nextLine();// 键盘输入字符串作为提示信息
try {
throw new MyException(st);
} catch (MyException e) {
// TODO Auto-generated catch block
System.out.println(st);
}
}
}
// 子类,继承Exception
class MyException extends Exception{
public MyException() {
super();
// TODO Auto-generated constructor stub
}
public MyException(String s) {
super(s);
// TODO Auto-generated constructor stub
}
}
第4题(上机练习系统第67题 )
填写代码,ArrayList类的方法(10分)
以下程序是有关ArrayList类的方法的例子,请将下面程序的【代码】替换为Java程序代码,使程序运行正确。
文件Main.java
import java.util.*;
public class Main {
public static void main(String[] args) {
Show aShow =new Show();//显示元素
ArrayList【代码1】 list1=new ArrayList();
【代码2】.ensureCapacity(200);
Scanner scanner=new Scanner(System.in);
list1.add(“abc”);
list1.add(“123”);
int i=scanner.nextInt();
list1.【代码3】(Integer.toString(i));//转换为字符串再加入
aShow.showList(list1);
Object[] ob=list1.【代码4】();//转换为字符串
String st1=(String)ob[0];//取出下标为0的元素
System.out.println(“下标为0的元素为:”+st1);
String st2=list1.【代码5】(2);//取出下标为2的元素
System.out.println(“下标为2的元素为:”+st2);
list1.【代码6】;//删除下标为1的元素
aShow.showList(list1);
ArrayList arrayList1 = new ArrayList();
arrayList1.add(0, “The” );
arrayList1.add( 1, “fox” );
arrayList1.add( 1, “jumps” );
arrayList1.【代码7】(1,list1);//将list1加入arrayList1
aShow.showList(arrayList1);
}
}
//显示元素的类
class Show{
public void showList(ArrayList s) {
Iterator iter=s.iterator();
while(iter.hasNext()){
String st=iter.next();
System.out.print(st+" ");
}
System.out.println();
}
}
import java.util.*;
public class Main {
public static void main(String[] args) {
Show aShow =new Show();//显示元素
ArrayList list1=new ArrayList();
list1.ensureCapacity(200);
Scanner scanner=new Scanner(System.in);
list1.add(“abc”);
list1.add(“123”);
int i=scanner.nextInt();
list1.add(Integer.toString(i));//转换为字符串再加入
aShow.showList(list1);
Object[] ob=list1.toArray();//转换为字符串
String st1=(String)ob[0];//取出下标为0的元素
System.out.println(“下标为0的元素为:”+st1);
String st2=list1.get(2);//取出下标为2的元素
System.out.println(“下标为2的元素为:”+st2);
list1.remove(1);//删除下标为1的元素
aShow.showList(list1);
ArrayList arrayList1 = new ArrayList();
arrayList1.add(0, “The” );
arrayList1.add( 1, “fox” );
arrayList1.add( 1, “jumps” );
arrayList1.addAll(1,list1);//将list1加入arrayList1
aShow.showList(arrayList1);
}
}
//显示元素的类
class Show{
public void showList(ArrayList s) {
Iterator iter=s.iterator();
while(iter.hasNext()){
String st=iter.next();
System.out.print(st+" ");
}
System.out.println();
}
}
第5题(上机练习系统第68题 )
填写代码,使用ArrayList类进行排序(10分)
以下程序是使用ArrayList类对键盘输入的整数数组进行排序,请将下面程序的【代码】替换为Java程序代码,使程序运行正确。
文件Main.java
import java.util.;
public class Main {
public static void main(String[] args) {
Show aShow =new Show();//显示元素
ArrayList<【代码1】> list1=new ArrayList();
Scanner in=new Scanner(System.in);
int n=in.nextInt();
list1.ensureCapacity(n);
while(n–【代码2】0){//输入n个数
int k=in.nextInt();
list1.add(k);//加入元素
}
【代码3】.sort(list1);//排序
aShow.showList(list1);
}
}
//显示元素的类
class Show{
public void showList(ArrayList list1) {
Iterator<【代码4】> iter=list1.iterator();
while(iter.hasNext()){
int st=iter.next();
System.out.print(st+" ");
}
System.out.println();
}
}
import java.util.;
public class Main {
public static void main(String[] args) {
Show aShow = new Show();// 显示元素
ArrayList list1 = new ArrayList();
Scanner in = new Scanner(System.in);
int n = in.nextInt();
list1.ensureCapacity(n);
while (n-- != 0) {// 输入n个数
int k = in.nextInt();
list1.add(k);// 加入元素
}
Collections.sort(list1);// 排序
aShow.showList(list1);
}
}
// 显示元素的类
class Show {
public void showList(ArrayList list1) {
Iterator iter = list1.iterator();
while (iter.hasNext()) {
int st = iter.next();
System.out.print(st + " ");
}
System.out.println();
}
}
第6题(上机练习系统第69题 )
编写部分代码. 求散列码之和(arraylist).(10分)
下面程序通过arraylist存储数据,然后运用object中的方法计算散列码之和,但类HashCodeSum中部分代码缺失.请编写程序代码,使程序运行正确。
此题的上机步骤是:
- 建立一个Java项目,名称可以按题号取名;
- 建立一个类, 类的名称为Main。这一点非常重要;
- 将题中代码复制到Main.java中;
- 按要求编写代码,请注意已经有的代码不能修改,特别是class Main类中的代码不能修改;
- 提交代码,注意题号要一致。
文件Main.java
import java.util.;
public class Main {
public static void main(String[] args) {
Scanner reader=new Scanner(System.in);
int n=reader.nextInt();
ArrayList a=new ArrayList();
for(int i=0;i<n;i++)
a.add(reader.nextInt());
HashCodeSum x=new HashCodeSum();
System.out.println(x.sum(a));//显示结果
System.out.println(“The Main class is end.”);
}
}
class HashCodeSum{
int sum(ArrayList a){
int sum=0;
/-----请编写代码-----*/
/-----编写的代码结束-----/
return (sum);
}
}
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner reader=new Scanner(System.in);
int n=reader.nextInt();
ArrayList a=new ArrayList();
for(int i=0;i<n;i++)
a.add(reader.nextInt());
HashCodeSum x=new HashCodeSum();
System.out.println(x.sum(a));//显示结果
System.out.println("The Main class is end.");
}
}
class HashCodeSum{
int sum(ArrayList a){
int sum=0;
/-----请编写代码-----/
for(int i = 0;i < a.size();i++)
{
sum+=a.get(i);
}
/-----编写的代码结束-----/
return (sum);
}
}
第7题(上机练习系统第70题 )
填写代码,功能是通过线程输出字符串(10分)
此题的上机步骤是:
- 建立一个Java项目,名称可以按题号取名;
- 建立一个类, 类的名称为Main。这一点非常重要;
- 填代码;
- 提交代码,注意题号要一致。
有如下程序,是线程的例子,完成的功能为输出字符串。请将下面程序的【代码】替换为Java代码,使程序运行正确。
文件Main.java
import java.util.;
public class Main extends 【代码1】 {
static String s;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
s = scanner.nextLine();
【代码2】 t = new Main();
t.start();
}
public void 【代码3】() {
System.out.println(s);
}
}
import java.util.;
public class Main extends Thread {
static String s;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
s = scanner.nextLine();
Main t = new Main();
t.start();
}
public void run() {
System.out.println(s);
}
}
第8题(上机练习系统第71题 )
填写代码,功能是实现Runnable并输出字符串(10分)
此题的上机步骤是:
- 建立一个Java项目,名称可以按题号取名;
- 建立一个类, 类的名称为Main。这一点非常重要;
- 填代码;
- 提交代码,注意题号要一致。
有如下程序,是线程的例子,完成的功能为输出字符串。请将下面程序的【代码】替换为Java代码,使程序运行正确。
文件Main.java
import java.util.;
public class Main 【代码1】 Runnable{
static String s;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
s = scanner.nextLine();
【代码2】 t=new Thread(new 【代码3】);
t.【代码4】;
}
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println(s);
}
}
import java.util.;
public class Main implements Runnable{
static String s;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
s = scanner.nextLine();
Thread t=new Thread(new Main());
t.start();
}
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println(s);
}
}
四、实验总结
要求
(1) 对实验结果进行分析,并且给一个评估
(2) 经验总结,心得体会(如果有的话)