代码有一些问题。首先,您看到的输出
toString()是在
Object类(所有类(包括
GetFractions最终从中派生))中找到的默认实现的产物。重写此方法以返回实例的字符串表示形式:
@Overridepublic String toString() { return ...}public static void main(String[] args) { ... System.out.println("..." + newFracNum1 + "...");}
或者代替传递实例以
System.out.println()传递成员访问方法调用的结果(此类方法称为getter):
public double getSomevalue() { return ...}public static void main(String[] args) { ... System.out.println("..." + newFracNum1.getSomevalue() + "...");}
注意,
double其他基本类型将自动转换为字符串。
其次,您的静态
GetFractions()方法修改了无效的参数(由于按值传递,因此没人会看到更改)。该方法应该修改现有实例的同名实例变量,然后不应该是静态的,或者应该是一种工厂方法,该方法根据用户提供的数据创建新实例,在这种情况下,它将值传递给构造函数或者它应该是构造函数本身。无论哪种方式,您都不想修改方法的参数。这是三种解决方案的概述:
从输入流中读取数据的非静态方法:
public void fromStream(InputStream inStream) { // Read data from inStream into instance variables fracNum1, fracDenom1,...}
静态工厂方法:
public static GetFractions fromStream(InputStream inStream) { int fracNum1,... ; // Read data from inStream into local variables fracNume1, ... return new GetFractions(fracNum1, ...);}
构造函数:
public GetFractions(InputStream inStream) { // Read data from inStream to initialize instance variables fracNum1, fracDenom1,...}
还请注意,将an传递
InputStream给所有这些方法比硬编码具有更大的灵活性
System.in。
第三,您应该重新考虑您的命名约定。虽然可能的是,与类相同的静态方法的调用通常是一种不好的做法。此外,建议使用名词表达式调用类和对象,并使用动词表达式调用方法。这有助于设计您的类并使代码更具可读性。
GetFractions更适合作为方法的名称而不是类。
Fractions将使一个更好的类名。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)