我已经制作了3个随机数字来自它们。我不知道为什么我的颜色输出nullnullnull,而不是任何顺序的B,R或G.感谢任何帮助。我只允许使用方法,随机数,if语句和字符串。 我的代码:
public static void main(String[] args) {
// TODO code application logic here
randomWholeNumber(colour,colour2,colour3);
newGame(colour,colour2,colour3);
}
static void randomWholeNumber(String colour,String colour2,String colour3){
int randnum=(int)(Math.random()*3);
if(randnum==0){
}
else if(randnum==1){
}
else if(randnum==2){
int randnum2=(int)(Math.random()*3);
if(randnum2==0){
}
else if(randnum2==1){
}
else if(randnum2==2){
int randnum3=(int)(Math.random()*3);
if(randnum3==0){
}
else if(randnum3==1){
}
else if(randnum3==2){
}
}
}
}
static void newGame(String colour,String colour2,String colour3){
System.out.println(colour+colour2+colour3);
}
答案 0 :(得分:2)
Java是按值传递的。这意味着您传入的值可以编辑但不能替换。由于String
无法用Java编辑(不可变),因此存在问题。
randomWholeNumber(String colour, String colour2, String colour3)
colour1
,colour2
& colour3
是你的价值观。传递给方法的是这些对象在内存中的值(地址)的副本,如果将它们设置为新对象,例如colour="B";
,则会创建一个新对象,并且您正在使用的值在您的方法中将with设置为内存中新对象的值(地址)。这意味着原始对象引用在方法中丢失,并且您正在处理新对象。
这意味着当您从方法返回时,您返回的原始引用没有更改,因为您更改了创建的新引用,并且在退出方法时丢失了它们。
获取所需行为的步骤
为了能够使其正常工作,您需要创建自己的MyColour
类,其中包含三个String
。将其传递给方法并在其中设置三个String
。这样,您传入的对象的地址不会丢失,您可以对其进行更改,只要您不在方法内创建并替换它。
另一种选择是从方法中返回'R','G'或'B',并通过调用方法将其分配给字符串。
答案 1 :(得分:1)
在java中,可以读取参数(通过值传递),但不能写入。使用函数的结果返回一些东西。
请参阅this answer以获取示例
答案 2 :(得分:0)
在Java中 - 与C ++等其他语言不同 - 颜色的值会传递到您的方法中,而不是引用。这就是为什么在你的代码中打印它们时颜色仍为null;原始变量没有被触及。
您应该重写方法,以便返回新值。这将与您的代码兼容:
String[] colours = randomWholeNumber();
System.out.println(colours[0] + colours[1] + colours[2]);
}
static String[] randomWholeNumber(){
String colour, colour2, colour3 = null;
// Same code like before
// Put the colours into a string array
return { colour, colour2, colour3 };
}