3.2-2 设计一个名为MyInteger的类

文章描述了一个名为MyInteger的Java类,它有int型数据域、构造方法、get方法,以及判断数字是否为偶数、奇数或素数的方法。此外,还有静态方法用于处理字符串到整数的转换。测试类展示了如何使用这些方法进行实例化和测试。
摘要由CSDN通过智能技术生成

题干

设计一个名为MyInteger的类,这个类包含:

(1)  一个名为value的int型数据域,存储这个对象表示的int值。

(2) 一个带一个整型参数的构造方法。

(3)  数据域value的get()方法。

(4)  如果值分别为偶数、奇数或素数,那么isEven()、isOdd()和isPrime()方法都会返回true,否则返回false。

(5)  如果指定值分别为偶数、奇数或素数,那么静态方法isEven(int)、isOdd(int)和isPrime(int)方法都会返回true,否则返回false。

(6) 静态方法parseInt(String)将字符串转换为一个int值。

【试题输入输出】

请使用下列给出的测试类,对最终类MyInteger进行测试:

import java.util.Scanner;

public class TestMyInteger {

  public static void main(String[] a){

    Scanner input = new Scanner(System.in);

    int value = input.nextInt();

    String str= input.next(); 

    MyInteger myInteger=new MyInteger(value);

    System.out.println();

    System.out.println(myInteger.getValue()+"为奇数----> "+myInteger.isOdd());

    System.out.println(myInteger.getValue()+"为偶数----> "+myInteger.isEven());

    System.out.println(myInteger.getValue()+"为素数----> "+myInteger.isPrime());

    System.out.println();

    value = MyInteger.parseInt(str);

    System.out.println(value+"为奇数----> "+MyInteger.isOdd(value));

    System.out.println(value+"为偶数----> "+MyInteger.isEven(value));

    System.out.println(value+"为素数----> "+MyInteger.isPrime(value));

  }

 }

代码

import java.util.Scanner;

public class TestMyInteger {

  public static void main(String[] a){

    Scanner input = new Scanner(System.in);

    int value = input.nextInt();

    String str= input.next(); 

    MyInteger myInteger=new MyInteger(value);

    System.out.println();

    System.out.println(myInteger.getValue()+"为奇数----> "+myInteger.isOdd());

    System.out.println(myInteger.getValue()+"为偶数----> "+myInteger.isEven());

    System.out.println(myInteger.getValue()+"为素数----> "+myInteger.isPrime());

    System.out.println();

    value = MyInteger.parseInt(str);

    System.out.println(value+"为奇数----> "+MyInteger.isOdd(value));

    System.out.println(value+"为偶数----> "+MyInteger.isEven(value));

    System.out.println(value+"为素数----> "+MyInteger.isPrime(value));

  }

 }
class MyInteger{
	int value=1;
	MyInteger(int newValue){
		value=newValue;
	}
	int getValue(){
		return value;
	}
	boolean isOdd(){
		if(value%2==1){
			return true;
		}
		else return false;
		
	}
	boolean isEven(){
		if(value%2==0){
			return true;
		}
		else return false;
		
	}
	boolean isPrime(){
		if(value<=1){
			return false;
		}
		for(int i=2;i<=Math.sqrt(value);i++){
			if(value % i == 0){
				return false;
			}
		}
		 return true;
	}
	static boolean isOdd(int value){
		if(value%2==1){
			return true;
		}
		else return false;
		
	}
	static boolean isEven(int value){
		if(value%2==0){
			return true;
		}
		else return false;
		
	}
	static boolean isPrime(int value){
		if(value<=1){
			return false;
		}
		for(int i=2;i<=Math.sqrt(value);i++){
			if(value % i == 0){
				return false;
			}
		}
		 return true;
	}
	static int parseInt(String s){
		return Integer.parseInt(s);
	}
}

总结

一、

  1. 非静态方法(如 isEven()isOdd()isPrime():

    • 这些方法通常与类的实例(对象)相关联。
    • 它们可以访问类的实例变量(如果有的话)。
    • 它们通常需要通过类的实例来调用,例如 someObject.isEven
    • 在没有显式创建类的实例的情况下,不能直接调用这些方法。
  2. 静态方法(如 isEven(int)isOdd(int)isPrime(int):

    • 这些方法与类本身相关联,而不是与类的实例相关联。
    • 它们不能访问类的非静态变量(除非通过类的实例或另一个静态方法)。
    • 它们可以直接通过类名来调用,而不需要创建类的实例,例如 ClassName.isEven
  1. 语义和用途:静态方法通常用于执行与特定对象状态无关的操作。在这种情况下,检查一个数字是偶数、奇数还是素数并不依赖于任何特定的对象状态,因此使用静态方法是合适的。
  2. 代码组织和可重用性:静态方法可以在没有创建对象的情况下被调用,这使得它们在某些情况下更加灵活和可重用。例如,如果你只是想快速检查一个数字是否是素数,而不需要创建与数字相关的对象,那么使用静态方法会更方便。
  3. 面向对象编程的原则:虽然在这个特定的例子中,静态方法和非静态方法之间的区别可能不太明显,但在更复杂的场景中,面向对象编程的原则(如封装、继承和多态性)通常会使非静态方法成为更好的选择。然而,在这个简单的例子中,静态方法已经足够了。

二、

静态方法parseInt(String)将字符串转换为一个int值。

static int parseInt(String s) { return Integer.parseInt(s); }

return Integer.parseInt(s); }

直接递归调用:如果 MyInteger.parseInt(s) 方法内部又调用了原始的 parseInt(String s) 方法(而不是 Integer.parseInt(s)),那么这将形成一个无限递归,最终导致栈溢出错误(StackOverflowError

一定不可以调用自己!!!

定义一个名为 parseInt 的静态方法,它接受一个 String 类型的参数 s,并返回该字符串参数转换成的 int 类型整数值。但需要注意的是,这个 parseInt 方法并没有任何自定义的逻辑,它实际上是直接调用了 Integer 类中的 parseInt 方法。

这里是代码的详细解释:

  1. 方法签名
    • static: 表明这是一个静态方法,这意味着你可以在不需要创建类实例的情况下调用它。例如,你可以直接使用 YourClassName.parseInt(someString); 的方式来调用它。
    • int: 这是方法的返回类型,表示该方法将返回一个整数。
    • parseInt: 这是方法的名称。
    • (String s): 这是方法的参数列表,它接受一个类型为 String 的参数,并命名为 s
  2. 方法体
    • return Integer.parseInt(s);: 这一行代码调用了 Integer 类中的 parseInt 方法,并将传入的字符串 s 作为参数。Integer.parseInt(s) 方法会尝试将字符串 s 解析(或转换)为一个整数,并返回该整数的值。如果字符串 s 无法被解析为一个有效的整数(例如,它包含非数字字符),那么 Integer.parseInt(s) 将抛出一个 NumberFormatException 异常。
  3. 注意事项
    • 在实际使用时,你应当确保传递给 parseInt 方法的字符串可以被成功地解析为一个整数,否则你的程序将会抛出 NumberFormatException 异常并可能中断执行。
    • 如果你不确定字符串是否可以成功解析为整数,你可以在调用 parseInt 方法之前使用 try-catch 语句来捕获并处理可能发生的 NumberFormatException 异常。

总结来说,这个 parseInt 方法是一个简单的封装,它直接调用了 Integer 类中的 parseInt 方法来将字符串解析为整数。在实际开发中,你可能不会直接写这样的封装方法,除非你需要在你的类中添加一些额外的逻辑或功能。

  • 16
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值