题干
设计一个名为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);
}
}
总结
一、
-
非静态方法(如
isEven()
,isOdd()
,isPrime()
):- 这些方法通常与类的实例(对象)相关联。
- 它们可以访问类的实例变量(如果有的话)。
- 它们通常需要通过类的实例来调用,例如
someObject.isEven
。 - 在没有显式创建类的实例的情况下,不能直接调用这些方法。
-
静态方法(如
isEven(int)
,isOdd(int)
,isPrime(int)
):- 这些方法与类本身相关联,而不是与类的实例相关联。
- 它们不能访问类的非静态变量(除非通过类的实例或另一个静态方法)。
- 它们可以直接通过类名来调用,而不需要创建类的实例,例如
ClassName.isEven
。
- 语义和用途:静态方法通常用于执行与特定对象状态无关的操作。在这种情况下,检查一个数字是偶数、奇数还是素数并不依赖于任何特定的对象状态,因此使用静态方法是合适的。
- 代码组织和可重用性:静态方法可以在没有创建对象的情况下被调用,这使得它们在某些情况下更加灵活和可重用。例如,如果你只是想快速检查一个数字是否是素数,而不需要创建与数字相关的对象,那么使用静态方法会更方便。
- 面向对象编程的原则:虽然在这个特定的例子中,静态方法和非静态方法之间的区别可能不太明显,但在更复杂的场景中,面向对象编程的原则(如封装、继承和多态性)通常会使非静态方法成为更好的选择。然而,在这个简单的例子中,静态方法已经足够了。
二、
静态方法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
方法。
这里是代码的详细解释:
- 方法签名:
static
: 表明这是一个静态方法,这意味着你可以在不需要创建类实例的情况下调用它。例如,你可以直接使用YourClassName.parseInt(someString);
的方式来调用它。int
: 这是方法的返回类型,表示该方法将返回一个整数。parseInt
: 这是方法的名称。(String s)
: 这是方法的参数列表,它接受一个类型为String
的参数,并命名为s
。
- 方法体:
return Integer.parseInt(s);
: 这一行代码调用了Integer
类中的parseInt
方法,并将传入的字符串s
作为参数。Integer.parseInt(s)
方法会尝试将字符串s
解析(或转换)为一个整数,并返回该整数的值。如果字符串s
无法被解析为一个有效的整数(例如,它包含非数字字符),那么Integer.parseInt(s)
将抛出一个NumberFormatException
异常。
- 注意事项:
- 在实际使用时,你应当确保传递给
parseInt
方法的字符串可以被成功地解析为一个整数,否则你的程序将会抛出NumberFormatException
异常并可能中断执行。 - 如果你不确定字符串是否可以成功解析为整数,你可以在调用
parseInt
方法之前使用try-catch
语句来捕获并处理可能发生的NumberFormatException
异常。
- 在实际使用时,你应当确保传递给
总结来说,这个 parseInt
方法是一个简单的封装,它直接调用了 Integer
类中的 parseInt
方法来将字符串解析为整数。在实际开发中,你可能不会直接写这样的封装方法,除非你需要在你的类中添加一些额外的逻辑或功能。