/ / Javaの例外と事後条件-Java、クラス、例外、リターン、コンピュータサイエンス

Javaの例外と事後条件 - Java、クラス、例外、リターン、コンピュータ科学

どの例外が発生しますか、どの例外が発生しますか?

//前提条件:aはnullではない

public String sampleClass(ArrayList<String> a, int b) {
String t;
int u;
for (u = 0; u <= a.size(); u++) {
t = (String)(a.get(u));
if (t.length() == b) {
return t;
}
}
return null;
}
  • A)NullPointerException
  • B)IndexOutOfBoundsException
  • C)ClassCastException

私が選択した答え: テスターでプログラムを実行し、Bを取得しました。Bが答えだと思います。

回答:

回答№1は1

doSomethingの呼び出し方法がわからない場合、質問は意味がありません。状況に応じて、これらの例外のほとんどを取得できます。

場合によっては、例外が発生しないことがあります。次に例を示します。

ArrayList<String> a = new ArrayList<>();
a.add("");
doSomething(a,0);

次のコードはNullPointerExceptionをスローします。

ArrayList<String> a = new ArrayList<>();
a.add(null);
doSomething(a,0);

これはIndexOutOfBoundExceptionをスローします。

doSomething(new ArrayList<>(),0)

最後に、次のようなClassCastExceptionが発生します。

ArrayList a = new ArrayList();
a.add(new Object());
doSomething(a,0);

DもEも可能ではありません(Dは、配列を使用し、コードに例外をスローする可能性のある特定の算術演算が含まれていない場合にのみ発生します)。


回答№2の場合は0

以下は、A、B、Cを示し、例外が発生していないことを示す完全に実行可能な例です。

ArrayListに何が含まれるかを説明しないと、質問に完全に答える方法はありません。

public class Test {
public static void main(final String... args) {
try {
Test.throwNullPointer();
} catch (final Throwable e) {
System.out.println(e);
}

try {
Test.throwIndexOutOfBoundsException();
} catch (final Throwable e) {
System.out.println(e);
}

try {
Test.throwClassCastException();
} catch (final Throwable e) {
System.out.println(e);
}

try {
Test.noException();
System.out.println("No Exception");
} catch (final Throwable e) {
System.out.println(e);
}
}

public static void throwNullPointer() {
final ArrayList<String> a = new ArrayList<>();
a.add("a");
a.add(null);
a.add("c");
Test.doSomething(a, 0);
}

public static void throwIndexOutOfBoundsException() {
final ArrayList<String> a = new ArrayList<>();
a.add("a");
a.add("b");
a.add("c");
Test.doSomething(a, 0);
}

public static void throwClassCastException() {
final ArrayList<String> a = new ArrayList<>();
Test.doNaughtyStuff(a);
Test.doSomething(a, 0);
}

private static void doNaughtyStuff(final ArrayList a) {
a.add(new Object());
}

public static void noException() {
final ArrayList<String> a = new ArrayList<>();
a.add("");
Test.doSomething(a, 0);
}

public static String doSomething(final ArrayList<String> a, final int b) {
String t;
int u;
for (u = 0; u <= a.size(); u++) {
t = a.get(u);
if (t.length() == b) {
return t;
}
}
return null;
}
}

出力:

java.lang.NullPointerException
java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
java.lang.ClassCastException: java.lang.Object cannot be cast to java.lang.String
No Exception