エンジニアの将来って?

現在7年目のCOBOL→Java→C#エンジニアが、将来への考えや勉強のアウトプット、たまに腎臓について書くブログです

【Java】eclipseにあるデバッグ機能の「値の変更」で、ArrayListを変更するやり方をできるだけわかりやすく解説します

こんにちは。たいら(@tairaengineer2)です。
今回の記事は、Javaで開発する人ならだれでもお世話になるeclipseデバッグの機能の1つである「値の変更」の解説記事です。
ArrayListの「値の変更」の仕方をできるだけわかりやすく、現役Javaエンジニアのたいらが解説します。

String型の変数や配列の「値の変更」の解説は↓記事をご参照ください。

www.tairax.com

HashMapの「値の変更」の解説は↓記事をご参照ください。

www.tairax.com

前提条件:eclipseの環境

デバッグの「値の変更」で私が解説で使うeclipseのバージョンをお伝えします。

バージョン Eclipse4.7 Oxygen

下準備

ArrayListの「値の変更」の解説に使うプログラムは、String型のArrayListを作り表示させるという単純なプログラムです。

Javaプログラムと、値の変更を行わなかった場合の実行結果を見てみましょう。

Java

package debugSample;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * デバッグでArrayListの「値を変更する」を練習するクラス
 */
public class ArrayListDebugSample {
	public static void main(String[] args) {

		List<String> debugList = new ArrayList<String>(Arrays.asList("Japan", "America", "France"));

		System.out.println("---値を変更する前---");
		debugList.stream().forEach(debug -> System.out.println(debug));

		System.out.println("---値を変更した後---");
		debugList.stream().forEach(debug -> System.out.println(debug));
	}
}

値を変更しない時の実行結果

---値を変更する前---
Japan
America
France
---値を変更した後---
Japan
America
France

当たり前ですが、「値の変更」をしてないので同じものが表示されてます。
では、「値の変更」をやっていきます。

ArrayListを「値の変更」する

では値の変更をしていきます。
ブレークポイントはここに置きます。

f:id:Tairax:20180423231031p:plain

ブレークポイントとは、通常の「実行」ではなく「デバッグ」で実行した場合、ブレークポイントで指定した行を実行する前で止まってくれるポイントです。
ブレークポイントの設定方法は、ブレークポイントを置きたい行に何行目か書いてある左でダブルクリックすれば設定できます。
今回でいうと、19行目の

debugList.stream().forEach(debug -> System.out.println(debug));

が実行される前に変更したいので、19行目以下にブレークポイントを設定すればOKです。
今回は18行目に設定します。

eclipseの上部にある「実行」タブに「デバッグ」があるのでそこをクリック。

f:id:Tairax:20171207123443p:plain

するとブレークポイントの指定した通りに止まってくれます。

f:id:Tairax:20180423231843p:plain

もちろん中断中なので、画面に出力していません。

f:id:Tairax:20180423232042p:plain

では「値の変更」をしていきます。
ブレークポイントで中断しているとデバッグ画面になり、画面右上に「変数」タブ、「ブレークポイント」タブ、「式」タブがあります。

f:id:Tairax:20180423232547p:plain

そこで「変数」タブを選択。

f:id:Tairax:20180424071326p:plain

ここでは今宣言されている変数の状態を見ることができます。
今のdebugListの中身を見てみます。
見るときは、debugListを左クリック。

f:id:Tairax:20180424071709p:plain

今はまだ「値の変更」をしてないので、debugListの中身は

[Japan, America, France]

です。

では、「値の変更」をしていきます。
debugListの上で右クリックをします。

f:id:Tairax:20180827144514p:plain

すると、「値の変更」をいう項目があるのでそれを左クリックで選択します。

f:id:Tairax:20180424072256p:plain

このような画面が現れます。
ここでdebugListの「値の変更」をします。

f:id:Tairax:20180424072758p:plain

new ArrayList<String>(Arrays.asList("Italian", "Canada", "Germany"))

というように入力します。
その状態でOKボタンをクリックします。

f:id:Tairax:20180424073014p:plain

debugListの中身が変更されました!
この状態でF8ボタンかまたは

f:id:Tairax:20180424073226p:plain

赤枠で囲っている再開ボタンを押します。
この再開ボタンは、次のブレークポイントまで一気に処理が進みます。
なのでこのプログラムでは次のブレークポイントが無いので、プログラムの最後まで処理が進みます。
では、再開ボタンを押してみます!

f:id:Tairax:20180424073534p:plain

すると処理が終わり、変更した通りの値が表示されました!

もちろん「値の変更」をする前のArrayListの長さと変わっても全然OKです。
たとえば

f:id:Tairax:20180424155602p:plain

new ArrayList<String>(Arrays.asList("China"))

というように長さを短くして実行しても

f:id:Tairax:20180424155810p:plain

---値を変更する前---
Japan
America
France
---値を変更した後---
China

というように表示されます。

また長さを長くしても

f:id:Tairax:20180424160423p:plain

new ArrayList<String>(Arrays.asList("India", "Thailand", "Turkey","Mexico","Indonesia"))

f:id:Tairax:20180424160627p:plain

---値を変更する前---
Japan
America
France
---値を変更した後---
India
Thailand
Turkey
Mexico
Indonesia

このように変更した通りに表示されます。

ポイントを解説

このデバッグでポイントは下記2点です。

  • 何故「new ArrayList」なのか
  • import文

何故「new ArrayList」なのか

何故いちいち「new ArrayList」をしているかと言いますと、こうしないと値の変更ができないからです。

これをご覧ください。

f:id:Tairax:20180827150054p:plain

f:id:Tairax:20180827150225p:plain

このように1回目のArrayListを表示した後で、「値の変更」をしようとしているとします。

f:id:Tairax:20180827150449p:plain

変更前なので、全く変わっていない状態です。

この状態の時に、"Japan"を変更してみます。
[0]の上で右クリックをします。

f:id:Tairax:20180827150833p:plain

「値の変更」を選択します。

f:id:Tairax:20180827155721p:plain

このような画面が出てきます。
ここに例えば

f:id:Tairax:20180827160207p:plain

new String("China");

と入力して、OKボタンを押します。

f:id:Tairax:20180827160436p:plain

エラーメッセージはでませんが、値の変更が出来ていません。
なので、「new ArrayList」をして「値の変更」をしています。

import文

値の変更するために

new ArrayList<String>(Arrays.asList("Italian", "Canada", "Germany"))

と入力しました。なので

import java.util.Arrays;

というimport文が必要なのがポイントです。
このimport文があることで

Arrays.asList

のメソッドを使うことができます。
もしこのimport文がない場合

f:id:Tairax:20180424161725p:plain

new ArrayList<String>(java.util.Arrays.asList("Ireland"))

というようにArraysの前にjava.util.を入れてやればOKです!

まとめ

以上がeclipseでArrayListの「値の変更」のやり方です。
いかがでしたか?あなたのご参考になれば幸いです。

ではでは~(・ω・)ノシ

 

ほかにも勉強記事を書いてます。
よければご参考ください。

今までブログで書いたJavaのアウトプット記事のまとめ

【Java】標準入力から判定して、じゃんけんゲームをするプログラム

【Java8】filterメソッドを解説【ラムダ式】