好吧,我的东西不输出

时间:2013-12-23 14:56:03

标签: java if-statement methods

我已经制作了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);
    }

3 个答案:

答案 0 :(得分:2)

Java是按值传递的。这意味着您传入的值可以编辑但不能替换。由于String无法用Java编辑(不可变),因此存在问题。

randomWholeNumber(String colour, String colour2, String colour3)

colour1colour2& 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 };
}