编写一个方法
返回对象数组中最大的对象
方法签名如下:
public static Object max(Comparable[] a)
所有对象都是Comparable接口的实例。
对象在数组中的顺序是由compareTo方法决定的。
编写测试程序,创建一个由10个字符串构成的数组,一个由10个整数构成的数组和一个由10个日期构成的数组,找出数组中最大的字符串、整数和日期。
A.UML类图
B.实验运行
首先根据提示输入相关信息,其中日期以YYYY-MM-DD格式输入
回车,返回三种类型的最大值
C.实验过程与结果分析
首先根据题目要求定义max方法,其中Comparable是接口类,可以是这三类类型的实例数组,然后用instanceof语句判断是哪个类型。
if(a[0] instanceof String){
……
return max;}
if(a[0] instanceof Date){
……
return max;}
if(a[0] instanceof Integer){
……
return max;}
return null;
在每个类型内循环遍历使用compareTo方法求最大值(以Date类为例)
Date max = (Date)a[0];
for(int i = 1;i < a.length;i++){
if(a[i].compareTo(max) > 0)max = (Date)a[i];
}
return max;
在主方法内定义三个类型的五个长度的数组
Integer[] num = new Integer[10];
String[] strings = new String[10];
Date[] dates = new Date[10];
然后输入内容,其中使用util库内的Date类,然后使用SimpleDateFormat类的时间类型定义(yyyy-mm-dd),然后用其内的方法**parse(input.next())**输入到Date类型实例中
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
for(int i = 0; i < 10;i++){
dates[i] = new Date();
dates[i] = simpleDateFormat.parse(input.next());
}
最后调用max方法,输出结果即可
int max1 = (int)max(num);
String max2 = (String)max(strings);
Date max3 = (Date)max(dates);
System.out.println("最大整数为: " + max1);
System.out.println("最大字符串为: " + max2);
System.out.println("最大日期为: " + max3);
实验代码如下
import java.util.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Scanner;
public class Max {
//根据不同的类归属调用不同的max方法
public static Object max(Comparable[] a){
if(a[0] instanceof String){
String max = (String)a[0];
for(int i = 1; i < a.length;i++){
if(a[i].compareTo(max) > 0)max = (String)a[i];
}
return max;
}
if(a[0] instanceof Date){
Date max = (Date)a[0];
for(int i = 1;i < a.length;i++){
if(a[i].compareTo(max) > 0)max = (Date)a[i];
}
return max;
}
if(a[0] instanceof Integer){
int max = (Integer)a[0];
for(int i = 1;i < a.length;i++){
if(a[i].compareTo(max) > 0)max = (Integer)a[i];
}
return max;
}
//如果都不属于这三种类型,返回一个null
return null;
}
//注意抛出异常
public static void main(String[] args) throws ParseException {
Scanner input = new Scanner(System.in);
Integer[] num = new Integer[10];
String[] strings = new String[10];
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
Date[] dates = new Date[10];
System.out.println("请输入十个整数: ");
for(int i = 0; i < 10;i++){
num[i] = input.nextInt();
}
System.out.println("请输入十个字符串: ");
for(int i = 0; i < 10;i++){
strings[i] = input.next();
}
System.out.println("请输入十个时间: ");
for(int i = 0; i < 10;i++){
dates[i] = new Date();
dates[i] = simpleDateFormat.parse(input.next());
}
input.close();
int max1 = (int)max(num);
String max2 = (String)max(strings);
Date max3 = (Date)max(dates);
System.out.println("最大整数为: " + max1);
System.out.println("最大字符串为: " + max2);
System.out.println("最大日期为: " + max3);
}
}