java - 方法无法修改输入 int 参数

标签 java class methods

不确定为什么整数 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/

相关文章:

java - 套接字 ObjectOutpuStream ObjectInputStream

matlab - 将元素添加到 matlab 元胞数组成员变量

java - 我可以在一行 foreach 循环中执行两种方法吗?

c# - 字节序、语言、硬件和网络

java mapstruct 1.3.1 忽略双向 DTO 映射列表中的属性

与 Spring DI 一起使用的 Java Static Final 替代方案

java - 方法可以返回一个布局吗

c++ - 如何解决字段 'classname'有不完整的类型错误

class - 如何使用本地异常类?

python - 在 Python 中,如何找到列表中第一项不是某个值的索引?