不确定为什么整数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);
}
}
其他课程目前都是空白的,所以我不认为我也需要把它们放在这里。
答案 0 :(得分:1)
这是一段简化的代码,它可以重现您的问题,并确保您了解它导致问题的原因和解决方案:
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的基本理解。查看“按值传递”的含义
简而言之,方法中传递的参数是参数的副本。因此,当您更改方法中的参数时,您只是更改另一个数据,并且您的更改不会反映给调用者。
一种解决方法是更改方法并返回结果,如下所示:
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);
}
}
另一种常见的解决方案是传递“持有者对象”作为结果。虽然对象引用是按值传递的,但对象引用的副本仍然指向与调用者相同的对象。我不会对此深入研究,因为它不太常见,一旦你更好地了解了价值(包括对象参考)的传递方式,你应该能够做到这一点。
答案 1 :(得分:0)
参数在Java中“按值”传递。这意味着当你打电话时
input.range(lowRange, highRange);
它将这些变量的当前值提供给input.range
,但它没有给input.range
提供修改它们的方法。在range
方法中:
public static void range(int lowRange, int highRange)
参数lowRange
和highRange
(与GuessNumber
中的变量没有关联,即使名称相同)也是副本的内容您传入。当您在方法中指定lowRange = ...
时,它会更改副本,但对lowRange
中的highRange
和GuessNumber
完全没有影响。
您需要编写返回两个值的range
方法。这需要一些工作,但我会写一个Range
类,其中包含low
和high
成员,然后将您的方法更改为
public static Range range()
该方法必须创建一个新的Range
对象。我认为low
和high
成为Range
的公开成员是可以的:
class Range {
public int low;
public int high;
public Range(int low, int high) {
this.low = low;
this.high = high;
}
}
通常,类中的公共数据是一件坏事,但对于一个只允许方法返回多个值的类,我认为是可以的。