Java Bronze問題10選|初心者向けコード問題を解説

Java Bronzeの初心者向けコード問題10選を解説する記事のアイキャッチ画像

「Java Bronzeの問題を解いてみたい」

「参考書を読んだけど、本当に理解できているか不安」

「コードの実行結果を答える問題が苦手」

Java Bronzeを勉強していると、このように感じる人も多いと思います。

この記事を書いている私は、文系出身でエンジニアになり、Java Bronze・Silver・Goldを独学で取得しました。

Java Bronzeは入門資格ですが、用語を暗記するだけでは解きにくい問題があります。

特に注意したいのが、短いJavaコードを読んで実行結果を判断する問題です。

例えば、i++++i

見た目はほとんど同じですが、コードの書き方によって結果が変わります。

また、配列では「コンパイルできるから正解」とは限りません。実行すると例外が発生するコードもあります。

そこでこの記事では、Java Bronze対策として初心者が間違えやすいコード問題を10問紹介します。

まずは答えを見ずに、自分で実行結果を考えてみてください。

[swell_box color=”blue” title=”この記事で学べること”]
・int型同士の割り算
・i++と++iの違い
・文字列と+演算子
・if文の条件判定
・switch文の動き
・for文の実行回数
・breakとcontinueの違い
・配列の添字
・==とequalsの違い
・クラスとインスタンス
[/swell_box]

Java Bronzeの勉強を始めたばかりの方は、「Java Bronze勉強法ロードマップ【未経験から独学合格まで完全ガイド】」もあわせて参考にしてください。

目次

Java Bronzeの問題を解く前に知っておきたいこと

Java Bronzeのコード問題では、いきなり実行結果を予想するのではなく、次の順番でコードを確認するのがおすすめです。

[swell_box color=”yellow” title=”コード問題を解く4ステップ”]
① コンパイルできるコードか確認する
② 変数の型を確認する
③ 上から1行ずつ値の変化を追う
④ 実行時に例外が発生しないか確認する
[/swell_box]

特に初心者が間違えやすいのが、コンパイルエラーと実行時例外の違いです。

例えば、次のコードを見てください。

int[] numbers = {10, 20, 30};

System.out.println(numbers[3]);

このコードはコンパイルできます。

しかし、実行すると配列の範囲外へアクセスするため例外が発生します。

つまり、

「コンパイルできる」

「正常に実行できる」

は別です。

Java Bronzeの問題では、まずこの違いを意識しましょう。

Java SE Bronzeの試験概要や最新情報は、Oracle公式のJava SE Bronze試験ページでも確認できます。

問題1:int型同士の割り算

最初は、Java初心者が間違えやすい型と演算の問題です。

次のコードを実行すると、何が表示されるでしょうか。

public class Main {
    public static void main(String[] args) {

        int x = 10;
        int y = 3;

        System.out.println(x / y);
    }
}

A. 3

B. 3.0

C. 3.333333…

D. コンパイルエラー

正解:A. 3

xyは、どちらもint型です。

int x = 10;
int y = 3;

そのため、int型同士の割り算になります。

x / y

10÷3の数学的な答えは約3.333です。

しかし、intは整数型です。

そのため、小数部分は結果に残りません。

実行結果は次の通りです。

3

一方で、次のコードなら結果が変わります。

double x = 10;
double y = 3;

System.out.println(x / y);

double型を使っているため、小数を含む結果になります。

[swell_box color=”red” title=”Java Bronzeのひっかけ”]
int型同士の割り算では、結果も整数になります。

「10÷3だから3.333」と数学だけで判断しないようにしましょう。
[/swell_box]

問題2:i++と++iの違い

次のコードを実行すると、何が表示されるでしょうか。

public class Main {
    public static void main(String[] args) {

        int x = 1;
        int y = x++;

        System.out.println(x + ":" + y);
    }
}

A. 1:1

B. 1:2

C. 2:1

D. 2:2

正解:C. 2:1

この問題のポイントは、後置インクリメントです。

x++

後置インクリメントでは、現在の値を利用したあとに値が1増加します。

まず、

int y = x++;

で、現在のxの値である1yへ使われます。

そのあと、xが1増加します。

つまり、

x = 2
y = 1

です。

そのため、実行結果は次の通りです。

2:1

では、次のコードならどうでしょうか。

int x = 1;
int y = ++x;

今度は前置インクリメントです。

++xでは、先にxを増加させます。

そのあと、増加後の値を利用します。

したがって、

x = 2
y = 2

になります。

[swell_box color=”blue” title=”覚え方”]
x++ → 今の値を使ってから増やす

++x → 先に増やしてから値を使う
[/swell_box]

i++++iは、Java Bronze初心者が特に間違えやすいポイントです。

答えを暗記するのではなく、変数の値を1行ずつ追いましょう。

問題3:文字列の+演算子

次のコードを実行すると、何が表示されるでしょうか。

public class Main {
    public static void main(String[] args) {

        System.out.println(1 + 2 + "3");
    }
}

A. 123

B. 33

C. 6

D. コンパイルエラー

正解:B. 33

Javaの+演算子は、数値の加算だけではありません。

文字列が含まれる場合、文字列連結にも使われます。

今回の式は次の通りです。

1 + 2 + "3"

式は左から評価されます。

まず、

1 + 2 = 3

です。

そのあと、

3 + "3"

を評価します。

文字列"3"が含まれているため、文字列連結になります。

つまり、

"33"

です。

そのため、実行結果は次の通りです。

33

一方で、次のコードを見てください。

System.out.println("1" + 2 + 3);

最初から文字列が含まれています。

そのため、

"1" + 2 = "12"

"12" + 3 = "123"

となります。

結果は、

123

です。

つまり、同じ数字でも順番によって結果が変わります。

Java Bronzeでは、式を一気に計算しないでください。

左から1つずつ評価しましょう。

問題4:if文の条件判定

次のコードを実行すると、何が表示されるでしょうか。

public class Main {
    public static void main(String[] args) {

        int x = 10;

        if (x > 5)
            if (x > 20)
                System.out.println("A");
            else
                System.out.println("B");
    }
}

A. A

B. B

C. 何も表示されない

D. コンパイルエラー

正解:B. B

この問題では、elseがどのifに対応するのかを確認します。

Javaでは、波括弧を省略した場合、elseは基本的に対応可能な最も近いif文と組み合わされます。

今回のコードでは、

if (x > 20)
    System.out.println("A");
else
    System.out.println("B");

という関係です。

まず、

x > 5

trueです。

そのため、内側のifへ進みます。

次に、

x > 20

を確認します。

xは10なのでfalseです。

したがって、else側が実行されます。

結果は、

B

です。

[swell_box color=”yellow” title=”初心者は波括弧を補って読む”]
if文がネストしている場合は、頭の中で波括弧を補ってみましょう。

どのelseがどのifに対応しているのか見つけやすくなります。
[/swell_box]

実務では読み間違いを防ぐため、波括弧を省略しない書き方もよく使われます。

しかし、資格問題では省略されたコードが出てくる可能性があります。

コードの見た目だけで判断しないようにしましょう。

問題5:switch文とbreak

次のコードを実行すると、何が表示されるでしょうか。

public class Main {
    public static void main(String[] args) {

        int x = 2;

        switch (x) {
            case 1:
                System.out.print("A");
            case 2:
                System.out.print("B");
            case 3:
                System.out.print("C");
            default:
                System.out.print("D");
        }
    }
}

A. B

B. BC

C. BCD

D. ABCD

正解:C. BCD

xの値は2です。

そのため、次のcaseから処理が始まります。

case 2:

まず、

B

が出力されます。

しかし、このswitch文にはbreakがありません。

そのため、後続のcaseへ処理が進みます。

case 3:
    System.out.print("C");

さらにdefaultも実行されます。

結果は、

BCD

です。

このように、従来のswitch文ではbreakがない場合、後続の処理へ進む動きがあります。

[swell_box color=”red” title=”switch問題ではbreakを探す”]
caseの値を確認したら、必ずbreakの有無を確認してください。

「xが2だからBだけ」と判断すると間違えます。
[/swell_box]

問題6:for文は何回実行される?

次のコードを実行すると、何が表示されるでしょうか。

public class Main {
    public static void main(String[] args) {

        for (int i = 0; i < 3; i++) {
            System.out.print(i);
        }
    }
}

A. 012

B. 123

C. 0123

D. 1234

正解:A. 012

for文は、次の3つに分けて確認すると理解しやすくなります。

for (初期化; 条件式; 更新式)

今回のコードでは、

for (int i = 0; i < 3; i++)

です。

まず、iは0から始まります。

i = 0 → 0 < 3 → true
i = 1 → 1 < 3 → true
i = 2 → 2 < 3 → true
i = 3 → 3 < 3 → false

iが3になると条件式がfalseになります。

そのため、出力されるのは、

012

です。

初心者がよく間違えるのが、

i < 3

と、

i <= 3

の違いです。

i <= 3なら3も条件を満たします。

つまり、結果は、

0123

になります。

Java Bronzeでは、不等号を必ず確認しましょう。

問題7:continueの動き

次のコードを実行すると、何が表示されるでしょうか。

public class Main {
    public static void main(String[] args) {

        for (int i = 0; i < 5; i++) {

            if (i == 2) {
                continue;
            }

            System.out.print(i);
        }
    }
}

A. 01234

B. 0134

C. 01

D. 234

正解:B. 0134

continueが実行されると、その繰り返しの残りの処理をスキップします。

今回、

if (i == 2) {
    continue;
}

となっています。

iが2の場合、continueが実行されます。

そのため、

System.out.print(i);

は実行されません。

処理を追うと、

i = 0 → 出力
i = 1 → 出力
i = 2 → continue
i = 3 → 出力
i = 4 → 出力

です。

したがって、結果は、

0134

になります。

ここでbreakと混同しないようにしましょう。

breakはループそのものから抜けます。

一方で、continueは現在の繰り返しの残りをスキップし、次の繰り返しへ進みます。

キーワード動き
breakループを終了する
continue現在の繰り返しをスキップする

つまり、continueを見つけてもループ自体が終了するわけではありません。

問題8:配列の添字

次のコードを実行するとどうなるでしょうか。

public class Main {
    public static void main(String[] args) {

        int[] numbers = {10, 20, 30};

        System.out.println(numbers[3]);
    }
}

A. 30

B. 0

C. コンパイルエラー

D. 実行時に例外が発生する

正解:D. 実行時に例外が発生する

配列の要素数は3です。

int[] numbers = {10, 20, 30};

しかし、Javaの配列の添字は0から始まります。

numbers[0] → 10
numbers[1] → 20
numbers[2] → 30

利用できる添字は0〜2です。

そのため、

numbers[3]

は配列の範囲外です。

ここで重要なのは、このコードがコンパイルエラーではないことです。

コード自体はコンパイルできます。

しかし、実行時に配列の範囲外へアクセスするため例外が発生します。

[swell_box color=”red” title=”コンパイルエラーではない”]
numbers[3]というコードは文法的には書けます。

そのためコンパイルは可能です。

しかし、実際の配列に添字3の要素がないため、実行時に例外が発生します。
[/swell_box]

Java Bronzeでは、

・コンパイルエラー
・実行時例外
・正常終了

を区別してください。

問題9:==とequalsの違い

次のコードを実行すると、何が表示されるでしょうか。

public class Main {
    public static void main(String[] args) {

        String a = new String("Java");
        String b = new String("Java");

        System.out.println(a == b);
        System.out.println(a.equals(b));
    }
}

A. true / true

B. true / false

C. false / true

D. false / false

正解:C. false / true

この問題は、==equals()の違いがポイントです。

まず、

a == b

を確認します。

abは、それぞれnew String()で生成されています。

String a = new String("Java");
String b = new String("Java");

そのため、別々のStringオブジェクトを参照しています。

==で参照型を比較する場合、参照先が同じかを確認します。

今回は別々のオブジェクトです。

したがって、

false

です。

一方、

a.equals(b)

では、Stringの内容を比較します。

どちらも文字列の内容は、

Java

です。

そのため、

true

になります。

結果は、

false
true

です。

[swell_box color=”blue” title=”まずはこの違いを覚える”]
== → 参照型では参照先の比較を考える

Stringのequals() → 文字列の内容を比較する
[/swell_box]

ただし、Stringの比較問題では文字列リテラルや文字列プールが絡むと少し複雑になります。

まずJava Bronze対策では、new String()で作成した別オブジェクトの比較から理解しましょう。

問題10:クラスとインスタンス

最後の問題です。

次のコードを実行すると、何が表示されるでしょうか。

class Person {

    String name = "Java";

    void hello() {
        System.out.println(name);
    }
}

public class Main {

    public static void main(String[] args) {

        Person p = new Person();

        p.name = "Bronze";
        p.hello();
    }
}

A. Java

B. Bronze

C. null

D. コンパイルエラー

正解:B. Bronze

まず、Personクラスにはnameフィールドがあります。

String name = "Java";

初期値は"Java"です。

次に、mainメソッドでPersonのインスタンスを作成しています。

Person p = new Person();

そのあと、

p.name = "Bronze";

を実行しています。

つまり、pが参照するPersonオブジェクトのnameを変更しています。

その後、

p.hello();

を実行します。

hello()メソッドでは、

System.out.println(name);

を実行します。

現在のname"Bronze"です。

したがって、結果は、

Bronze

になります。

Java初心者は、

「最初にJavaと書いてあるからJava」

と判断してしまうことがあります。

しかし、変数の値は途中で変更される場合があります。

コード問題では、現在の値を追うことが重要です。

Java Bronzeのコード問題で間違えやすいポイント

ここまで10問解いてきました。

Java Bronzeの問題では、難しいAPIを大量に暗記するより、基本文法の細かい動きを正確に理解することが重要です。

特に、次のポイントは注意してください。

[swell_checklist]
[swell_check]int同士の割り算では小数部分が残らない[/swell_check]
[swell_check]i++と++iでは値を使うタイミングが違う[/swell_check]
[swell_check]文字列が含まれると+は文字列連結になる[/swell_check]
[swell_check]elseがどのifに対応するか確認する[/swell_check]
[swell_check]switchではbreakの有無を見る[/swell_check]
[swell_check]for文では初期値・条件式・更新式を分けて見る[/swell_check]
[swell_check]breakとcontinueを混同しない[/swell_check]
[swell_check]配列の添字は0から始まる[/swell_check]
[swell_check]コンパイルエラーと実行時例外を区別する[/swell_check]
[swell_check]変数の値が途中で変更されていないか確認する[/swell_check]
[/swell_checklist]

私自身、Java資格の問題を解くときは、コードを一気に読まないようにしていました。

例えば、

int x = 1;
int y = x++;
x += 2;

というコードがあった場合。

頭の中だけで答えを出すのではなく、

最初:x = 1

x++実行後:
x = 2
y = 1

x += 2実行後:
x = 4
y = 1

と値を追います。

少し面倒に感じるかもしれません。

しかし、最初はこの方法の方が確実です。

そして、問題を何度も解いていると、少しずつ頭の中でも処理を追えるようになります。

Java Bronzeの問題集は何周すればいい?

Java Bronzeの問題集は、2〜3周するのがおすすめです。

ただし、同じ問題の答えを暗記するだけでは意味がありません。

1周目:苦手分野を見つける

1周目は正答率を気にしなくて大丈夫です。

目的は、自分が理解できていない分野を見つけることです。

例えば、

・型変換を間違える
・インクリメントで間違える
・ループの回数を間違える
・配列問題で間違える

など、自分の苦手分野を確認します。

2周目:正解理由を説明する

2周目では、

「答えはC」

だけで終わらせないでください。

例えば問題2なら、

「x++は後置インクリメントなので、現在の値1をyへ利用したあとにxが2になる。だから2:1」

と説明します。

つまり、正解の記号ではなく理由を覚えます。

3周目:間違えた問題だけ解く

3周目は、すべての問題を解き直す必要はありません。

1周目と2周目で間違えた問題を中心に復習します。

さらに、間違えたコードは少し変更して実行してください。

例えば、

int y = x++;

を、

int y = ++x;

へ変更します。

また、

i < 3

を、

i <= 3

へ変更します。

このように、1問から複数パターンを確認すると理解しやすくなります。

Java Bronze本番でコード問題を解くコツ

Java Bronzeのコード問題を解く4ステップを解説した図解

試験本番では、1問に時間をかけすぎないことも重要です。

Java SE Bronzeは60問を65分で解く試験です。

単純計算すると、1問あたり約1分です。

そのため、複雑なコードを最初からすべて頭の中で実行しようとすると時間が足りなくなる可能性があります。

私は、次の順番で確認するのがおすすめです。

1. まずコンパイルエラーを探す

変数の型や宣言、メソッドの呼び出しなどを確認します。

明らかなコンパイルエラーがあれば、実行結果を最後まで追う必要はありません。

2. 変数の初期値を見る

次に、変数の値を確認します。

int x = 1;

なら、メモに、

x = 1

と書きます。

3. 値が変わる行だけ追う

すべてのコードを細かく読む必要はありません。

例えば、

x++;
x += 2;
x = 10;

のように、値が変わる行を重点的に確認します。

4. 最後に例外の可能性を見る

配列アクセスなどがある場合は、実行時例外が発生しないか確認します。

numbers[3]

を見つけたら、配列の要素数を確認します。

[swell_box color=”blue” title=”本番のコード確認順”]
① コンパイルエラーを探す
② 変数の型と初期値を見る
③ 値が変わる行を追う
④ 実行時例外を確認する
⑤ 最後に出力結果を判断する
[/swell_box]

この順番を決めておくと、コード問題を読みやすくなります。

Java Bronze問題で8割取れない場合はどうする?

今回の10問で8問以上正解できなかった場合、焦って模擬試験へ進む必要はありません。

まずは、間違えた分野を確認しましょう。

問題1を間違えたなら、データ型と演算子。

問題2なら、インクリメント。

問題5なら、switch文。

問題8なら、配列です。

苦手分野がわかれば、そこだけ参考書へ戻ります。

最初から参考書を全部読み直す必要はありません。

例えば、配列だけ間違えたなら配列の章だけ復習します。

そのあと、再びコード問題を解きます。

この、

問題を解く → 間違える → 該当分野だけ戻る → もう一度解く

という流れがおすすめです。

一方で、10問中8〜10問正解できた人は、問題集や模擬試験へ進んでいいと思います。

Java Bronzeの難易度や必要な勉強時間が気になる方は、「Java Bronzeの難易度は?未経験でも合格できる勉強時間と対策」も参考にしてください。

Java Bronze合格後はSilverへ進もう

Java Bronzeのコード問題を解けるようになると、Javaの基本文法が少しずつ読めるようになります。

しかし、Javaエンジニアを目指すなら、Bronzeで終わりにする必要はありません。

次のステップはJava Silverです。

Silverでは、Bronzeで学んだ基本文法を土台に、より深いJava知識が問われます。

そのため、Bronze合格後は知識を忘れる前にSilverへ進むのがおすすめです。

Java資格の勉強順で迷っている方は、「Java資格ロードマップ|Bronze・Silver・Goldの違いと勉強順」を参考にしてください。

よくある質問

[swell_accordion title=”Q. Java Bronzeの過去問は公開されていますか?”]
この記事で紹介している問題は、Java Bronzeの学習範囲を意識して作成したオリジナルの練習問題です。実際の試験問題を転載したものではありません。試験情報や出題範囲はOracle公式情報も確認してください。
[/swell_accordion]

[swell_accordion title=”Q. Java Bronzeの問題は難しいですか?”]
Java資格の中では入門レベルですが、プログラミング完全未経験者には難しく感じる問題もあります。特にインクリメント、ループ、配列、クラスなどはコードを実際に動かしながら学ぶのがおすすめです。
[/swell_accordion]

[swell_accordion title=”Q. Java Bronzeは問題集だけで合格できますか?”]
すでにJavaの基本文法を理解している人なら、問題集中心でも合格を狙えます。一方、完全未経験者は入門書で基本文法を学んでから問題集へ進む方が理解しやすいです。
[/swell_accordion]

[swell_accordion title=”Q. 問題集は何周すればいいですか?”]
2〜3周がおすすめです。ただし、答えを暗記するのではなく、なぜその答えになるのか説明できる状態を目指してください。
[/swell_accordion]

[swell_accordion title=”Q. 模擬試験は何点取れば受験していいですか?”]
公式の合格ラインは60%ですが、本番の緊張や読み間違いも考えると、模擬試験では80〜90%以上を安定して取れる状態を目指すのがおすすめです。
[/swell_accordion]

[swell_accordion title=”Q. Java Bronze合格後はSilverを受けるべきですか?”]
Javaエンジニアを目指すならSilverへ進むのがおすすめです。Bronzeで学んだ基本文法が残っているうちに学習を始めると、効率よくステップアップできます。
[/swell_accordion]

まとめ:Java Bronzeはコード問題を繰り返して対策しよう

今回は、Java Bronze対策として初心者が間違えやすいコード問題を10問紹介しました。

重要ポイントをもう一度確認します。

[swell_box color=”blue” title=”Java Bronze問題10選の重要ポイント”]
・int同士の割り算は整数になる
・x++は値を利用したあとに増加する
・++xは増加してから値を利用する
・文字列を含む+演算子は連結になる
・elseは対応するifを確認する
・switchではbreakの有無を見る
・for文は条件式の不等号を確認する
・continueは現在の繰り返しをスキップする
・配列の添字は0から始まる
・==とequalsの違いを理解する
[/swell_box]

Java Bronzeは入門資格です。

しかし、コード問題では基本文法の細かい動きを正確に理解している必要があります。

最初はコードを頭の中だけで追わなくて大丈夫です。

紙やメモに変数の値を書きながら、1行ずつ確認してください。

そして、間違えた問題は答えだけ覚えないようにしましょう。

なぜその結果になるのか。

コードを1行変更すると結果はどう変わるのか。

ここまで確認すると、少し違う問題にも対応できるようになります。

Java Bronzeの勉強順を整理したい方は、「Java Bronze勉強法ロードマップ【未経験から独学合格まで完全ガイド】」を参考にしてください。

Java Bronzeの難易度や勉強時間が気になる方は、「Java Bronzeの難易度は?未経験でも合格できる勉強時間と対策」もあわせて読んでみてください。

Bronze合格後にSilverへ進む方は、「Java Silver一発合格の勉強法|2ヶ月・1日1時間で受かるロードマップ」で次の学習計画を確認できます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

tibiyaのアバター tibiya ITエンジニア

文系卒エンジニア(8年目)
Java / JavaScript / C# を中心に業務システム開発を経験。
Java資格・IT就活・文系エンジニアの実体験を発信しています。

コメント

コメントする

目次