课内实验记录|找出对象数组中的最大对象


编写一个方法

返回对象数组中最大的对象

方法签名如下:
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);
	}
	
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值