代码:
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方法有错误。我不知道这意味着什么我需要返回一些东西,但它不会返回,我得到了这个奇怪的错误。
我无法解决这个问题,我已经遍布整个堆栈。 感谢能帮助我解决此错误的任何人。
答案 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
,则必须提供一个void
。
return 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;
}
}