JAVA関連のことを調べてみた

JAVA関連のことを調べてみた
目次

【Java】ABC049C_Daydream #AtCoder

自分用にAtCoderの解答をまとめていきます。誤った情報があったら、申し訳ございません。

## 覚えること

– StringBuilderクラス
StringクラスはImmutable(不変)なクラスであるため、変更ができない。そのため、StrigBuilderで変更できるようにする。今回の例だと、reverseメソッドで逆順にする。toString()でString型に戻すこともできる。

– startWithメソッド
Stringクラスのメソッド。文字列が指定された部分文字列で始まるかどうかを判定することができる。
– 逆から考える
今回の例だと、前から考えるとprefixな関係になってしまう。そのため、逆から考えると、楽に処理することができる。

## コード
“`java:ABC049C_Daydream
import java.util.Scanner;

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

try (Scanner sc = ne

元記事を表示

VSCodeでJavaを動かしてみる(Mac)

# 1.Javaのインストール
 まずはJavaをインストールしましょう

ダウンロードサイト
https://www.oracle.com/java/technologies/downloads/?er=221886#jdk22-mac

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3500655/e58165b6-98e5-daf0-a5fe-50a004a79f99.png)

どの製品をダウンロードするかは、以下のサイトを参考にしました

参考サイト
http://www602.math.ryukoku.ac.jp/OOProg/jdk-mac.html

# 2.VSCodeのインストール

VSCodeをインストールしましょう

https://code.visualstudio.com/download

次に、拡張機能「Java Extension Pack」をインストールしましょう

参考サイト
https://qiita.com/aoyaman/items/cd

元記事を表示

LINE Notify for Java 自分用メモ

Line Notify

【事前準備】
①[Line Notify公式サイト](https://notify-bot.line.me/ja/)でTOKENを取得
②Line Notifyをグループに招待

“`java
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URLEncoder;
import java.net.URL;
import java.util.Scanner;

public class LineNotify {

// LINE Notify トークン
private static final String TOKEN = “YOUR_TOKEN”;
// LINE Notify APIエンドポイント
private static final String URL = “https://notify-api.line.me/api/notify”;

private static Stri

元記事を表示

Javaで「多次元配列の初期化」の動作を確認してみた

# 概要

Javaで「多次元配列の初期化」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/start/array/index8.html

# 実装

以下のファイルを作成しました。
“`JSample8_1.java
class JSample8_1{
public static void main(String[] args){
int[][] num = {{87,54,67}, {76,92,48}};

for (int i = 0; i < 2; i++){ for (int j = 0; j < 3; j++){ System.out.println("num[" + i + "][" + j + "] = " + num[i][j]); } } } } ``` 以下のコマンドを実行しました。 ``` $ javac JSample8_1.java $ java JSample8_1 num[0][0] = 87 num

元記事を表示

【Java】インターフェースのdefaultメソッド衝突問題をアドホックに解説する

## README
– この記事の内容はあくまで”Java Sivlerの試験で問題を解くためのもの”です
**正しい情報ではないので注意**

## はじめに
### 経緯
Java Silverの勉強してる時に、Interfaceのdefaultメソッドの衝突問題が出てくる。
これがまあ自分にとっては分かりづらい。
自分の直感に対して、出力の違うことがいっぱいある。
そのため、自分のためにイメージ図を作成して覚えることにした。

### ゴール
以下のようなコードの挙動が説明できるようにする。

– 親クラスのInterface vs 子のInterface
“`java
interface InterfaceWithSuper {
default void hoge() {System.out.println(“this is interfaceWithSuper hoge”);}
}

interface InterfaceWithChild {
default

元記事を表示

MongoDBのインデックスとは

## はじめに
業務でMongoDBを使用しており、今一度インデックスについて理解を深めるため記事にしようと思います。

## インデックスとは
インデックスとはクエリの高速化、つまり**DBから欲しいデータをより早く取得するための技術**です。

わかりやすい例として図書館がよく挙げられます。
本が無造作に散らばっている図書館で本を探そうとするところを想像してみてください。時間がかかりますよね。そこで活躍するのがインデックスで、図書館の目録のような役割をして、必要な本を直接案内してくれるみたいなイメージです。

## インデックスの種類
### 単体インデックス
単体インデックスは、コレクションの1つのフィールドに対して作成されるインデックスです。このインデックスを使用すると、そのフィールドの値に基づいてドキュメントを迅速に検索できます。
“`java
db.collection.createIndex({ user_id: 1 });
“`
このコマンドは user_id フィールドに昇順の単体インデックスを作成します。1は昇順、-1は降順を表します。
**単体のフィールドに基

元記事を表示

Ubuntu環境でOpenJDKインストール

# はじめに
Ubuntu環境でOpenJDKをインストールする手順を整理しようと思います。

# 環境
Ubuntu 22.04 LTS

# 事前準備
事前にaptをアップデートしておきます。
“`console
$ sudo apt update
“`

# OpenJDKインストール
OpenJDKをインストールする手順は以下のようになります。

## コマンドを実行してOpenJDKをインストール
`$ sudo apt install openjdk-{バージョン}-jdk`コマンドを実行して、OpenJDKをインストールします。
`{バージョン}`は、インストールするOpenJDKのバージョンを入れます。
以下の例は、OpenJDK 21をインストールするコマンドです。
“`console:インストール例
$ sudo apt install openjdk-21-jdk
“`

## インストール完了を確認
Javaのバージョンを確認することでインストールが完了できたことの確認ができます。
“`console:バージョン確認
$ java –version

元記事を表示

Androidビルドエラー解決方法「The binary version of its metadata is X.X.X, expected version is X.X.X」

こういうエラーの解決方法

– **Class ‘XXX’ was compiled with an incompatible version of Kotlin.The binary version of its metadata is 1.8.0, expected version is 1.6.0**

意訳

– パッケージ「 Kotlin `1.8.0` が欲しいよ〜。 君が持ってる `1.6.0` じゃ古すぎて嫌だよ〜。」

どうすれば良い?

– 必ずしも `1.8.0` ぴったりを用意する必要はなく、少し新しめの Kotlin を用意すれば解決することが多いです。ただし**コピペで終わるような解決策がない**のでちょこっと知識が必要です。急がば回れです。

# Kotlinを新しくしたいだけなのに…

面倒なたらい回しが始まるので覚悟しましょう。数字は今回適当なのでエラーを見ながら設定しましょう。

– パッケージ 「Kotlin `1.8.0` が欲しいよ〜」
– Kotlin 「KGP `1.8.0` が欲しいよ〜」
– KGP 「Gradle `7.3.3`

元記事を表示

【備忘録】spring.jpa.hibernate.ddl-autoで大失敗した話

現在アサインしているプロジェクトでは、Springbootを使用しているのですが、設定の中身を理解せずにいじったことで大失敗を犯してしまいました。
大失敗とは何かというと、プロジェクトのDB上のテーブルをほぼ削除してしまうという、とんでもなく恐ろしい事でした。(まぁ、言われた通りにいじっただけなので自分が完全に悪かったというわけではないと思いたい…)

spring.jpa.hibernateとは

application.propertiesファイルに書いて、DBの設定を行うことが出来るものです。
詳しくはまた別記事で纏めようと思います。

ここでは一旦、「DBを色々いじれるもの」という理解で良いかと思います。

spring.jpa.hibernate.ddl-auto に設定可能な値

この値では、データベーススキーマ(テーブル)を設定することが出来ます。

・none
➙何もしない
・validate
➙検証をする。 しかしデータベースには変更を加えない。
・update
➙アプリケーション起動時に、Entity

元記事を表示

【備忘録】nullポチェックのお話

前回投稿した記事で、NullPointerExceptionについて整理しました。
(https://qiita.com/saionji-kimochi/private/bdc1671568139352ff84)
↑の記事のまとめで、仕様上nullになる可能性がある場合はnullポチェックを行ってエラー落ちを回避する必要があると書きました。

今回はそのお話です。

やり方

一般的なやり方は、「if文で参照元がnullでなければ参照を行わない」という条件を加えることだと思います。

というか、それ以外知りません。あれば教えてください。

以下具体例です。

“`java
int sample = null;

if(sample != null){
System.out.printLn(sample * 3);
}
“`
このように、中身がnullではない時にのみそれを参照するようにすればnullポで落ちることを回避できます。
また、String型は上記の方法に加えて、isEmpty()メソッドも使うことが出来ます。
“`java
String samp

元記事を表示

【備忘録】NullPointerException との付き合い方

【備忘録】NullPointerException との付き合い方

今まで、NullPointerExceptionが出てきたときは何となくで対応していました。

業務をこなしていく中で段々と何について怒られているのか分かってきたので、整理もかねて纏めていきます。

NullPointerException とは

NullPointerException とは『NullPointerException は、java.lang. RuntimeException クラスのサブクラスで Java プログラムの実行中に参照型変数を参照しようとした時に null 値であった場合、スローされるランタイム例外です。』とのことです。

要は、nullのものからはgetterとかは使えませんよ~みたいなことです。
次で具体的にまとめていきます。

具体例

例えば、下記のようなクラス型の配列を使用するとします。

“`java:sampleClass.java
public class nullpo {
public static cl

元記事を表示

【備忘録】.isEmpty()の話

以前投稿した記事で、String型のnullチェックは.isEmpty()を使えばいいということを書いたんですが、どうやらこのメソッド2つあるらしいのでその違いと注意点をまとめていこうと思います。

String.isEmptyとStringUtils.isEmpty

isEmptyメソッドには「String.isEmpty」と「StringUtils.isEmpty」があるそうです。

共通点としては、どちらも『空文字判定をしてくれる』という点でが挙げられます。

相違点

では、どういった点が異なっているのか。
答は『null判定をしてくれるか否か』という点にあります。

StringUtils.isEmptyは空文字の場合trueを返すのと同時に、nullの場合もtrueを返してくれます。

一方で、String.isEmptyはnullの場合はNullPointerExceptionが発生してしまいます。

この違いを明らかにしておかないとnullチェックの意味を成せないということになってしまいますね。

【備忘録】プリミティブ型とラッパークラス

私は業務に入ってもうすぐ1年たつことになるんですが、いまさらプリミティブ型とラッパークラスの違いを理解した(6割ぐらい)のでここにまとめていこうと思います。

絶対に研修でもやったんでしょうけど、実際にやってみて困りださないと理解できないもんですねぇ。

プリミティブ型

プリミティブ型ってのは この記事によると


プログラミング言語などが仕様として提供する基本的なデータ型。または、定義に他のデータ型を用いない独立したデータ型。

ということらしいです。

どんな方があるかは、いくらでもまとめているサイトがあるのでそちらを参照してもらって、、、

頭文字が小文字になってるやつがそれです。(int,longとか)

ラッパークラス

一方で、ラッパークラスは

Spring Bootで設定ファイルを外部化したいし、設定値を再起動なしで変更したい

# 要件
– properties形式のファイルをclasspassの外、サーバ内の任意の場所に保持したい
– ファイルの内容書き換え時のプログラムでの再読み込みを再起動なしで実現したい

# 実装
外部ファイルのパスをapplication.propertiesに書いておいて、そのパスにプログラム内でアクセスする仕組み。

“`java
private final ResourceLoader resourceLoader;

public class readingFile(){
//1.設定ファイルオープン,2.読み込み
Properties propertiesFile = this.getSettingFile();
//3.設定値読み込み
String value1 = propertiesFile.getProperty(“example.value.first”);
//4.他クラスでプロパティファイル設定値を使いたい時はこのクラスから引き渡す
Util.somethingUtility(value1,propertie

【Java】インタフェースの実装を覚える

インタフェースは抽象クラスと同じく抽象メソッドを扱いますが、この2つは何が違うのか、覚えるための自分用メモです。

# インタフェースとは?
インタフェースは、抽象クラスと違って継承のためのフィールド変数(定数は可)やコンストラクタ、具象メソッド(Java8から“`default“`メソッドは可)は記述せず、抽象メソッドのみを記述します。
(メソッドに自動で“`public abstract“`が付きます。)
“`java:Talker.java
public interface Talker {
// 挨拶する
void hello();
// 自己紹介する
void introduceMyself();
// 以下話すパターンを追加する
}
“`
# ポリモーフィズムの情報隠蔽を実現してみる
Javaのポリモーフィズムの実現を維持するための「情報隠蔽」では、実際に使われるクラス(実装したクラス)を使うクラスから非公開(隠蔽)にし、公開部分をインタフェースで記述します。
## パッケージを宣言する
情報隠蔽を実現するには、インタフェ

Javaで「多次元配列を作成する」の動作を確認してみた

# 概要

Javaで「多次元配列を作成する」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/start/array/index7.html

# 実装

以下のファイルを作成しました。
“`JSample7_1.java
class JSample7_1{
public static void main(String[] args){
int[][] num = new int[2][];

num[0] = new int[3];
num[0][0] = 78;
num[0][1] = 64;
num[0][2] = 59;

num[1] = new int[3];
num[1][0] = 58;
num[1][1] = 92;
num[1][2] = 82;

for (int i = 0; i < 2; i++){ for (int j = 0; j < 3; j++){ System.out

【報告】JavaSilver合格しました。

# はじめに
今まで、C言語などを学んで来て、「オブジェクト指向プログラミング」について触れてくることがありませんでした。そこで、大規模システム開発でも使われるJavaを学習しようと思い始めました。

オブジェクト指向 : 未学習
プログラミング経験 : あり
勉強時間 : 約40時間
![スクリーンショット 2024-06-15 1.58.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3788663/8b460752-6345-afeb-0e0e-a9493e704844.png)

# 使用した参考書
あまり覚えていませんが、ラムダ式などの深い内容はあまり載っていなかったような….
![スクリーンショット 2024-06-15 1.54.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3788663/471cfc8b-3768-9497-fba7-a6e49c231a56.png)
引用 :https

SpringBootTest + JUnit5のbeforeAllでDataSourceをinjectionしてテスト用DB初期化

# 解説

下記ドキュメントにあるように、“`@ExtendWith(SpringExtension.class)“`(“`@SpringBootTest“`はこれを含む)とJUnit 5を組み合わせる場合、テストメソッドやライフサイクルコールバックにinjectionが可能となっている。

> Dependency injection for test constructors, test methods, and test lifecycle callback methods. ? See Dependency Injection with the SpringExtension for further details.
>
> https://docs.spring.io/spring-framework/reference/testing/testcontext-framework/support-classes.html#testcontext-junit-jupiter-extension より抜粋

> Specifically, the “`SpringEx

【Java】言語未経験者が2ヶ月でJava Silver SE11に合格した話

# ■はじめに
Java Gold SE11取得を決意したついこの頃、そういえばと思い立って言語未経験から2ヶ月でJava Silver SE11を取得した時の勉強方法をまとめてみました。

# ■この記事の対象者
・これからJavaの学習を始める方
・Java Silverの資格取得を考えている方

# ■もくじ
**1.資格取得を決意した理由**
**2.試験日までのスケジュール**
**3.学習ロードマップ**
**4.まとめ**

# 1.資格取得を決意した理由
元々開発志望で会社にアピールするためにJava Silverの資格取得を決意しました。
なんでJavaなの?といった疑問には、やはりJavaの案件が聞いていた中で多かったからという単純な理由でしかありません。
そもそも言語にこだわりはなく、開発をやりたかったから取っ掛かりはなんでも良かったというのもある。

# 2.試験日までのスケジュール
**学習期間:2ヶ月**
※仕事をしながらだったので1日の勉強時間は大体1~2時間程度、合計で多分120時間ぐらい

**学習内容:**
・1日目
勉強方法リサーチ&試験日の確定

グラフから差枚数計算するサイトを作ってみた

https://diffnumcal.onrender.com/home

# 使用技術
Java(練習のために使用)
SpringBoot (練習のために使用)
Javascript
HTML
CSS
# スロットの説明
### 差枚数と設定
スロットマシンは、メダルを入れてレバーを叩く(もしくはボタンを押す)と、リールが回転し、絵柄が揃うことでメダルを獲得できるゲームです。

差枚数とは、その名の通り、投入したメダルの枚数から払い出されたメダルの枚数を引いた値のことです。スロット台の上にあるディスプレイには、この差枚数の増減がグラフで表示されます。

設定とは、スロットマシンの当選確率を調整する数値のことです。設定は1から6まであり、数字が大きくなるほど、大当たりであるBIGボーナスやREGボーナスの当選確率が高くなります。
(架空のスロット設定表。)
![スクリーンショット 2024-05-10 1.34.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3788663/e83b6800-800