Java返回error_关于java:ERROR:此方法必须返回int类型的结果

码:

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方法出错。 我不确定我需要返回什么内容,但是它不会返回,这是我遇到的奇怪错误。

我无法解决这个问题,我遍及整个堆栈。

谢谢任何可以帮助我解决此错误的人。

类名和方法名不能相同。 它成为一个构造函数。

如果在循环的第一次迭代中从方法返回,为什么会有一个循环? 如果只返回您给定的值,而未修改,为什么还要有任何代码? 到那时候...为什么还要退货? 调用代码已经具有该值。

您还返回了theNumber参数的未更改值,这是故意的吗? 那也与您的问题有关:theNumber是普通的int,而不是int[],因此它与您声明的int[]返回类型不兼容。

请遵守Java命名约定(oracle.com/technetwork/java/codeconventions-135099.html)。 这样可以避免您的错误

在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("

**************************************");

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

**************************************

更改

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

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

如果定义return type,则必须提供一个。

void定义不需要返回类型。

在这种情况下,请删除:

return theNumber;

在shuffleDeck方法中。

theNumber完全不变。 我认为那不是OP想要的。 将返回类型更改为void应该是答案。

是? 那是我的答案

编辑好之前先回答。

我想基于您的主要方法,您想要的是在给定的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;

}

}

用大写的类名来区分类和方法:

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;

但这一切只会使编译器不会抱怨语法错误。您的算法仍然存在错误。

这是因为您已将return类型声明为int,并且在for循环中提供了return语句,现在想想如果您的代码不进入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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值