不确定为什么整数 lowRange 和 highRange 不在这些类之间。
package guessnumber;
public class GuessNumber
{
static public int computerGenedNumber;
static public int lowRange;
static public int highRange;
static public int playerGuess;
public static void main(String[] args)
{
Input.range(lowRange, highRange);
Rand.number(lowRange, highRange, computerGenedNumber);
Input.guess();
Give.result();
}
}
下一个类:
package guessnumber;
import javax.swing.JOptionPane;
class Input
{
public static void range(int lowRange, int highRange)
{
String rawUserInput;
rawUserInput = JOptionPane.showInputDialog("Please enter the range you wish to guess. (EX: 1-10)", "1-10");
for(int i = 0; i < rawUserInput.length(); i++)
{
if(rawUserInput.charAt(i) == '-')
{
lowRange = Integer.parseInt(rawUserInput.substring(0, i));
highRange = Integer.parseInt(rawUserInput.substring(i + 1, rawUserInput.length()));
}
}
}
static void guess()
{
}
}
最后一个相关的:
package guessnumber;
class Rand
{
static public void number(int lowRange, int highRange, int computerGenedNumber)
{
computerGenedNumber = (int)(Math.random() * (highRange - lowRange) + lowRange);
}
}
其余的类目前是空白的,所以我认为我不需要将它们也放在这里。
最佳答案
这是一段简化的代码,可以重现您的问题,并确保您了解它导致问题的原因以及解决方案:
class Foo {
public static void square(int a, int result) {
result = a*a;
}
}
class Bar {
public static void main(String[] args) {
int a=2;
int result = 0;
Foo.square(a, result);
System.out.println("result " + result);
}
}
这应该是对Java的基本理解。查看“按值传递”的含义是什么
简单来说,方法中传递的参数是实参的副本。因此,当您更改方法中的参数时,您只是更改了另一条数据,并且您的更改不会反射(reflect)给调用者。
解决方法之一是更改方法并返回结果,如下所示:
class Foo {
public static int square(int a) {
return a*a;
}
}
class Bar {
public static void main(String[] args) {
int a=2;
int result = 0;
result = Foo.square(a);
System.out.println("result " + result);
}
}
另一个常见的解决方案是传入一个“持有者对象”作为结果。尽管对象引用是按值传递的,但对象引用的副本仍然指向与调用者相同的对象。我不会太深入地讨论这一点,因为它不太常见,一旦您更好地理解了值(包括对象引用)的传递方式,您应该能够找到正确的方法。
关于java - 方法无法修改输入 int 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21104380/