20210729のJavaに関する記事は7件です。

[JAVA] テストコードでprivateメソッドのException発生をテストする方法

環境 Java 1.8.0_282 Spring Boot 2.4.9 概要 Spring Bootのテストコードで、privateメソッドのException発生をテストしたところ、全てInvocationTargetExceptionとなってしまうので、その対策方法について調べた。 テスト対象のクラス 以下のメソッドでは引数にListが渡され最初の要素を取得しているが、もし空のListが渡された場合、存在しない要素を取得しようとすることになるので、ArrayIndexOutOfBoundsExceptionが発生することを期待する。 テスト対象のクラス public class SampleService { // Listの最初の要素を取得する private Long samplePrivateMethod(List<Long> array) throws ArrayIndexOutOfBoundsException { return array.get(0); } } テストコード 前述の通り、ArrayIndexOutOfBoundsExceptionが発生するかをテストしたい。しかしprivateメソッドをテストする場合、assertThrowsでチェックするとInvocationTargetExceptionを拾ってしまう。 そのため、まずassertThrowsでInvocationTargetExceptionが発生することをチェックし、その戻り値の中にArrayIndexOutOfBoundsExceptionがあるかどうかをチェックするという方法を取る。 テストコード @ExtendWith(MockitoExtension.class) public class SampleServiceTest { private SampleService sampleService; @Test public void sampleTest() throws Exception { // テスト対象のクラスとprivateメソッドと引数の型(List.class) Method method = SampleService.class.getDeclaredMethod("samplePrivateMethod", List.class); // privateメソッドの実行を許可 method.setAccessible(true); // samplePrivateMethodの引数にArrays.asList()、つまり空のListを渡す。 // privateメソッドを実行すると、method.invoke()のExceptionであるInvocationTargetExceptionが発生する。 InvocationTargetException e = assertThrows(InvocationTargetException.class, () -> method.invoke(sampleService, Arrays.asList())); // InvocationTargetExceptionの戻り値の中に、ArrayIndexOutOfBoundsException.classがあるかどうかでチェックする assertEquals(ArrayIndexOutOfBoundsException.class, e.getCause().getClass()); } } 以上 参考 privateメソッドをテストする時メモ
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[JAVA] JPAのNo default constructor for entityエラーについて

環境 Java 1.8.0_282 org.springframework.boot:spring-boot-starter-data-jpa: 2.4.9 現象 以下のModelを実行すると、 @Entity @Builder @Table(name="sample_table") public class SampleModel { @Id private Long id; private String name; } 以下のエラーが出る。 Caused by: org.springframework.orm.jpa.JpaSystemException: No default constructor for entity: : com.example.bot.spring.models.SampleModel; nested exception is org.hibernate.InstantiationException: No default constructor for entity: : com.example.bot.spring.models.SampleModel No default constructor for entity とある。 原因 簡単に説明すると、 デフォルトコンストラクタとは引数なしの空のコンストラクタのこと @Builderが付与されていると、引数ありのコンストラクタが自動生成される 既にコンストラクタが存在しているとデフォルトコンストラクタは生成されない 詳しく説明すると、今回の例で@Builderが自動生成するコンストラクタは以下。求められているのは public SampleModel() {} のような空のコンストラクタ。 @Entity @Builder @Table(name="sample_table") public class SampleModel { @Id private Long id; private String name; // このようなコンストラクタを@Builderが自動生成する public SampleModel(Long id, String name) { this.id = id; this.name = name; } } つまり、@Builderが邪魔をしている。しかし@Builderは使いたい。 解決方法 デフォルトコンストラクタを明示的に定義し、@Tolerateを付与することで回避できる。 こうすると、デフォルトコンストラクタが既に存在していても、@Builderが引数ありのコンストラクタを生成してくれる。 @Entity @Builder @Table(name="sample_table") public class SampleModel { @Id private Long id; private String name; + + @Tolerate + public TaskCommandModel() {} } 以上 参考 @Builderのクラスに引数なしのコンストラクタを設置したい
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Javaの日付の差分処理はDurationを使おう!!

実装を進めていく中で日付の差分を取得する処理に遭遇することがあるかと思います。 Java 8以前ではCalendarクラスやDateクラスの基準日時からのミリ秒を取得し、差分を見るというやり方が主流でした(今でも検索するとそのようなやり方がたくさん出てきます)。 Java 8からは時間(日付ではなく)を取り扱うことに特化したDurationクラスというものが使えるようになっていますので、そちらのクラスがいかに便利かを紹介したいと思います。 java.time.Duration Java 8で追加されたDate-time APIのうちの一つです。 時間を扱うことに特化したクラスで、「何秒か?」のような情報をいい感じに保持することができます。 https://docs.oracle.com/javase/jp/16/docs/api/java.base/java/time/Duration.html 差分時間を取得する 例として夏休みが何時間か、みたいな処理を書いてみようかと思います。 import java.time.Duration; import java.time.LocalDateTime; // クラス定義、メソッド定義の省略 LocalDateTime beginSummerVacation = LocalDateTime.of(2021, 7, 20, 11, 00);// 夏休みは終業式が終わったタイミングから LocalDateTime endSummerVacation = LocalDateTime.of(2021, 9, 1, 8, 00);// 始業式が始まるタイミングまで Duration summerVacationDuration = Duration.between(beginSummerVacation, endSummerVacation);// 期間分の時間を取得する System.out.println("2021年の夏休みは" + summerVacationDuration.toHours() + "時間です");// 2021年の夏休みは1029時間です ちなみにDateクラスを使うとこんな感じの実装になります。 import java.util.Date; import java.text.SimpleDateFormat; // クラス定義、メソッド定義の省略 SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS"); Date beginSummerVacation = df.parse("2021/07/20 11:00:00.000");// 夏休みは終業式が終わったタイミングから Date endSummerVacation = df.parse("2021/09/01 08:00:00.000");// 始業式が始まるタイミングまで long summerVacationMillis = endSummerVacation.getTime() - beginSummerVacation.getTime(); System.out.println("2021年の夏休みは" + summerVacationMillis / 1000 / 60 / 60 + "時間です"); 一部ではこれでいいじゃんって思われる方もいるかと思いますので、どこが良いのかを列挙します。 Durationのbetweenメソッドで差分の時間を計算していることがコードから明白になる / 1000 / 60 / 60みたいなよくわからない計算を書かなくて良い 日数が知りたい場合、summerVacationDuration.toDays();とするだけで良い(計算書かなくて良い) イミュータブルで安全 日付の加算処理でもそのまま使える 5点目だけコードで示します。 例えば、夏休みが2倍になったらなーと誰もが考えると思います。その場合の計算処理は以下のようになります。 import java.time.Duration; import java.time.LocalDateTime; // クラス定義、メソッド定義の省略 LocalDateTime beginSummerVacation = LocalDateTime.of(2021, 7, 20, 11, 00);// 夏休みは終業式が終わったタイミングから LocalDateTime endSummerVacation = LocalDateTime.of(2021, 9, 1, 8, 00);// 始業式が始まるタイミングまで Duration summerVacationDuration = Duration.between(beginSummerVacation, endSummerVacation);// 期間分の時間を取得する LocalDateTime extendedSummerVacation = endSummerVacation.plus(summerVacationDuration);// endSummerVacationに期間分の時間を足すことで2倍にする System.out.println("2021年の夏休みは" + extendedSummerVacation + "までです");// 2021年の夏休みは2021-10-14T05:00までです こんなに簡単に夏休みが延長できました!!! この書き方のメリットは以下のようなことが挙げられます。 LocalDateTimeのplusメソッドが加算してるってことがわかり直感的 この処理もイミュータブルで安全 ミリ秒を使ってDateインスタンス、Calendarインスタンスを生成するより、実装意図がコードから伝わりやすい ちなみにもう1日夏休みを延長したいという場合も簡単に対応できます。 import java.time.Duration; import java.time.LocalDateTime; // クラス定義、メソッド定義の省略 LocalDateTime beginSummerVacation = LocalDateTime.of(2021, 7, 20, 11, 00);// 夏休みは終業式が終わったタイミングから LocalDateTime endSummerVacation = LocalDateTime.of(2021, 9, 1, 8, 00);// 始業式が始まるタイミングまで Duration summerVacationDuration = Duration.between(beginSummerVacation, endSummerVacation);// 期間分の時間を取得する Duration plusSummerVacationDuration = summerVacationDuration.plusDays(1);// 1日延長 LocalDateTime extendedSummerVacation = endSummerVacation.plus(plusSummerVacationDuration);// endSummerVacationに期間分の時間+1日を足すことで2倍+1日にする System.out.println("2021年の夏休みは" + extendedSummerVacation + "までです");// 2021年の夏休みは2021-10-15T05:00までです まとめ Java 8以降なら日付の差分取得はDurationクラスを使いましょう。 詳細な紹介は省きますが、toHours(), toDays()以外にも、秒数を取得するtoSeconds()や期間に何日含まれるかを取得できるtoDaysPart()メソッドがあります。 Durationを含む、Date-time APIは日付処理を非常に便利に、わかりやすく書けるよいAPI群なので使える環境であれば、おすすめします!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Java独習(第4章:制御構文)

Java独習第4章 制御構文 ・条件分岐 ・繰り返し ・ループの制御 4-1 条件分岐 順次/選択/反復を繰り返してプログラムを開発していくことを構造化プログラミングという if文の基本に関しては既知のため省略 注意としてはboolean型のモノを==で比較しない。書くときは以下のようにする Java if (flag){ System.out.println("練習です") } もしfalseを示したいのならば!flagと書く必要がある なお条件式に否定が入っているとわかりにくいので取り除いた方が可読性が上がる また、あまりにも深いネストも避けるべき switch文 Java var rank = "甲" switch(rank){ case "甲": //式=値1の処理 System.out.println("Great"); break; case "乙":  //式=値2の処理; System.out.println("Better"); break; defalt: System.out.println("??"); break; } caseは1種類だけでなく Java case "ワイン": case"ウイスキー": case "日本酒": 処理 このように複数書いても可能 4-2 繰り返し処理 Java while(条件式){   処理内容; } 条件式がtrueの時処理を繰り返す do..whileは後検証で文の最後に;が必要 Java do{   処理内容; }while(条件式); forは既知のため省略 注意点としては以下のようなこと ・カウンター変数に浮動小数点を利用しない(演算誤差を防ぐため) ・ブロックは以下でのカウンター変数を操作しない(2足したいならi+=2とすればいいがi++を2回書くとか) ・ループ内でのオブジェクト作成と例外処理(処理効率を下げないため) 配列を駆使してこのようなこともできる Java var data = String[]{"梅", "桜", "桃"}; for(var data : data){   System.out.println(value); } 4-3 ループ制御 break命令=現在のループを強制的に中断し、ifと併用する continue命令=現在の周回だけをスキップ 脱出したいときはlimitを使用する(下のプログラムは九九の表) Java limit: for(var i = 1; i< 10; i++){ for(var j = 1; j <10; j++){ var result = i * j; if(result > 50){ break limit; } System.out.printf("%2d", result); } System.out.println(); }
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ローカル環境にDynamoDBを構築する(Java上に構築)

概要 表題通り、DynamoDBをローカル開発環境に構築する記事です。 DyanmoDBのインストール方法は下記2つの方法がありますが、今回はJava上に構築します。 1. Java上に構築する方法 2. Docker上に構築する方法 1. Javaのインストール 1-1の状態であれば、Javaのインストールが必要です。installを実施しましょう。 1-2の状態であれば、次のステップに進んでください。 1-1jarのinstall未実施 ~/develop/aws/dynamodb/dynamodb_local_latest $ java --v The operation couldn’t be completed. Unable to locate a Java Runtime. Please visit http://www.java.com for information on installing Java. 1-2jarのinstall済み ~ $ java --version openjdk 11.0.11 2021-04-20 OpenJDK Runtime Environment AdoptOpenJDK-11.0.11+9 (build 11.0.11+9) OpenJDK 64-Bit Server VM AdoptOpenJDK-11.0.11+9 (build 11.0.11+9, mixed mode) Javaのinstall リンクからOpenJDKをinstallします。 1-2jarのinstall確認 ~ $ java --version openjdk 11.0.11 2021-04-20 OpenJDK Runtime Environment AdoptOpenJDK-11.0.11+9 (build 11.0.11+9) OpenJDK 64-Bit Server VM AdoptOpenJDK-11.0.11+9 (build 11.0.11+9, mixed mode) 2. DynamoDBのインストール リンクより、DynamoDBをダウンロードする。 解凍ファイルを任意の場所に配置する。 解凍ファイルを配置 ~/develop/aws/dynamodb $ ls dynamodb_local_latest 実行 ~/develop/aws/dynamodb/dynamodb_local_latest $ java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb Initializing DynamoDB Local with the following configuration: Port: 8000 InMemory: false DbPath: null SharedDb: true shouldDelayTransientStatuses: false CorsParams: * dynamoDBにアクセス ~/develop/aws/dynamodb/dynamodb_local_latest $ aws dynamodb list-tables --endpoint-url http://localhost:8000 { "TableNames": [] } これで、インストール完了です!!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【初学者向け】エラーの追いかけ方(例としてJavaを使用)

はじめに 今更の題材ですが、練習がてら初投稿してみます。 ※そもそも投稿者自身が投稿初心者かつ初投稿なので色々荒があるのはご容赦ください。 なんなら、現時点でMarkdownについて調べながら書いています。 「何かしら問題があって動作しないことは分かるが、英語で色々出てどうしたら良いか分からない」 という方向けです。 (タイトルの通り例としてJavaで記述しています) コンパイラ、インタプリタ、スクリプト等々 言語や環境によってエラーメッセージやタイミングが異なる等の 様々な要素がありますが今回はゴッソリ無視します。 本題 ようやく本題ですが、 例として以下の四則演算を実行するシンプルなプログラムがあったとします。 なお、想定通り実行できない例を2つ「例1」、「例2」として記載します。 例題コード(シンプルに四則演算をするプログラム) import java.util.*; public class Main { public static void main(String[] args) throws Exception { System.out.println("足し算の結果"); addition(4, 2); System.out.println("引き算の結果"); subtraction(4, 2); System.out.println("掛け算の結果"); multiplication(4, 2); System.out.println("割り算の結果"); division(4, 2); } // (1)足し算 public static void addition(int num1, int num2) { System.out.println(num1 + num2); } // (2)引き算 public static void subtraction(int num1, int num2) { System.out.println(num1 - num2); } // (3)掛け算 public static void multiplication(int num1, int num2) { System.out.println(num1 * num2); } // (4)割り算 public static void division(int num1, int num2) { System.out.println(num1 / num2); } } 想定する実行結果 足し算結果 6 引き算結果 2 掛け算結果 8 割り算結果 2 以下から想定通り実行できない例を記述していきます。 例1:(1)にint以外を渡してしまった… …省略 System.out.println("足し算結果"); addition(4, 2.0); …省略 エラーメッセージ Main.java:6: error: incompatible types: possible lossy conversion from double to int addition(4, 2.0); ^ Note: Some messages have been simplified; recompile with -Xdiags:verbose to get full output 1 error 出ました、「ヒヤッ」とする瞬間ですね。 落ち着いて上から軽く確認してみましょう。 解決に向けて(「Note:~」等、一部省略) どこでですか? Main.java:6(Mainの6行目ですよ) どんな理由ですか? incompatible types(互換性がありませんよ) 解決法はありますか? possible lossy conversion from double to int(非可逆になるけど、doubleからintへの変換が可能ですよ) ↑ 変数の型変換に関わる部分なので意味については今回は記述しません。 コードではどこの部分に問題があるのですか? addition(4, 2.0) => 丁寧に「^」で指定されている箇所です。 注意点 解説のために上から読みましたが、実際は下から読むことが多いです。 コードが複雑になればなるほど、出てくるエラー量・情報は煩雑になります。 ですが、「だいたいこんな風に読むんだな」とイメージしておきましょう。 オススメの手順(と気を付けるべき点) とりあえず、エラーメッセージをサイト等を利用して翻訳してみる。 翻訳した個別のメッセージで検索してみる。 その言語特有のポイントがあれば「公式ドキュメント」で調べてみる。 どうしても理解できなければ個人の記事等を読んでみる。 ↑の場合、情報が「本当に正確」なのか精査する。 「なんとなくできた」ではなくおおよそで良いから内容を理解してみる。 次の例に向けて ここから2つ目のエラー例を記述しますが、 「例1」のエラーと気色が異なる(厳密には例外と呼ばれる)ものなので 「もう例1でお腹いっぱい」という方はゆっくり寝て頭を整理しましょう。無理は禁物です。 (※Exceptionという単語が出てきますが「例外」という意味です、ザックリ「エラーが出た」くらいの認識で大丈夫です。) 例2:(4)で0の割り算をしてしまった…(0除算と呼ばれるもの) …省略 System.out.println("割り算結果"); division(4, 0); …省略 エラーメッセージ 比較のために「例2」と「例1」を並べてみます。 // 例2 Exception in thread "main" java.lang.ArithmeticException: / by zero at Main.division(Main.java:32) at Main.main(Main.java:12) // 例1 Main.java:6: error: incompatible types: possible lossy conversion from double to int addition(4, 2.0); ^ Note: Some messages have been simplified; recompile with -Xdiags:verbose to get full output 1 error 恐らく、多くの人が目にするのは「例2」形式の方でしょう。 「例1」と同じく、上から軽く確認してみましょう。 解決に向けて どんなエラーですか? java.lang.ArithmeticExceptionが発生しました。 どんな理由ですか? 「/ by zero」(0の除算)によってです。 どこで発生したエラーですか? [注意点1] 2行目の"at"以降には、最終的にどこでエラーが発生したのかが表示されます。 この場合はMain.javaの32行目です。(at Main.division(Main.java:32)) [注意点2] 3行目以降も"at"が続き、どこでエラーが発生したのかが表示されます。(at Main.main(Main.java:12)) 2行目は実際にエラーが発生した場所ですが、3行目以降はエラーが発生したメソッドを呼び出した場所が表示されます。 要約すると… コレも下から順に読みましょう。 at Main.main(Main.java:12) => Mainクラスの12行目でメソッドを呼び出しましたね。 at Main.division(Main.java:32) => 呼び出したMainクラスのdivisionメソッドでエラーが発生しましたよ。 Exception in thread "main" java.lang.ArithmeticException: / by zero => java.lang.ArithmeticExceptionという例外が発生しましたよ。(0除算によってね。) 今回の場合は理由が直に書いてありますが… 実際はエラーの理由までは書いてないことがあるので、「 java.lang.ArithmeticException」 ってなんだろう… みたいになった場合は以下のドキュメントなどを駆使して調べてみましょう。 公式ドキュメント Java SE8 docs ArithmeticExceptionについて おわりに 長くなってしまったうえに引き際を見失った感がありますが、 自分が最初に「エラー」というものに遭遇して 「なんだか全く分からないし怖い」状況から脱するために実践した手順が 上記ですので、誰かの参考になれば幸いです。 思いつきの勢いで記述したので細かい部分については色々と見逃してください。 (後から見直して編集する可能性があります。)
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

初学者向けのエラーの追い方(例としてJavaを使用)

はじめに 今更の題材ですが、練習がてら初投稿してみます。 ※そもそも投稿者自身が投稿初心者かつ初投稿なので色々荒があるのはご容赦ください。 なんなら、現時点でMarkdownについて調べながら書いています。 「何かしら問題があって動作しないことは分かるが、英語で色々出てどうしたら良いか分からない」 という方向けです。 (タイトルの通り例としてJavaで記述しています) コンパイラ、インタプリタ、スクリプト等々 言語や環境によってエラーメッセージやタイミングが異なる等の 様々な要素がありますが今回はゴッソリ無視します。 本題 ようやく本題ですが、 例として以下の四則演算を実行するシンプルなプログラムがあったとします。 なお、想定通り実行できない例を2つ「例1」、「例2」として記載します。 例題コード(シンプルに四則演算をするプログラム) import java.util.*; public class Main { public static void main(String[] args) throws Exception { System.out.println("足し算の結果"); addition(4, 2); System.out.println("引き算の結果"); subtraction(4, 2); System.out.println("掛け算の結果"); multiplication(4, 2); System.out.println("割り算の結果"); division(4, 2); } // (1)足し算 public static void addition(int num1, int num2) { System.out.println(num1 + num2); } // (2)引き算 public static void subtraction(int num1, int num2) { System.out.println(num1 - num2); } // (3)掛け算 public static void multiplication(int num1, int num2) { System.out.println(num1 * num2); } // (4)割り算 public static void division(int num1, int num2) { System.out.println(num1 / num2); } } 想定する実行結果 足し算結果 6 引き算結果 2 掛け算結果 8 割り算結果 2 以下から想定通り実行できない例を記述していきます。 例1:(1)にint以外を渡してしまった… …省略 System.out.println("足し算結果"); addition(4, 2.0); …省略 エラーメッセージ Main.java:6: error: incompatible types: possible lossy conversion from double to int addition(4, 2.0); ^ Note: Some messages have been simplified; recompile with -Xdiags:verbose to get full output 1 error 出ました、「ヒヤッ」とする瞬間ですね。 落ち着いて上から軽く確認してみましょう。 解決に向けて(「Note:~」等、一部省略) どこでですか? Main.java:6(Mainの6行目ですよ) どんな理由ですか? incompatible types(互換性がありませんよ) 解決法はありますか? possible lossy conversion from double to int(非可逆になるけど、doubleからintへの変換が可能ですよ) ↑ 変数の型変換に関わる部分なので意味については今回は記述しません。 コードではどこの部分に問題があるのですか? addition(4, 2.0) => 丁寧に「^」で指定されている箇所です。 注意点 解説のために上から読みましたが、実際は下から読むことが多いです。 コードが複雑になればなるほど、出てくるエラー量・情報は煩雑になります。 ですが、「だいたいこんな風に読むんだな」とイメージしておきましょう。 オススメの手順(と気を付けるべき点) とりあえず、エラーメッセージをサイト等を利用して翻訳してみる。 翻訳した個別のメッセージで検索してみる。 その言語特有のポイントがあれば「公式ドキュメント」で調べてみる。 どうしても理解できなければ個人の記事等を読んでみる。 ↑の場合、情報が「本当に正確」なのか精査する。 「なんとなくできた」ではなくおおよそで良いから内容を理解してみる。 次の例に向けて ここから2つ目のエラー例を記述しますが、 「例1」のエラーと気色が異なる(厳密には例外と呼ばれる)ものなので 「もう例1でお腹いっぱい」という方はゆっくり寝て頭を整理しましょう。無理は禁物です。 (※Exceptionという単語が出てきますが「例外」という意味です、ザックリ「エラーが出た」くらいの認識で大丈夫です。) 例2:(4)で0の割り算をしてしまった…(0除算と呼ばれるもの) …省略 System.out.println("割り算結果"); division(4, 0); …省略 エラーメッセージ 比較のために「例2」と「例1」を並べてみます。 // 例2 Exception in thread "main" java.lang.ArithmeticException: / by zero at Main.division(Main.java:32) at Main.main(Main.java:12) // 例1 Main.java:6: error: incompatible types: possible lossy conversion from double to int addition(4, 2.0); ^ Note: Some messages have been simplified; recompile with -Xdiags:verbose to get full output 1 error 恐らく、多くの人が目にするのは「例2」形式の方でしょう。 「例1」と同じく、上から軽く確認してみましょう。 解決に向けて どんなエラーですか? java.lang.ArithmeticExceptionが発生しました。 どんな理由ですか? 「/ by zero」(0の除算)によってです。 どこで発生したエラーですか? [注意点1] 2行目の"at"以降には、どこでエラーが発生したのかが表示されます。 この場合はMain.javaの32行目です。(at Main.division(Main.java:32)) [注意点2] 3行目以降も"at"が続き、どこでエラーが発生したのかが表示されます。(at Main.main(Main.java:12)) 2行目は実際にエラーが発生した場所ですが、3行目以降はエラーが発生したメソッドを呼び出した場所が表示されます。 要約すると… コレも下から順に読みましょう。 at Main.main(Main.java:12) => Mainクラスの12行目でメソッドを呼び出しましたね。 at Main.division(Main.java:32) => 呼び出したMainクラスのdivisionメソッドでエラーが発生しましたよ。 Exception in thread "main" java.lang.ArithmeticException: / by zero => java.lang.ArithmeticExceptionという例外が発生しましたよ。 今回の場合は理由が直に書いてありますが… java.lang.ArithmeticException ってなんだろう…みたいになった場合は以下のようなドキュメントを調べてみましょう。 公式ドキュメント Java SE8 doc ArithmeticExceptionについて おわりに 長くなってしまったうえに引き際を見失った感がありますが、 自分が最初に「エラー」というものに遭遇して 「なんだか全く分からないし怖い」状況から脱するために実践した手順が 上記ですので、誰かの参考になれば幸いです。 思いつきの勢いで記述したので細かい部分については色々と見逃してください。 (後から見直して編集する可能性があります。)
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む