这个简短的答案是“不”。其他人已经解释了原因......但这里有两种可能的选择。我不知道您是否已经学习了这些概念,但是第一个替代方案与按引用传递与按值传递有关,第二个替代方案与面向对象编程有关。
替代方案#1:
您可以在方法外部声明一个变量,将其传递给方法并使用它,然后该变量在方法外部可用,因为它是在方法外部声明的。我认为一个例子将有助于更清楚地说明这一点:
void foo () {
Integer a = 1;
Integer b = 2;
bar(a,b);
System.out.println("a = " + a + ", b = " + b);
}
void bar (Integer a, Integer b) {
a = 4;
b = 8;
}
结果应该是a = 4, b = 8
。然而,它是很重要需要注意的是,这是有效的,因为Integer
(不像int
) 是一个类,因此它的对象是通过引用传递的。如果a
and b
只是int
s,那么它们将按值传递。这意味着bar()
会有它自己的副本a
and b
从.....分离foo()
的,以及对其中变量的修改bar()
不会影响foo()
的副本。例如:
void foo () {
int a = 1;
int b = 2;
bar(a,b);
System.out.println("a = " + a + ", b = " + b);
}
void bar (int a, int b) {
a = 4;
b = 8;
}
这会产生结果a = 1, b = 2
.
我不太喜欢这种方法,因为它很丑陋而且很容易出错,但它is可能并且如果操作正确的话将会起作用。另外,如果您不执行面向对象的代码,您的选择可能是这样,或者只是不使用该部分的函数(这通常不是好的设计)。虽然这种事情在C、C++这样的语言中更为常见。但是这些语言对于按值或引用传递更加明确,并且您必须手动操作指针(而 Java 对程序员隐藏其指针),因此很难对何时按值或引用传递某些内容感到困惑(尽管更容易)犯其他类型的错误)。
替代方案#2:
如果可以选择,这将是我的偏好,但前提是您已经了解了一些有关面向对象编程的知识。如果您还没有了解这一点,我会采用另一种方法(但如果您好奇,请随意阅读)。
我将创建一个分数类,其中包含分子和分母的成员变量(如果需要支持的话,还有整数部分 - 尽管我个人无论如何都会将带有整数部分的分数减少为分子和分母,因为这就是如何我做数学)。然后我会创建一个带有 String 参数的构造函数,并且该构造函数的主体将像您的一样工作parse()
方法。所以这会让你做这样的事情......
String strFractionString = /* initialize the string, e.g., reading from input */
Fraction myFrac = new Fraction(strFractionString); // parses string and assigns num & denom
System.out.println("My Fraction: " + myFrac.numerator + "/" + myFrac.denominator);