XTU-JAVA课后练习答案三

《面向对象程序设计(Java)》
实验报告

实验3: 数组、字符串、类的继承、接口、多态性

一、实验类型
设计性实验
二、实验目的
1、Java类的定义和使用
2、掌握创建和使用类对象的方法。
3、对象的引用

三、实验内容及步骤
类和对象的创建
1、类通过关键字class来创建,格式如下:
[修饰符]<类名>[extends 父类名][implements接口]
{
<类体>
}
修饰符包括:public、abstract、final
2、创建对象的格式如下:
<类名><对象名>=new<类名>([参数列表》例中:MyBox bl=new MyBox();二、对象的引用
1)对象的引用:
<对象名><变量或方法名>例:al.draw(g);
2)对象的清除:
MyBox al=new MyBox(20,20,200,400);
…/对象的操作
al=null;
三、具体实例
例1:MaxArray类的对象求出一维数组中的最大值。
class MaxArray{
int findmax(int a[],int n){
int max=a[0];
for(int i=l;i<n;i++)
if(a[i]>max)
max=a[i];
/返回max的值
}
public class Cl{
public static void main(String args]){
//利用类MaxAray创建对象ob int a[]={2,5,7,3,18,9},b[]={33,43,6,12,8};System.out.println(”数组a中的最大值是“+ob.findmax(a,6);
/输出数组b的最大值
例2:练习命令行参数的使用。
(一)带有2个命令行参数
public class say{
public static void main(String args[){
String name=args[0];String word-args[1];System.out.println(“我想对“+name+”悄悄地说:“+word);
}
调试过程:保存的文件名say.Java,编译文件:Javac say.Java,运行文件:Java say妈妈我爱你!!!
其中:“妈妈”是第一个命令行参数;“我爱你!!”是第二个命令行参数。
(二)带有3个命令行参数(3个整数求最大值)public class max{
public static void main(String args]){
int max;int a=Integer-parselnt(args[0]);int b=Integer.parselnt(args[1]);int c=Integer.parselnt(args[2]);if(a>b&&a>c)
max=a;else if(b>c)
max=b;else max=c;System.out.println(“三个数中最大的是:"+max);周试过程:保存的文件名max.Java,编译文件:Javac maxJava,运行文件:Java max1286其中:“12”是第一个命令行参数;“48”是第二个命令行参数;“6”是第三个命令行参数。
三)带有2个命令行参数(2个整数求最大值),由同学自己完成。

(2) 题目从上机练习系统中选取
(3) 每道题都需要“类描述图”,如果有“继承”关系,需要画出“继承关系图”
(4) 每道题都需要实验过程和结果的屏幕截图

第1题(上机练习系统第35题 )
第35题 编程题:输出字符串中的大写字母(10分)
输入n个字符串,输出字符串中的大写字母。

将有多组数据,组数预先未知。

输入格式
每组数据第一行为整数n,表示字符串的个数。
每组数据第二行开始有n个字符串,每个字符串的长度都小于10000。
输出格式
每组数据输出n行,每行为对应字符串中的大写字母
样例输入
2
123Rtii
erYY09
1
fg*&KK
样例输出
R
YY
KK

数据规模与约定
1 <= n <= 10000。

说明:有一些试题会给出多组样例输入输出以帮助你更好的做题。
在输出时,你的程序必须满足要求,不能少任何内容,也不能多任何内容。如果你的内容和输出要求不一样,你的程序会被判断为错误,包括你输出了提示信息、中间调试信息、标点符号、计时或者统计的信息等。
所有这些样例都测试通过,也不代表你的程序就是完全正确的,潜在的错误可能仍然导致你的得分较低。

此题的上机步骤是:

  1. 建立一个Java项目,名称可以按题号取名;
  2. 建立一个类, 类的名称为Main。这一点非常重要;
  3. 编写代码并运行;
  4. 提交代码,注意题号要一致。
    import java.util.Scanner;

public class Main {

public static void main(String[] args) {
	Scanner in = new Scanner(System.in);
	while(in.hasNext())
	{
		int n = in.nextInt();
		for(int i = 0; i<n;i++)
		{
			String str = in.next();
			char[] ss =str.toCharArray();
			for(int j = 0;j<ss.length;j++)
			{
				if(ss[j]<='Z'&&ss[j]>='A')
				{
					System.out.print(ss[j]);
				}
			}
			System.out.println();
		}
	}	
	in.close();
}

}

第2题(上机练习系统第36题 )
第36题 填写代码. 字符串合并的例子(8分)
此题的上机步骤是:

  1. 建立一个Java项目,名称可以按题号取名;
  2. 建立一个类, 类的名称为Main。这一点非常重要;
  3. 填代码;
  4. 提交代码,注意题号要一致。
    下面程序将n个字符串合并为一个字符串.
    请将下面程序的【代码】替换为Java程序代码,使程序运行正确。
    文件Main.java

import java.util.Scanner;
public class Main {
static String【代码1】 strArray = new String[100];
static int n;// 要进行操作的字符串个数
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 从键盘获取n
n = Integer.parseInt(sc.nextLine());
for (int i = 0; i < n; i++) {
// 从键盘获取字符串
【代码2】= sc.nextLine();
}
System.out.println(“你输入的字符串如下:”);
for (int i = 0; i < n; i++) {
System.out.println(strArray[i]);
}
String st2 = stringAdd();// 字符串数组合并为一个字符串
System.out.println(st2);
}
// 此方法的作用是将字符串数组转换成一个字符串
public static 【代码3】 stringAdd() {
String string = “”;
for (int i = 0; i < n; i++) {
string = string 【代码4】 strArray[i];
}
return string;
// 将这个字符串返回
}
}
import java.util.Scanner;
public class Main {
static String[] strArray = new String[100];
static int n;// 要进行操作的字符串个数
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 从键盘获取n
n = Integer.parseInt(sc.nextLine());
for (int i = 0; i < n; i++) {
// 从键盘获取字符串
strArray[i]= sc.nextLine();
}
System.out.println(“你输入的字符串如下:”);
for (int i = 0; i < n; i++) {
System.out.println(strArray[i]);
}
String st2 = stringAdd();// 字符串数组合并为一个字符串
System.out.println(st2);
}
// 此方法的作用是将字符串数组转换成一个字符串
public static String stringAdd() {
String string = “”;
for (int i = 0; i < n; i++) {
string = string + strArray[i];
}
return string;
// 将这个字符串返回
}
}

第3题(上机练习系统第37题 )
第37题 编程:n个整数的逆序输出(10分)
请编写程序:对输入的n个整数进行逆序并输出.

输入格式
n
n个用空格分隔开的整数。
输出格式
逆序(n个用一个空格分隔开的整数)。

样例输入
3
1 3 2
样例输出
2 3 1
注意: 2 3 1 中间只有一个空格, 尾部1的后面一个空格

此题的上机步骤是:

  1. 建立一个Java项目,名称可以按题号取名;
  2. 建立一个类, 类的名称为Main。这一点非常重要;
  3. 输入代码并运行;
  4. 提交代码,注意题号要一致。
    import java.util.Scanner;

public class Main {

public static void main(String[] args) {
	Scanner in = new Scanner(System.in);
	int[] a = new int [10000];
	int n = in.nextInt();
	for(int i = 0;i<n;i++)
	{
		a[i]=in.nextInt();
	}
	for(int i = n-1;i>=0;i--)
	{
		System.out.print(a[i]+" ");
	}
	in.close();
}

}

第4题(上机练习系统第39题 )
第39题 编程:数组奇偶位对换,并输出奇数下标的元素值(10分)
请编写程序:对输入的整数数组按从左往右从奇数位开始对换下标相邻的奇数位和偶数位,并输出下标为奇数(1,3,5,…)的元素值.

输入格式
n
n个用空格分隔开的整数。
输出格式
输出若干个整数(每行一个数)。

样例输入
5
5 1 2 3 4
样例输出
2
4

此题的上机步骤是:

  1. 建立一个Java项目,名称可以按题号取名;
  2. 建立一个类, 类的名称为Main。这一点非常重要;
  3. 输入代码并运行;
  4. 提交代码,注意题号要一致。
    import java.util.Scanner;

public class Main {

public static void main(String[] args) {
	Scanner in = new Scanner(System.in);
	int[] a = new int [10000];
	int n = in.nextInt();
	for(int i = 0;i < n; i++)
	{
		a[i] = in.nextInt();
	}
	for(int i = 1;i < n;i++)
	{
		if(i%2==0)
			System.out.println(a[i]);
	}
	if(n%2==0)
		System.out.println(a[n-1]);
	in.close();
}

}

第5题(上机练习系统第41题 )
第41题 编程求数组最大值及其下标(10分)

对于给定整数数组a[],寻找其中最大值,并返回下标。
输入格式
  整数数组a[],数组元素个数小于等于100。输出数据分作两行:第一行只有一个数,表示数组元素个数;第二行为数组的各个元素。
输出格式
  输出最大值,及其下标
样例输入
3
33 2 1
样例输出
33 0

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
	int[] a = new int [100];
	Scanner in = new Scanner(System.in);
	int n = 0,m = 0;
	int k = in.nextInt(); 
	for(int i = 0;i<k;i++)
	{
		a[i] = in.nextInt();
	}
	n = a[0];
	for(int j = 1;j < k;j++)
	{
		n = Math.max(n,a[j]);
		if(n==a[j])
			m=j;
	}
	System.out.println(n+" "+m);
	in.close();
}

}

第6题(上机练习系统第42题 )
第42题 编程找x在某数组中的下标(10分)
时间限制:1 秒内存限制:32 兆
输入一个数n,然后输入n个数值各不相同,再输入一个值x,输出这个值在这个数组中的下标(从0开始,若不在数组中则输出-1)。
输入:
测试数据有多组,输入n(1<=n<=200),接着输入n个数,然后输入x。
输出:
对于每组输入,请输出结果。
样例输入:
2
1 3
0
样例输出:
-1
import java.util.Scanner;

public class Main {

public static void main(String[] args) {
	int[] a = new int [200];
	Scanner in = new Scanner(System.in);
	while(in.hasNext())
	{
		int i = 0;
		int n = in.nextInt();
		for(i = 0;i < n; i++)
		{
			a[i] = in.nextInt();
		}
		int x = in.nextInt();
		for(i = 0;i < n;i++)
		{
			if(a[i]==x)
			{
				System.out.println(i);
				break;
			}
		}
		if(i==n)
		{
			System.out.println("-1");
		}
	}
	in.close();
}

}

第7题(上机练习系统第 53题 )
第53题 编写程序:完美(回文串)的代价(10分)
  回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的。小龙龙认为回文串才是完美的。现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串。
  交换的定义是:交换两个相邻的字符
  例如mamad
  第一次交换 ad : mamda
  第二次交换 md : madma
  第三次交换 ma : madam (回文!完美!)
输入格式
  第一行是一个整数N,表示接下来的字符串的长度(N <= 8000)
  第二行是一个字符串,长度为N.只包含小写字母
输出格式
  如果可能,输出最少的交换次数。
  否则输出Impossible
样例输入
5
mamad
样例输出
3
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
int n = Integer.parseInt(scanner.nextLine());
String str = scanner.nextLine();
char[] chs = str.toCharArray();
int[] count = new int[26];
char ch = ‘0’;
int oddchar = 0;
for (int j = 0; j < chs.length; j++) {
int index = chs[j] - ‘a’;
count[index]++;
}
for (int i = 0; i < 26; i++) {
if (count[i] % 2 != 0) {
oddchar++;
ch = (char) (i + ‘a’);
}
}
if (oddchar > 1) {
System.out.println(“Impossible”);
} else {
int result = exchange(chs, n, ch);
System.out.println(result);
}
}
}
private static int exchange(char[] chs, int n, char ch) {
int count = 0, i, j, k;
for (i = 0; i < n / 2; i++) {
if (chs[i] == ch) {
for (j = i; j < n - i - 1; j++) {
if (chs[j] == chs[n - i - 1]) {
break;
}
}
count += j - i;
for (k = j; k > i; k–) {
chs[k] = chs[k - 1];
}
chs[i] = chs[n - i - 1];
} else {
for (j = n - i - 1; j >= i; j–) {
if (chs[j] == chs[i]) {
break;
}
}
count += n - i - 1 - j;
for (k = j; k < n - i - 1; k++) {
chs[k] = chs[k + 1];
}
chs[n - i - 1] = chs[i];
}
}
return count;
}
}

第8题(上机练习系统第 54题 )
第54题 编写程序:字符串对比(10分)
  给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关系是以下4中情况之一:
  1:两个字符串长度不等。比如 Beijing 和 Hebei
  2:两个字符串不仅长度相等,而且相应位置上的字符完全一致(区分大小写),比如 Beijing 和 Beijing
  3:两个字符串长度相等,相应位置上的字符仅在不区分大小写的前提下才能达到完全一致(也就是说,它并不满足情况2)。比如 beijing 和 BEIjing
  4:两个字符串长度相等,但是即使是不区分大小写也不能使这两个字符串一致。比如 Beijing 和 Nanjing
  编程判断输入的两个字符串之间的关系属于这四类中的哪一类,给出所属的类的编号。
输入格式
  包括两行,每行都是一个字符串
输出格式
  仅有一个数字,表明这两个字符串的关系编号
样例输入
BEIjing
beiJing
样例输出
3
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
while(in.hasNext())
{
String str1 = in.next();
String str2 = in.next();
char[] s1 = str1.toCharArray();
char[] s2 = str2.toCharArray();
boolean p = true;
int i = 0;
if(s1.length!=s2.length)
System.out.println(“1”);
else
{
for(i = 0; i < s1.length; i++)
{
if((s1[i]!=s2[i])&&(s1[i]+32!=(int)s2[i])&&((int)s1[i]!=s2[i]+32))
{
System.out.println(“4”);
break;
}
else if((s1[i]+32s2[i])||(s1[i]s2[i]+32))
{
p = false;
}
}
if(i
s1.length&&p)
{
System.out.println(“2”);
}
else if(i
s1.length&&!p)
{
System.out.println(“3”);
}
}
}
in.close();
}
}

第9题(上机练习系统第 55题 )
第55题 填写代码,以Point类为例的类继承(10分)
以下程序是有关类继承的例子,请将下面程序的【代码】替换为Java程序代码,使程序运行正确。
文件Main.java

import java.util.Scanner;
class Point {
public 【代码1】 x, y;//域(成员属性)
//无参构造器(方法)
public Point() {
x = 0;
y = 0;
}
// 有参构造器(方法)
public 【代码2】(int x ,int y) {
this.x = x;
this.y = y;
}
//成员方法
protected void move(【代码3】) {
x += ix;
y += iy;
}
}
class Son 【代码4】 Point{
private int x,y;//隐藏父亲的x,y
//无参
public Son(){
this.x=0;
this.y=0;
}

//有参
public Son(int x,int y){
this.x=x;
this.y=y;
}
public int getX() {
return x;
}

public int getY() {
return y;
}
}
class Son1 extends Point {
public Son1(){
//this.x=0;
//this.y=0;
【代码5】;//调用父类的构造器(方法)Point()
}
//有参
public Son1(int x,int y){
//this.x=x;
//this.y=y;
【代码6】;//调用父类的构造器(方法)Point(int x,int y)
}
public void move(int ix,int iy){
【代码7】.move(ix, iy);//调用父类的move(…)
}
}
public class Main {
/**

  • @param args
    */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    Point pt=new Point();//声明对象变量,创建(实例化)
    【代码8】.x=1;//pt中x赋值1
    System.out.println(“pt.x=”+pt.x+“\npt.y=”+pt.y);
    Son son=new Son(1,2);
    Son1 son1=new Son1();
    son1.x=1;
    son1.move(2, 3);//继承
    System.out.println(“son1.x=”+ son1.x+“\nson1.y=”+ son1.y);
    son.【代码9】(2, 3);//继承
    System.out.println(“son.x=”+ son.【代码10】);//显示son中x的值
    }
    }

此题的上机步骤是:

  1. 建立一个Java项目,名称可以按题号取名;
  2. 建立一个类, 类的名称为Main。这一点非常重要;
  3. 填代码;
  4. 提交代码,注意题号要一致。
    import java.util.Scanner;
    class Point {
    public int x, y;//域(成员属性)
    //无参构造器(方法)
    public Point() {
    x = 0;
    y = 0;
    }
    // 有参构造器(方法)
    public Point (int x ,int y) {
    this.x = x;
    this.y = y;
    }
    //成员方法
    protected void move(int ix,int iy) {
    x += ix;
    y += iy;
    }
    }
    class Son extends Point{
    private int x,y;//隐藏父亲的x,y
    //无参
    public Son(){
    this.x=0;
    this.y=0;
    }

//有参
public Son(int x,int y){
this.x=x;
this.y=y;
}
public int getX() {
return x;
}

public int getY() {
return y;
}
}
class Son1 extends Point {
public Son1(){
//this.x=0;
//this.y=0;
super();//调用父类的构造器(方法)Point()
}
//有参
public Son1(int x,int y){
//this.x=x;
//this.y=y;
super(x,y);//调用父类的构造器(方法)Point(int x,int y)
}
public void move(int ix,int iy){
super.move(ix, iy);//调用父类的move(…)
}
}
public class Main {
/**

  • @param args
    */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    Point pt=new Point();//声明对象变量,创建(实例化)
    pt.x=1;//pt中x赋值1
    System.out.println(“pt.x=”+pt.x+“\npt.y=”+pt.y);
    Son son=new Son(1,2);
    Son1 son1=new Son1();
    son1.x=1;
    son1.move(2, 3);//继承
    System.out.println(“son1.x=”+ son1.x+“\nson1.y=”+ son1.y);
    son.move(2, 3);//继承
    System.out.println(“son.x=”+ son.getX());//显示son中x的值
    }

第10题(上机练习系统第 56题 )
第56题 填写代码。运用继承进行两个银行存款计算利息的例子.(10分)
下列Java应用程序输出银行在利息方面的信息。
请将下面程序的【代码】替换为Java程序代码,使程序运行正确。
文件Main.java

class Bank {
int savedMoney;
int year;
double interest;
double interestRate = 0.29;
public double computerInterest() {
interest=yearinterestRatesavedMoney;
return 【代码1】;//返回利息
}
public void setInterestRate(double rate) {
interestRate = rate;
}
}
class ConstructionBank extends Bank {
double year;
public double computerInterest() {
super.year=(int)year;
double r = year-(int)year;
int day=(int)(r1000);
double yearInterest = 【代码2】 //super调用隐藏的computerInterest()方法
double dayInterest = day
0.0001savedMoney;
interest= yearInterest+dayInterest;
System.out.printf(“%d元存在建设银行%d年零%d天的利息:%f元\n”,
savedMoney,super.year,day,interest);
return interest;
}
}
class BankOfDalian【代码3】 Bank { //继承
double year;
public double computerInterest() {
super.year=(int)year;
double r = year-(int)year;
int day=(int)(r
1000);
double yearInterest = 【代码4】// super调用隐藏的computerInterest()方法
double dayInterest = day0.00012savedMoney;
interest= yearInterest+dayInterest;
System.out.printf(“%d元存在大连银行%d年零%d天的利息:%f元\n”,
savedMoney,super.year,day,interest);
return interest;
}
}
public class Main {
public static void main(String args[]) {
int amount=8000;
ConstructionBank bank1 = new ConstructionBank();
bank1.savedMoney = amount;
bank1.year = 8.236;
bank1.setInterestRate(0.035);
double interest1 = bank1.【代码5】;//计算利息
BankOfDalian bank2 = new BankOfDalian();
bank2.savedMoney = amount;
bank2.year = 8.236;
bank2.setInterestRate(0.035);
double interest2=bank2.【代码6】;//计算利息
System.out.printf(“两个银行利息相差%f元\n”,interest2-interest1);
}
}

此题的上机步骤是:

  1. 建立一个Java项目,名称可以按题号取名;
  2. 建立一个类, 类的名称为Main。这一点非常重要;
  3. 填代码;
  4. 提交代码,注意题号要一致。
    class Bank {
    int savedMoney;
    int year;
    double interest;
    double interestRate = 0.29;
    public double computerInterest() {
    interest=yearinterestRatesavedMoney;
    return interest;//返回利息
    }
    public void setInterestRate(double rate) {
    interestRate = rate;
    }
    }
    class ConstructionBank extends Bank {
    double year;
    public double computerInterest() {
    super.year=(int)year;
    double r = year-(int)year;
    int day=(int)(r1000);
    double yearInterest = super.computerInterest(); //super调用隐藏的computerInterest()方法
    double dayInterest = day
    0.0001savedMoney;
    interest= yearInterest+dayInterest;
    System.out.printf(“%d元存在建设银行%d年零%d天的利息:%f元\n”,
    savedMoney,super.year,day,interest);
    return interest;
    }
    }
    class BankOfDalian extends Bank { //继承
    double year;
    public double computerInterest() {
    super.year=(int)year;
    double r = year-(int)year;
    int day=(int)(r
    1000);
    double yearInterest = super.computerInterest();// super调用隐藏的computerInterest()方法
    double dayInterest = day0.00012savedMoney;
    interest= yearInterest+dayInterest;
    System.out.printf(“%d元存在大连银行%d年零%d天的利息:%f元\n”,
    savedMoney,super.year,day,interest);
    return interest;
    }
    }
    public class Main {
    public static void main(String args[]) {
    int amount=8000;
    ConstructionBank bank1 = new ConstructionBank();
    bank1.savedMoney = amount;
    bank1.year = 8.236;
    bank1.setInterestRate(0.035);
    double interest1 = bank1.computerInterest();//计算利息
    BankOfDalian bank2 = new BankOfDalian();
    bank2.savedMoney = amount;
    bank2.year = 8.236;
    bank2.setInterestRate(0.035);
    double interest2=bank2.computerInterest();//计算利息
    System.out.printf(“两个银行利息相差%f元\n”,interest2-interest1);
    }
    }

第11题(上机练习系统第57题 )
第57题 填写代码,基类Person(10分)
以下程序是以Person为例的有关抽象类定义有使用的例子,请将下面程序的【代码】替换为Java程序代码,使程序运行正确。
文件Main.java

import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Student[] aStudent = new Student[3];
Scanner reader=new Scanner(System.in);
aStudent[0] = new Student(“Tom”,reader.nextLine());
aStudent[1] = new Student(“Dick”,reader.nextLine());
aStudent[2] = new Student(“Harry”,reader.nextLine());
for(Student 【代码1】: aStudent)
{
System.out.println(“name=” + e.getName() + “,id=” + e.getDescription());
}
System.out.println(“The Main class is end.”);
}
}
【代码2】 class Person {
private String name;
public String getName() {
return name;
}
public Person(String n){
name=n;
}
public abstract String getDescription();
}
class Student extends Person
{
private String 【代码3】;
public Student(String n, String m)
{
super(n);
major = m;
}
@Override
【代码4】getDescription(){
return "a student majoring in " + major;
}
}

输入:
n个数
输出:
按程序运行结果
The Main class is end.

样例输入:
Math
En
Phy
样例输出:
name=Tom,id=a student majoring in Math
name=Dick,id=a student majoring in En
name=Harry,id=a student majoring in Phy
The Main class is end.

import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Student[] aStudent = new Student[3];
Scanner reader=new Scanner(System.in);
aStudent[0] = new Student(“Tom”,reader.nextLine());
aStudent[1] = new Student(“Dick”,reader.nextLine());
aStudent[2] = new Student(“Harry”,reader.nextLine());
for(Student e: aStudent)
{
System.out.println(“name=” + e.getName() + “,id=” + e.getDescription());
}
System.out.println(“The Main class is end.”);
}
}
abstract class Person {
private String name;
public String getName() {
return name;
}
public Person(String n){
name=n;
}
public abstract String getDescription();
}
class Student extends Person
{
private String major;
public Student(String n, String m)
{
super(n);
major = m;
}
@Override
public String getDescription(){
return "a student majoring in " + major;
}
}

第12题(上机练习系统第 60题 )
第60题 填写代码,接口Colors(10分)
以下程序是以Colors为例的有关接口定义和使用的例子,请将下面程序的【代码】替换为Java程序代码,使程序运行正确。
文件Main.java

import java.util.Scanner;
public class Main {
public static void main(String[] args) {
BaseColors bC=new 【代码1】();//需要使用实现类进行实例化
Scanner reader=new Scanner(System.in);
int n=reader.nextInt();
String colorName=bC.【代码2】(n);//获取值为n=1,2,…,7的颜色名称.
System.out.println(colorName+“色”);//显示颜色名称
System.out.println(“The Main class is end.”);
}
}
interface BaseColors {
//这里都是静态公共常量
int RED = 1, BLUE = 4;//红、蓝
//这是一个抽象的公共方法
String getColorName(int color);//获取颜色名称
}
【代码3】 RGBColors extends BaseColors {
//这是静态常量
int GREEN = 2;//增加 绿色
}
class RGBColorsImp implements RGBColors{
@Override
public String getColorName(int color) {
switch (color){
case 1:
return “红”;
case 2:
return “绿”;
case 4:
return “蓝”;
default:
return “未知”;
}
}
}
//彩虹七种颜色:红色、黄色、绿色、蓝色、粉色、棕色、紫色
//red,yellow,green,blue,pink,brown,purple
interface RainbowColors extends RGBColors {
//新增加了4个成员常量
int YELLOW = 3, PINK = 5, BROWN = 6, PURPLE =7;
}
//彩虹七种颜色:红色、黄色、绿色、蓝色、粉色、棕色、紫色
class RainbowColorsImp extends RGBColorsImp 【代码4】 RainbowColors{
@Override
public String getColorName(int color) {
switch (color){
case 3:
return “黄”;
case 5:
return “粉”;
case 6:
return “棕”;
case 7:
return “紫”;
default:
return 【代码5】.getColorName(color);
}
}
}

输入:
n
输出:
颜色名称
The Main class is end.

样例输入:
6
样例输出:
棕色
The Main class is end.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
BaseColors bC=new RainbowColorsImp();//需要使用实现类进行实例化
Scanner reader=new Scanner(System.in);
int n=reader.nextInt();
String colorName=bC.getColorName(n);//获取值为n=1,2,…,7的颜色名称.
System.out.println(colorName+“色”);//显示颜色名称
System.out.println(“The Main class is end.”);
}
}
interface BaseColors {
//这里都是静态公共常量
int RED = 1, BLUE = 4; //红、蓝
//这是一个抽象的公共方法
String getColorName(int color);//获取颜色名称
}
interface RGBColors extends BaseColors {
//这是静态常量
int GREEN = 2;//增加 绿色
}
class RGBColorsImp implements RGBColors{
@Override
public String getColorName(int color) {
switch (color){
case 1:
return “红”;
case 2:
return “绿”;
case 4:
return “蓝”;
default:
return “未知”;
}
}
}
//彩虹七种颜色:红色、黄色、绿色、蓝色、粉色、棕色、紫色
//red,yellow,green,blue,pink,brown,purple
interface RainbowColors extends RGBColors {
//新增加了4个成员常量
int YELLOW = 3, PINK = 5, BROWN = 6, PURPLE =7;
}
//彩虹七种颜色:红色、黄色、绿色、蓝色、粉色、棕色、紫色
class RainbowColorsImp extends RGBColorsImp implements RainbowColors{
@Override
public String getColorName(int color) {
switch (color){
case 3:
return “黄”;
case 5:
return “粉”;
case 6:
return “棕”;
case 7:
return “紫”;
default:
return super.getColorName(color);
}
}
}

第13题(上机练习系统第 61题 )
第61题 代码填空, Colors接口基本使用操作(10分)
此题的上机步骤是:

  1. 建立一个Java项目,名称可以按题号取名;
  2. 建立一个类, 类的名称为Main。这一点非常重要;
  3. 填代码;
  4. 提交代码,注意题号要一致。

下列Java应用程序是接口的定义、继承和基本使用操作。
请按程序实现要求,将下面程序的【代码】替换为Java程序代码。

文件Main.java
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Baseclass b=new 【代码1】();
int n=b.getColorValue();
System.out.println(“n=”+n);
}
}
//定义接口BaseColors
interface BaseColors {
//这里都是静态公共常量
int RED = 1, GREEN = 2, BLUE = 4;
//这是一个抽象的公共方法
int getColorValue(int color);
}
//接口RainbowColors继承了BaseColors
interface RainbowColors
extends 【代码2】 {
//新增加了4个成员常量
int YELLOW = 3, ORANGE = 5,
INDIGO = 6, VIOLET =7;
//还自动继承了父接口的3个成员常量和1个抽象方法

}
//接口PrintColors继承了BaseColors
interface PrintColors
extends BaseColors {
//增加3个成员常量
int YELLOW = 8, CYAN = 16, MAGENTA = 32;
//覆盖了父接口的成员方法,仍然是抽象的
int getColorValue(int color);
//还可以重载,和其它方法名相同,但参数有差异
int 【代码3】();
}
//接口PrintColors继承了BaseColors
interface LotsOfColors extends RainbowColors, PrintColors {
//这是多重继承,增加3个成员常量
int FUCHSIA = 17, VERMILION = 43, CHARTREUSE = RED+90;
}

class Baseclass 【代码4】 LotsOfColors {
@Override
public int getColorValue() {
// TODO Auto-generated method stub
return 0;
}
@Override
public int 【代码5】(int color) {
// TODO Auto-generated method stub
return 0;
}
}

public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Baseclass b=new Baseclass();
int n=b.getColorValue();
System.out.println(“n=”+n);
}
}
//定义接口BaseColors
interface BaseColors {
//这里都是静态公共常量
int RED = 1, GREEN = 2, BLUE = 4;
//这是一个抽象的公共方法
int getColorValue(int color);
}
//接口RainbowColors继承了BaseColors
interface RainbowColors
extends BaseColors {
//新增加了4个成员常量
int YELLOW = 3, ORANGE = 5,
INDIGO = 6, VIOLET =7;
//还自动继承了父接口的3个成员常量和1个抽象方法

}
//接口PrintColors继承了BaseColors
interface PrintColors
extends BaseColors {
//增加3个成员常量
int YELLOW = 8, CYAN = 16, MAGENTA = 32;
//覆盖了父接口的成员方法,仍然是抽象的
int getColorValue(int color);
//还可以重载,和其它方法名相同,但参数有差异
int getColorValue();
}
//接口PrintColors继承了BaseColors
interface LotsOfColors extends RainbowColors, PrintColors {
//这是多重继承,增加3个成员常量
int FUCHSIA = 17, VERMILION = 43, CHARTREUSE = RED+90;
}

class Baseclass implements LotsOfColors {
@Override
public int getColorValue() {
// TODO Auto-generated method stub
return 0;
}
@Override
public int getColorValue(int color) {
// TODO Auto-generated method stub
return 0;
}
}

第14题(上机练习系统第 62题 )

第62题 代码填空题, 子类的变量覆盖父类变量(10分)
此题的上机步骤是:

  1. 建立一个Java项目,名称可以按题号取名;
  2. 建立一个类, 类的名称为Main。这一点非常重要;
  3. 填代码;
  4. 提交代码,注意题号要一致。
  5. 注意只能修改【代码】之处,不能修改其它地方,否则以0分计

下面程序是子类的变量覆盖父类变量。
请将下面程序的【代码】替换为Java程序代码,使程序运行正确。

文件Main.java
import java.util.;
public class Main 【代码1】 Ancestor{ //定义一个子类
private int defVar = 100; //将父类的defVar隐藏起来
public 【代码2】 getValue(){
return defVar;
}
public static void main(String args[]){
【代码3】 oa = new Main();
System.out.println(“oa.defVar=”+oa.defVar);
System.out.println(“oa.getValue()=”+oa.getValue());
oa.proShow();
oa.pubShow();
}
}
class Ancestor{
private int priVar = 1;
int defVar = 2;
protected int proVar = 3;
public int pubVar = 4;
private void priShow(){
System.out.println(“This is a private method”);
}
void defShow(){
System.out.println(“This is a default method”);
}
protected void proShow(){
System.out.println(“This is a protected method,defVar=”+defVar);
}
public void pubShow(){
System.out.println(“This is a public method,pubVar=”+pubVar);
}
}
import java.util.
;
public class Main extends Ancestor{ //定义一个子类
private int defVar = 100; //将父类的defVar隐藏起来
public int getValue(){
return defVar;
}
public static void main(String args[]){
Main oa = new Main();
System.out.println(“oa.defVar=”+oa.defVar);
System.out.println(“oa.getValue()=”+oa.getValue());
oa.proShow();
oa.pubShow();
}
}
class Ancestor{
private int priVar = 1;
int defVar = 2;
protected int proVar = 3;
public int pubVar = 4;
private void priShow(){
System.out.println(“This is a private method”);
}
void defShow(){
System.out.println(“This is a default method”);
}
protected void proShow(){
System.out.println(“This is a protected method,defVar=”+defVar);
}
public void pubShow(){
System.out.println(“This is a public method,pubVar=”+pubVar);
}
}

该题的类描述图召唤下:

类名称:Point
成员变量:
int x, y
成员方法:
void move(int ix, int iy)
构造方法:
Point( )
Point(int x ,int y)

继承图
类名称
成员变量的个数
成员方法的个数

类名称
继承的成员变量的个数
成员变量的个数
继承的成员方法的个数
成员方法的个数

猜你喜欢

转载自blog.csdn.net/xuanyulevel6/article/details/126068346