gpt4 book ai didi

java - java中如何返回方法的结果?

转载 作者:行者123 更新时间:2023-12-01 07:33:58 26 4
gpt4 key购买 nike

这是我关于多个 catch block 的问题的后续内容 How to deal with returning an object and handling errors

我更新的代码如下,但是我收到一个错误,我的draw()方法必须返回一个int,有什么方法可以让编译器识别endOfDeck()将返回一个int,从而满足返回要求? (参见“返回 endOfDeck())

有什么更聪明的方法来实现这一点吗?

import java.util.ArrayList;
import java.util.ListIterator;
/**
* @author L
*
*/
public abstract class Deck
{

private ArrayList<Card> cards;
private ListIterator<Card> deckPosition = cards.listIterator();
private Card lastDrawn;
/**
*
*/
public Deck()
{
}

public int draw()
{

try
{
if(deckPosition.hasNext())
{
lastDrawn = deckPosition.next();
return 1;
}
else if(cards.isEmpty())
{
throw new EmptyDeckException();
}
else
{
throw new EndOfDeckException();
}
}

catch(EmptyDeckException e)
{
emptyDeck();
return 0;
}
catch(EndOfDeckException e)
{
return endOfDeck();

}
catch(Exception e)
{
System.out.println("Exception when drawing a card, check try/catch block in draw() method of Card");
e.printStackTrace();
}

}

public abstract int endOfDeck();
public abstract void emptyDeck();

}

最佳答案

您的最后一个 catch block 没有任何 return 语句:-

catch(Exception e)
{
System.out.println("Exception when drawing a card, check try/catch block in draw() method of Card");
e.printStackTrace();
}

因此,如果执行该 catch block ,您的方法将不会返回任何值。也许您可以返回表示异常的任何整数,或者将异常包装在 RuntimeException 中并重新抛出它。

<小时/>

但是,您的代码似乎有些问题。您不必要地抛出异常。无论您在 catch block 中做什么,都可以直接在 if-else block 中执行。

因此,您可以将代码修改为:-

    try {
if(deckPosition.hasNext())
{
lastDrawn = deckPosition.next();
return 1;
}
else if(cards.isEmpty())
{
emptyDeck();
return 0;
}
else
{
// throw new EndOfDeckException(); // Don't throw it
return endOfDeck();
}

} catch(Exception e) {
/** Also, if possible, replace this catch block with the one catching
more specific exception than all the `Exceptions` **/
System.out.println("Exception when drawing a card, check try/catch block in draw() method of Card");
throw new RuntimeException("Exception drawing a card");
}

关于java - java中如何返回方法的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14760586/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com