2016-04-17 163 views
0

我是一个初学者程序员,并没有完全理解方法及其功能。我试图做一个做石头剪刀的程序,程序随机选择一个,然后询问用户输入。我遇到麻烦的是这种方法。我的代码在下面,我得到的错误是我无法返回值为一个void方法,但我不知道我能做些什么来使它工作。任何建议,将不胜感激!返回类型void /方法的替代?

public class RPS { 

    public static void main (String[] args) { 

    String[] list = {"rock", "paper", "scissors"}; 

    Random rand = new Random(); 
     int x = rand.nextInt(); 

     switch (x) { 
      case 0: return list[0]; 
      case 1: return list[1]; 
      case 2: return list[2]; 
     } 
+2

你为什么认为返回一些东西能解决你的问题?问问自己:你想做什么?你想随机选择一个数组中的元素。所以寻找那个。 – Tunaki

回答

1

return用于从return所在的方法返回。

在这种情况下,我想你想将选定的值存储到某个地方并稍后以相同的方法使用它。

试试这个:

import java.util.Random; 
public class RPS { 

    public static void main (String[] args) { 

    String[] list = {"rock", "paper", "scissors"}; 

    Random rand = new Random(); 
    int x = rand.nextInt(); 

    String hand = null; 
    if (0 <= x && x <= 2) hand = list[x]; 
    // do something using hand 
    System.out.println(hand); 
    } 
} 

此代码将消除错误,但是这个代码具有打印null的一个很大的机会,是不是一个很好的代码。

如果你想使用return,你可以用另一种方法。

import java.util.Random; 
public class RPS { 

    public static void main (String[] args) { 

    String hand = selectHand(); 
    // do something using hand 
    System.out.println(hand); 
    } 

    private static String selectHand() { 
    String[] list = {"rock", "paper", "scissors"}; 

    Random rand = new Random(); 
    int x = rand.nextInt(); 

    switch (x) { 
     case 0: return list[0]; 
     case 1: return list[1]; 
     case 2: return list[2]; 
    } 
    return null; // you must return something everytime from non-void method 
    } 
} 
+0

这将几乎总是返回null。最好使用'return list [random.nextInt(3)];'。 –

+0

@AndyTurner应该很好地保留'x'的值,这对判断游戏应该是有用的。我同意你在'selectHand()'中使用,它只返回字符串。 – MikeCAT

+0

很好,但是你需要解决的事实是,你应该期望在每40亿次调用中大约3次选择一个有效的数组索引。 –

1

你可以试试这个:

public class RPS { 

    public static void main (String[] args) { 

    String[] list = {"rock", "paper", "scissors"}; 

    Random rand = new Random(); 
    int x = rand.nextInt(); 

    System.out.println(list[x%list.length]);  
    } 

关于你的问题:rand.nextInt()将最有可能返回一个值大于3(=您的数组的大小)。请注意,对于长度数组,只有0,1,...,n-1是有效索引。

+0

请注意,3(List的大小)也是一个无效索引。 – MikeCAT

+0

@MikeCAT:谢谢你的评论。我已经调整了我的答案。 –