错误:此方法必须返回int

时间:2015-06-11 13:15:40

标签: java

代码:

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方法有错误。我不知道这意味着什么我需要返回一些东西,但它不会返回,我得到了这个奇怪的错误。

我无法解决这个问题,我已经遍布整个堆栈。 感谢能帮助我解决此错误的任何人。

5 个答案:

答案 0 :(得分:2)

在java上,当你定义一个方法时,该方法必须要么返回一个值,要么必须用void关键字声明。

public static int shuffleDeck(int[] deck);

表示您将使用 return 关键字返回原始整数( int

public static int shuffleDeck(int[] deck);

表示您不会返回某些内容,因此此处使用 void 来声明该内容。

最后,我认为这是您尝试完成的,您提供的代码存在一些问题,可能您可以查看下面的示例;

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 
**************************************

答案 1 :(得分:1)

变化

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

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

如果您定义return type,则必须提供一个voidreturn theNumber; 定义不需要返回类型。 在这种情况下,请删除:

shuffleDeck

table a, table b方法中。

答案 2 :(得分:0)

因为你已经将返回类型声明为int并且你已经在for循环中给出了返回语句,现在想想如果你的代码没有进入for循环会发生什么会比没有return语句那样,

所以让你的代码像

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

答案 3 :(得分: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;

但所有这些只会让编译器不会抱怨语法错误。 您的算法仍有错误

答案 4 :(得分: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;
    }
}