2016-04-17 3 views
0

Я начинающий программист и не полностью понимаю методы и то, как они функционируют. Я пытаюсь сделать программу, которая делает ручные ножницы для бумаги, и программа выбирает один случайным образом, а затем запрашивает у пользователя ввод. У меня проблемы с методом. Мой код ниже, и ошибка, которую я получаю, заключается в том, что я не могу вернуть значения для метода void, но я не знаю, что еще я могу сделать, чтобы заставить его работать. Мы ценим любые предложения!Тип возвращаемого типа void/method?

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

отлично, но вам нужно обратить внимание на то, что вы должны ожидать, чтобы выбрать действительный индекс массива примерно в 3 раза каждые 4 миллиарда вызовов. –

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: Спасибо за ваше замечание. Я скорректировал свой ответ. –

Смежные вопросы