2016-04-17 29 views
0

私は初心者のプログラマーであり、メソッドやメソッドの機能を完全には理解していません。私はロックペーパーのハサミを行うプログラムを作ろうとしており、プログラムはランダムに1つを選択して、ユーザーに入力を求めます。私が問題を抱えているのは方法です。私のコードは以下の通りですが、私が得ているエラーは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

returnreturnをする方法から戻るためのものです。

この場合、選択した値をどこかに保存し、後で同じ方法で使用したいと思います。

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(リストのサイズ)も無効なインデックスです。 – MikeCAT

+0

@MikeCAT:ありがとうございます。私は自分の答えを調整しました。 –

関連する問題