2017-05-24 10 views
2
public int front(){ 
if(queue.empty()){ 
    while(!stack.empty()){ 
    queue.push(stack.pop()); 
    } 
} 
try{ 
    return queue.peek(); 
}catch(Exception e){ 
    System.out.println("Empty"); 
} 
// What to do here?!!! 
} 

queueは2 stacksを使用して実装しています。 queueのフロントエレメントを返す関数ですが、queueemptyであり、exceptionでなければなりません。しかし、returnステートメントがtryブロックの外側になければならず、混乱して何をすべきか分からない関数が例外を発生させた場合に値を返さないようにするにはどうすればよいですか?

答えて

3

ここで何をしますか?

例外をスローすることはできない場合は、front()が空のキューに呼び出されたときにあなたができることはほとんどあります:それはプログラミングエラーですので、アクションの適切なコースは、それを示すためにIllegalStateExceptionを投げることです。あなたがint値を確保し、キューが空のときにそれを返すことができ、またはあなたがIntegerに戻り値の型を変更し、nullを返すことができ、または:

try{ 
    return queue.peek(); 
}catch(Exception e){ 
    System.out.println("Empty"); 
    throw new IllegalStateException("Empty"); 
} 
// return statement is no longer required here 

他のすべてのオプションは、API設計の観点から、悪化しています戻り値の型をintbooleanのペアに変更することができます。booleanは、読み込みが成功したかどうかを示します。ただし、チェックされていない例外をスローする方が適切です。フロント・エレメントを要求する前にキューが空であるかどうかをチェックする必要があるからです。

あなたのコメントがどこにあるかあなたが何もしないと思いますが、あなたは catchブロック(あなたの呼び出し側が結果を使用しようとする前に nullの戻り値をチェックすることを確認すること)で nullを返すのいずれか、またはあなたが例外をスローする可能性
+0

の行に何かを例外をスローでしょうか? –

+0

@lord_ozb intとbooleanプロパティを持つクラスを作成します。 'QueueFrontStatus'を返し、' int'の代わりにそれを返します。 – dasblinkenlight

+0

ありがとうございます。チェックされていない例外をスローすることに固執する:) –

0

整数型オブジェクトを返し、呼び出しコードをチェックして戻り値がnullかどうかを調べることができます。その方法は、それがnullの場合、あなたはそれが空であると仮定することができます。あなたができる

もう一つは、呼び出し元のコードが例外を処理し、フロントを持っていている()メソッドは、そのような例外をスロー:

public int front() throws Exception { 
    if(queue.empty()){ 
     while(!stack.empty()){ 
      queue.push(stack.pop()); 
     } 
    } 
    return queue.peek(); 
} 

これは、どちらかの方法で(フロントを呼び出すことを意味します)処理する必要があります例外。

1

私は、私がペアを返すことができますどのように

public int front(){ 
    //..code 
    if(queue.isEmpty()) //or whatever the condition for exception is 
     throw new Exception(); //or whatever exception 
    else 
     return queue.peek(); //return value if exception does not occur 
} 
関連する問題