2015-06-11 2 views
1

Код:ОШИБКА: Этот метод должен возвращать результат типа междунар

import java.util.*; 

public class shuffleDeck 
{ 
    public static int shuffleDeck (int[] deck, int theNumber) 
    { 
     int [] array1 = new int [52]; 

     Random random = new Random(); 
     for (int i = deck.length, j, tmp; i > 1; i--) { 
      j = random.nextInt(i); 

      tmp = deck[i - 1]; 
      deck[i - 1] = deck[j]; 
      deck[j] = tmp; 
      return theNumber; 
     } 
    } 

    public static void main(String[] args) 
    { 
     int [] deck = new int [52]; 
     for(int i=0; i<52; i++) 
     { 
      deck[i]=i+1; 
     } 
     int count; 
     count=1; 
     int total=1; 
     shuffleDeck(deck, count); 
     System.out.println(); 
    } 
} 

Существует ошибка в методе shuffleDeck. Я не уверен, что это значит, мне нужно что-то вернуть, но он не вернется, и я получаю эту странную ошибку.

Я не смог решить эту проблему, я осмотрел весь стек. Спасибо, кто поможет мне исправить эту ошибку.

+1

имя класса и имя методы не могут быть такими же. Он становится конструктором. –

+0

Почему у вас есть цикл, если вы вернетесь из метода на первой итерации цикла? Почему у вас вообще есть какой-либо код, если вы просто возвращаете значение, которое вам дано, немодифицировано? И в этот момент ... Почему даже вернуть что-нибудь? Код вызова уже имеет это значение. – David

+0

Вы также возвращаете неизмененное значение аргумента 'theNumber', это намеренно? Это также несколько связано с вашей проблемой: 'theNumber' - это простой старый' int', а не 'int []', поэтому он несовместим с вашим объявленным типом возврата 'int []'. – JonK

ответ

1

изменение

public static int shuffleDeck (int[] deck, int theNumber) 

в

public static void shuffleDeck (int[] deck, int theNumber) 

если вы определяете return type вы должны поставить один. void определяет, что тип возврата не требуется. В этом случае удалить:

return theNumber; 

внутри метода shuffleDeck.

+0

'theNumber' вообще не изменен. Я считаю, что этого не хочет OP. изменение типа возврата на 'void' должно быть ответом. –

+0

да? Это мой ответ ... –

+0

Ответ перед редактированием был хорошим. –

0

Его, потому что вы объявили возвращаемый тип, как межды и вы дали обратные Постулаты внутри для цикла теперь подумайте, что произойдет, если ваш код не идет в течение цикла, чем не будет возврата заявления так,

так сделать ваш код, как

public static int shuffleDeck (int[] deck, int theNumber) 
    { 
int [] array1 = new int [52];  
    Random random = new Random(); 
    for (int i = deck.length, j, tmp; i > 1; i--) { 
     j = random.nextInt(i);  
     tmp = deck[i - 1]; 
     deck[i - 1] = deck[j]; 
     deck[j] = tmp; 
     return theNumber; 
    } 
    return 0; 
} 
0

верхний регистр название вашего класса различать класс и метод:

public class ShuffleDeck { 
... 

Может быть, это даже лучше переименовать метод:

public static int doTheShuffle(int[] deck, int theNumber) { 

Если вы хотите, чтобы функция возвращала что-то толковое поставить возвращение из цикла:

for (int i = deck.length, j, tmp; i > 1; i--) { 
    j = random.nextInt(i); 

    tmp = deck[i - 1]; 
    deck[i - 1] = deck[j]; 
    deck[j] = tmp; 
} 

return theNumber; 

Но все это будет только компилятор не жалуются на наличие синтаксических ошибок. У вашего алгоритма все еще есть ошибки.

2

В java, когда вы определяете метод, этот метод должен либо должен вернуть значение, либо должен быть объявлен с помощью ключевого слова void.

public static int shuffleDeck(int[] deck); 

означает, что вы собираетесь вернуть примитивное целое (INT) с использованием возвращения ключевых слов.

public static int shuffleDeck(int[] deck); 

означает, что вы не собираетесь вернуть то, что пустота используется здесь, чтобы заявить, что.

Наконец, я думаю, что это то, что вы пытаетесь выполнить, было несколько проблем с кодом, который вы предоставили, возможно, вы можете перейти к образцу ниже;

import java.util.Random; 

public class Test1 { 

    public static void shuffleDeck(int[] deck) { 
     int[] array1 = new int[52]; 

     Random random = new Random(); 
     for (int i = deck.length, j, tmp; i > 1; i--) { 
      j = random.nextInt(i); 

      tmp = deck[i - 1]; 
      deck[i - 1] = deck[j]; 
      deck[j] = tmp; 
     } 
    } 

    public static void main(String[] args) { 
     int[] deck = new int[52]; 
     for (int i = 0; i < deck.length; i++) { 
      deck[i] = i + 1; 
     } 

     System.out.println("Initial Ordered Deck"); 
     printDeck(deck); 

     int count; 
     count = 1; 
     int total = 1; 

     shuffleDeck(deck); 

     System.out.println("Shuffled Deck"); 
     printDeck(deck); 

    } 

    private static void printDeck(int[] deck) { 
     System.out.println("**************************************"); 

     for (int i = 0; i < deck.length; i++) { 
      if (i % 13 == 0 && i > 0) 
       System.out.println(); 

      System.out.printf("%2d ", deck[i]); 
     } 

     System.out.println("\n**************************************"); 
     System.out.println(); 
    } 

} 

И выход;

Initial Ordered Deck 
************************************** 
1 2 3 4 5 6 7 8 9 10 11 12 13 
14 15 16 17 18 19 20 21 22 23 24 25 26 
27 28 29 30 31 32 33 34 35 36 37 38 39 
40 41 42 43 44 45 46 47 48 49 50 51 52 
************************************** 

Shuffled Deck 
************************************** 
22 6 13 11 35 23 29 27 8 30 44 20 1 
31 34 28 47 5 46 17 51 38 3 19 36 18 
42 33 7 4 2 24 41 9 15 45 21 16 37 
14 48 43 49 32 12 40 39 26 50 52 10 25 
************************************** 
0

на основе основного метода, я полагаю, что то, что вы хотите, чтобы перетасовать колоду для данного count раз, для этого вам необходимо обновить метод следующим образом:

public static void shuffleDeck (int[] deck, int theNumber) 
{ 
    Random random = new Random(); 
    for (int k=0; k < theNumber; k++) { 
     for (int i = deck.length, j, tmp; i > 1; i--) { 
      j = random.nextInt(i); 

      tmp = deck[i - 1]; 
      deck[i - 1] = deck[j]; 
      deck[j] = tmp; 
     } 
    } 
} 

для возвращая количество раз, сколько раз вы на самом деле делали тасование, не имеет смысла ... на основе вашего ввода. Внутренний цикл, как размещена в https://stackoverflow.com/a/30757452/4234940 только сама перетасовка ... так что на самом деле я хотел бы изменить это так:

public static void shuffleDeck (int[] deck, int theNumber) 
{ 
    Random random = new Random(); 
    for (int k=0; k < theNumber; k++) { 
     shuffle(deck, random); 
    } 
} 

private static void shuffle(int[] array, Random random){ 
    for (int i = array.length, j, tmp; i > 1; i--) { 
     j = random.nextInt(i); 

     tmp = array[i - 1]; 
     array[i - 1] = array[j]; 
     array[j] = tmp; 
    } 
} 
Смежные вопросы