java面向对象——常用类

编程要求

请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,具体任务如下:

  • Demo类和Person类已经写好,在测试类中创建Demo类对象d1,传入输入值num1d1调用toString方法并打印输出该值;

  • 创建Demo类对象d2,同样传入输入值num1,打印判断d1d2是否相等(实际是比较地址);

  • 创建Person类对象p,传入输入值num2,打印判断d1p是否相等(实际是比较地址);

测试说明

补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。

测试输入:
100
100

预期输出:
Demo:100
true
false

package case1;

import java.util.Scanner;

public class ObjectTest {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int num1 = sc.nextInt();
		int num2 = sc.nextInt();
		// 在测试类中创建Demo类对象d1,传入输入值num1, d1调用toString方法并打印输出该值
		// 创建Demo类对象d2,同样传入输入值num1,打印判断d1和d2是否相等(实际是比较地址)
		/********* Begin *********/
		Demo d1=new Demo(num1);
		System.out.println(d1.toString());
		Demo d2=new Demo(num1);
		System.out.println(d1.equals(d2));

		/********* End *********/
		// 创建Person类对象p,传入输入值num2,打印判断d1和p是否相等(实际是比较地址)
		/********* Begin *********/
		Person p=new Person(num2);
		System.out.println(d1.equals(p));

		/********* End *********/
	}
}

class Demo {
	private int num;

	public Demo(int num) {
		this.num = num;
	}

	public boolean equals(Object obj) // Object obj = new Demo()
	{
		if (!(obj instanceof Demo)) // 判断obj是否和Demo是同类
			return false;
		Demo d = (Demo) obj; // 将父类的引用(Object)向下转换为子类(Demo)
		return this.num == d.num;
	}

	public String toString() {
		return "Demo:" + num; // 返回对象的值(每一个对象都有自己的特定的字符串)
	}
}

class Person {
	private int num;

	public Person(int num) {
		this.num = num;
	}
}

请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,具体任务如下:

  • 编写测试类,输入int型值aa传递给Integer类对象aString型值bb传递给Integer类对象b,输入int型值caabbc对应的数值相等;

  • 输入String型值str11传递给String类对象str1,输入String型值str22传递给String类对象str2str1str2对应的内容相同;

  • 打印输出a == ba == cb == ca.equals(b)

  • 打印输出str1 == str2str1.equals(str2)

测试说明

补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。

测试输入:
100
100
100
educoder
educoder
预期输出:
false
true
true
true
false
true

package case2;

import java.util.Scanner;

public class WrapperTest {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int aa = sc.nextInt();
		String bb = sc.next();
		int c = sc.nextInt();
		String str11 = sc.next();
		String str22 = sc.next();
		// 包装类中“==”与equals的用法比较
		// 值得注意的是,包装类中的equals方法和String类一样,都是重写了Object类中的equals方法,因此比较的是内容而不是地址,
		// 而“==”比较的依然是引用变量的地址,只是当包装类型和与之相对应的基本类型进行“==”比较时会先做自动拆箱处理。
		/********* Begin *********/
		Integer a=new Integer(aa);
		Integer b=Integer.parseInt(bb);
		String str1=str11;
		String str2=str22;
		System.out.println(a==b);
		System.out.println(a==c);
		System.out.println(b==c);
		System.out.println(a.equals(b));
		System.out.println(str1==str2);
		System.out.println(str1.equals(str2));

		/********* End *********/
	}
}

编程要求

请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,具体任务如下:

  • 编写测试类,输入一个标准的网址,输出其域名的主体;

  • 将该主体转换为大写,打印输出;

  • 具体输出要求请看测试说明。

测试说明

补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。

测试输入:

https://www.educoder.net/

预期输出:

educoder
EDUCODER

package case3;

import java.util.Scanner;

public class StringTest {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String str = sc.next();
		// String substring(int start,int end)
        // 截取字符串,传入的两个参数分别为要截取边界的下标
        // 在java api 中,通常使用两个数字表示范围时,都是含头不含尾,即包含起始下标对应的内容,但不包含结束下标的处对应的内容
        // String toUpperCase() 将当前字符串中的英文部分转换为全大写
		/********* Begin *********/
		int start=str.indexOf(".");
		int end=str.indexOf(".",start+1);
		String str1=str.substring(start+1,end);
		System.out.println(str1);
		System.out.println(str1.toUpperCase());

		/********* End *********/
	}
}

编程要求

请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,具体任务如下:

  • 设计一个密码的自动生成器:密码由大写字母/小写字母/数字组成,生成六位随机密码。

  • 分别以123作为种子数创建Random对象,生成六位随机密码进行测试。

  • 具体输出要求请看测试说明。

测试说明

补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。

测试输入:
1
预期输出:
NAvZuG

package case4;

//密码的自动生成器:密码由大写字母/小写字母/数字组成,生成六位随机密码
import java.util.Random;
import java.util.Scanner;

public class RandomTest {
	public static void main(String[] args) {
		// 定义一个字符型数组
		char[] pardStore = new char[62];
		// 把所有的大写字母放进去 把所有的小写字母放进去 把0到9放进去
		/********* Begin *********/
		for(int i=0;i<26;i++){
		  pardStore[i]=(char)('A'+i);
		  pardStore[i+26]=(char)('a'+i);
		}
		for(int i=0;i<10;i++){
			pardStore[52+i]=(char)('0'+i);
		}

		/********* End *********/
		// 分别以1、2、3作为种子数 生成6位随机密码
		Scanner sc = new Scanner(System.in);
		int seed = sc.nextInt();
		/********* Begin *********/
		Random random=new Random(seed);
		String str="";
		int []arr=random.ints(6,0,62).toArray();
		for(int i=0;i<6;i++){
			str+=pardStore[arr[i]];
		}
		System.out.println(str);
		/********* End *********/
	}
}

编程要求

请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,具体任务如下:

  • 编写测试类,算一下你的出生日期到2020年10月1日总共有多少天;

  • 具体输出要求请看测试说明。

    测试说明

    补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。

测试输入:
1999-09-01
预期输出:
你的出生日期距离2020年10月1日:7701天

package case5;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class DateTest {
	public static void main(String[] args) throws ParseException {
		// 键盘录入你的出生年月日 格式为yyyy-MM-dd
		// 把该字符串转换为一个日期
		// 通过该日期得到一个毫秒值
		// 获取2020年10月1日的毫秒值
		// 两者想减得到一个毫秒值
		// 把该毫秒值转换为天 打印输出
		Scanner sc = new Scanner(System.in);
		String line = sc.nextLine();
		/********* Begin *********/
		SimpleDateFormat mxy=new SimpleDateFormat("yyyy-MM-dd");
		Date date1=mxy.parse(line);
		Date date2=mxy.parse("2020-10-1");
		long number1=date1.getTime();
		long number2=date2.getTime();
		long number=number2-number1;
		number=number/86400000;
		System.out.println("你的出生日期距离2020年10月1日:"+number+"天");
				


		/********* End *********/
	}
}

编程要求

请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,具体任务如下:

  • 编写测试类MathTest,输入4int类型数值,7double类型数值;

  • 分别输出第一个数的平方根,第二个数的立方根,第三个数的第四个数次方,第五个数和第六个数的最大值、最小值,第七个数的绝对值,第八个数的ceil值,第九个数的floor值,第十个数的rint值,第十一个数的round值。

测试说明

补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。

测试输入:
25
27
4
3
3.5
5.5
-8.8
10.8
9.6
10.62
11.51
预期输出:
5.0
3.0
64.0
5.5
3.5
8.8
11.0
9.0
11.0
12

package case6;

import java.util.Scanner;
import java.lang.Math;

public class MathTest {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int a1 = sc.nextInt();
		int a2 = sc.nextInt();
		int a3 = sc.nextInt();
		int a4 = sc.nextInt();
		double a5 = sc.nextDouble();
		double a6 = sc.nextDouble();
		double a7 = sc.nextDouble();
		double a8 = sc.nextDouble();
		double a9 = sc.nextDouble();
		double a10 = sc.nextDouble();
		double a11 = sc.nextDouble();
		/********* Begin *********/
		System.out.println(Math.sqrt(a1));
		System.out.println(Math.cbrt(a2));
		System.out.println(Math.pow(a3,a4));
		System.out.println(Math.max(a5,a6));
		System.out.println(Math.min(a5,a6));
		System.out.println(Math.abs(a7));
		System.out.println(Math.ceil(a8));
		System.out.println(Math.floor(a9));
		System.out.println(Math.rint(a10));
		System.out.println(Math.round(a11));


		/********* End *********/
	}
}

### Java面向对象编程中常用的 #### 1. **Object ** `Object` 是所有 Java 的祖先(根基),每个都隐式或显式地继承自 `Object` 。这意味着所有的 Java 对象都可以调用 `Object` 中定义的方法,例如 `toString()`、`equals(Object obj)` `hashCode()` 等方法[^1]。 以下是 `Object` 的一些常用方法: - `public String toString()`: 返回该对象的字符串表示形式。 - `public boolean equals(Object obj)`: 判断当前对象是否等于指定的对象。 - `protected void finalize() throws Throwable`: 当垃圾回收器决定释放此对象所占用的空间时,会自动调用此方法。 - `public int hashCode()`: 返回该对象的哈希码。 这些方法通常会被子以适应特定的需求。 --- #### 2. **String ** `String` 用于处理不可变的字符序列。它是 Java 编程中最常使用的之一。由于其不可变性,在多线程环境中非常安全[^2]。 一些常见的操作包括: - 字符串连接:通过 `+` 或者 `concat(String str)` 方法完成。 - 子串提取:使用 `substring(int beginIndex, int endIndex)` 方法。 - 大小转换:利用 `toLowerCase()` `toUpperCase()` 方法。 示例代码如下: ```java String greeting = "Hello"; System.out.println(greeting.toUpperCase()); // 输出 HELLO ``` --- #### 3. **Integer 其他包装** `Integer` 是基本数据型 `int` 的包装。它提供了许多有用的静态方法来处理整数型的数运算转换[^3]。 其他似的包装还包括: - `Boolean` (对应布尔型) - `Double`, `Float` (对应浮点型) - `Character` (对应字符型) 以下是一个简单的例子展示如何创建并比较两个 `Integer` 对象: ```java Integer a = new Integer(42); Integer b = Integer.valueOf("42"); if (a.equals(b)) { System.out.println("Values are equal."); } ``` --- #### 4. **ArrayList ** `ArrayList` 属于集合框架的一部分,实现了动态数组的功能。它可以存储任意数量的对象,并允许随机访问其中的元素。 主要特点有: - 动态调整大小。 - 提供快速的随机访问能力。 - 不适合频繁插入删除场景下的性能优化需求。 实例化方式以及常见操作演示: ```java import java.util.ArrayList; ArrayList<String> list = new ArrayList<>(); list.add("Apple"); // 添加元素 list.remove(0); // 移除索引位置上的元素 for (String item : list) { System.out.println(item); } ``` --- #### 5. **HashMap ** `HashMap` 实现了基于键对的数据结构——散列表。它的特点是能够高效地执行查找、插入删除操作。 典型用途包括缓存机制的设计或者关联不同实体之间的映射关系。下面是一段简单程序片段用来初始化一个 HashMap 并对其进行查询: ```java import java.util.HashMap; HashMap<Integer, String> map = new HashMap<>(); map.put(1, "One"); map.put(2, "Two"); // 查询是否存在某个 key-value pair if (map.containsKey(1)) { System.out.println(map.get(1)); // 输出 One } ``` --- #### 6. **Date Calendar ** 时间日期相关的处理经常需要用到 `Date` 及其改进版本 `Calendar` 来获取系统当前时间日期信息。 虽然现代项目更倾向于采用 JSR-310 定义的新 API (`LocalDateTime`) 替代旧有的 Date/Time 库,但在遗留代码里仍然广泛存在这两种传统实现方式。 样例代码如下所示: ```java import java.util.Date; import java.util.Calendar; Date today = new Date(); Calendar cal = Calendar.getInstance(); cal.setTime(today); System.out.println(cal.YEAR + "-" + cal.MONTH + "-" + cal.DAY_OF_MONTH); ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白茶..

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值