- 1. 【Java】継承についてメモ
- 2. 【Java・SpringBoot・Thymeleaf】エラーメッセージを実装(SpringBootアプリケーション実践編3)
- 3. モンティ・ホール問題をJavaで実験してみる
- 4. 【Java】オブジェクト指向メモ
- 5. Javaで順列(階乗通り・n!通りの列挙・全探索)
- 6. Spring Boot を使ったアプリケーション開発
- 7. Java スロットゲーム
- 8. windows環境でjavaのprocessbuilderからshell scriptを実行させるための設定
- 9. StreamAPIの話
- 10. 【Java・SpringBoot・Thymeleaf】データバインド(SpringBootアプリケーション実践編2)
- 11. SpringBootでJacksonを使おうとしてちょっとハマった
- 12. 【Java】getter・setterのメモ
- 13. 【Java】戻り値についてのメモ
- 14. 【Java】引数についてメモ
- 15. SpringBootことはじめ 1.SpringBootでHello World REST API
- 16. mainメソッド・メソッドの呼び出し
- 17. 【Java】カプセル化
- 18. 【Java】環境構築 VSCode
- 19. 【Java】new演算子
- 20. 【Java】フィールド変数
【Java】継承についてメモ
# 継承
## 継承とは
**「もともとある[クラス]を利用して、新しいクラスを生み出すこと」**です。
[オブジェクト指向]の勉強でもやりましたが、「この[クラス]はほとんど同じだけど、ここだけちがいます」っていう[クラス]をつくるときに使います。## スーパークラスとサブクラス
[オブジェクト指向]的にポケモンで考えてみます。
ポケモンという、「身長、体重、名前、タイプなどのデータをもったもの」の[クラス]を継承して、ハガネール という[クラス]を生み出した場合だと– **スーパークラス(親クラス)** = Pokemon [クラス]
– **サブクラス(子クラス)** = Haganeel [クラス]ということになります。
## 継承する方法
サブクラスを作成する時、以下のように「 **extends スーパークラス名** 」を記述して作ります。
そのあとで、以下のように「**サブクラス にしか持っていない機能**」を記述していきます。“`
class サブクラス名 extends スーパークラス名 {
親クラスと違う処理
【Java・SpringBoot・Thymeleaf】エラーメッセージを実装(SpringBootアプリケーション実践編3)
ログインをして、ユーザー一覧を表示するアプリケーションを作成し、
Springでの開発について勉強していきます?
前回のデータバインドに引き続きバインド失敗時のエラーメッセージを実装します前回の記事?
[]()#エラーメッセージを実装
* src/main/resouces配下に**`messages.properties`**というファイルを作成
* その内に、**各フィールドに対応するメッセージを設定**する##パターン1
* **`typeMismatch..<フィールド名>=<エラーメッセージ>`** “`src/main/resources/messages.properties
typeMismatch.signupForm.age=数値を入力してください
typeMismatch.signupForm.birthday=yyyy/MM/dd形式で入力してください
“`##パターン2
* **`typeMismatch.<フィールド名>=<エラーメッセージ>`**
* 複数のオブジェクトでageやbirthday
モンティ・ホール問題をJavaで実験してみる
最近統計学に関する本を読んでいます。
その中に[モンティ・ホール問題](https://ja.wikipedia.org/wiki/%E3%83%A2%E3%83%B3%E3%83%86%E3%82%A3%E3%83%BB%E3%83%9B%E3%83%BC%E3%83%AB%E5%95%8F%E9%A1%8C)という問題を紹介しています。ちょっと直感に乖離しているの問題なので、プログラミングで実験してみよと思いました。
そのまま書くのもつまらないので、
[FunctionalInterface](https://docs.oracle.com/javase/jp/8/docs/api/java/lang/FunctionalInterface.html)や[Strategy Pattern](https://en.wikipedia.org/wiki/Strategy_pattern)を使って遊びました。## 1 問題について軽く
そのままウィキからコピーします。
– (1) 3つのドア (A, B, C) に(景品、ヤギ、ヤギ)がランダムに入っている。
– (
【Java】オブジェクト指向メモ
# オブジェクト指向
## オブジェクト指向とは
「複雑な問題を効率よく解決するため」に生まれた考え方です。具体的には、、
**「作りたいもの(オブジェクト)を、一つ一つの部品に分けて作っていくこと。」**
オブジェクト指向を、「ポケモン」に例えてみます。
オブジェクト指向によるゲーム設計をした場合、ポケモンを捕まえる流れを考えると– **草むらで敵のポケモンと遭遇する**
– **自分のポケモンを召喚する**
– **戦って体力を減らす**
– **アイテム欄から「モンスターボール」を使う**
– **捕まえたらポケモン図鑑に登録される**とそれぞれ **作業や処理を分担させて、一連の流れを完成** させます。
つまり、「 オブジェクト指向プログラミング 」は、**「作業を分担して、様々な処理やデータの組み合わせで一つのものをつくったり、問題の解決を目指したプログラミング」**という意味です。
反対に、オブジェクト指向によらない場合は、上記の作業を **これら一連の流れをワンセットの処理として作ります。**
どちらもそれぞれメリットデメリットがありますが、**
Javaで順列(階乗通り・n!通りの列挙・全探索)
n!通りを列挙したいときに、
Javaではc++でいうnext_permutationのようなものがないので
自作する必要があります。#### 実装
“`java:
import java.util.Arrays;public class Main {
private static void permutation(int[] seed) {
int[] perm = new int[seed.length];
boolean[] used = new boolean[seed.length];
buildPerm(seed, perm, used, 0);
}private static void buildPerm(int[] seed, int[] perm, boolean[] used, int index) {
if (index == seed.length) {
procPerm(perm);
return;
Spring Boot を使ったアプリケーション開発
![Spring.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654025/04cb42fa-99d3-8d2c-bb0e-47be85895bf4.png)
#1, 使用言語
###Spring Bootを利用したアプリケーション開発には
>1,**Groovy**によるアプリケーション開発
>2,**java**によるアプリケーション開発
の大きく2つに分けて考えることができます。
#2, Spring Boot CLI の用意
Groovyを利用したアプリケーション開発には、**「Spring Boot CLI」**というソフトウェアを使います。
**環境変数Pathの設定**も必要です。#3, Groovy スクリプトを作成
![code.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654025/4b51270e-9253-06e6-25b8-d5ea5639ce89.png)
#4, a
Java スロットゲーム
処女作です。
何かアウトプットしてみたいなと思っているときに、パチスロの広告を見て思いつきました。意識したことは下記2点。
・何も見ずに書く
・if文、for文を必ず使うテキスト1冊読んだだけの初心者ですので、お手柔らかにお願いします。
##処理の内容
①箱3つの配列を用意
②それぞれにランダムな数字を格納
③3つの数字が等しいかを比較
④等しかった場合、それらが7であるかを判定
⑤結果を出力“`Java:slot.java
public class Slot {
public static void main(String[] args){
int slotArray[] = new int[3];
for(int i=0; i<3; i++){ slotArray[i] = (int)(Math.random() * 10); System.out.print(slotArray[i]); } if(slotArray[0] == slotAr
windows環境でjavaのprocessbuilderからshell scriptを実行させるための設定
1. Install [Git for windows](https://gitforwindows.org/). (If you have installed [sourcetree](https://ja.atlassian.com/software/sourcetree), this is done.)
2. Add `;.SH` to the end of `PATHTEXT` from Control Panel > System > Advanced > Environment Variables.
3. Add `C:\Program Files\Git\usr\bin;C:\Program Files\Git\mingw64\bin` to the end of `PATH` from Control Panel > System > Advanced > Environment Variables.
StreamAPIの話
##StreamAPIの話
ストリームAPIとは並列化、直列化
解りやすい記事
###mapの説明が解りやすい
“`java
public interface Stream
…
Stream map(Function mapper);
“`map 戻り値ありのコール関数(戻り値と引数あり)を渡して結果を
ストリーム型に変換するもの
###java.util.stream 順次/並列ストリームについて理解する(直列と並列が解りやすい)
https://qiita.com/nmby/items/52d1b0e2dad5df475737おまけ
javaをVSコードで実行する
※VSコードの説明、コンフィグはユーザー単位、フォルダ単位がある
※プロジェクトを作成してから作成した方が良い
【Java・SpringBoot・Thymeleaf】データバインド(SpringBootアプリケーション実践編2)
ログインをして、ユーザー一覧を表示するアプリケーションを作成し、
Springでの開発について勉強していきます?
前回の記事で作った画面に引き続き、データバインドを実装します前回の記事?
[【Java・SpringBoot・Thymeleaf】ログイン・新規登録画面作成(SpringBootアプリケーション実践編1)]
(https://qiita.com/suema0331/items/5e69a90a2f18ea3b5b67)#データバインドとは?
* 画面の入力項目とオブジェクトのフィールドの**マッピング(割り当て)**を行うこと
* 画面から渡された値を、**フィールドのデータ型に合わせて変換**してくれる##Springでのデータバインド
* Springでは、データバインドをある程度自動で行ってくれるが
* ex: 画面からテキストで入力した数値を、オブジェクトのint型に変換するなど
* データの型変換が難しい場合は、**アノテーションを使う**ことでバインドできます#データバインド実践!
構成は以下のようになっています“`html
Pro
SpringBootでJacksonを使おうとしてちょっとハマった
#Jakcson使おうとしてちょっとハマった。
SpringBootでトークンによる認証つきのRestfulAPIを開発中。
認証エラーが起きた時のエラーレスポンスをjacksonで行おうと思い、bulid.gradleにjacksonの設定を記述しコンパイル。しかし以下のエラーが吐かれてしまった。“`
Caused by: java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ser/std/ToStringSerializerBaseCaused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.ser.std.ToStringSerializerBase
“`#原因究明
###1. 依存ファイルの記述が足らない?
この時点での自分のbuild.gradleは以下のようになっていた。“`
implementation ‘com.fasterxml.jackson.core:jackson-dat
【Java】getter・setterのメモ
# getter・setter
## getter・setterとは
結論から言うと、private になっている[フィールド変数]を– **変更するのが setter**
– **取得するのが getter**です!
なぜ、どうして、どのように使うのかというのは、カプセル化したものを扱うためです。## getter
**getter** は **「[フィールド]の値を取り出すだけの[メソッド]」** です。前述の通り、private に設定された[フィールド]は外部からアクセスが出来ないので、[メソッド]を介してアクセスする必要があり、それが **getter** というわけです。
### getter の書き方
こちらがgetter [メソッド]の書き方になります。“`
//フィールド変数を定義
private データ型 フィールド名// getter
public データ型 getフィールド名() {
return this.フィールド名;
}
“`
こちらは、number という[フィールド変数]に対して作った getter のサンプルです
【Java】戻り値についてのメモ
# 戻り値 ( 返り値 )
[メソッド]には、[メソッド]の呼び出し元に[メソッド]からの特定の情報を返すという仕組みがあり、その返される特定の情報のことを 「戻り値( 返り値 )」return 値 の部分 といいます。##戻り値とは?
個人的に一番わかり易い例えだったのが「 **ググる** 」という行為に例えた場合です。1. 「[引数]」:入力された検索ワード
2. 「[メソッド]」を実行:検索ボタンを押す
3. 「**戻り値**」:条件に合う記事情報が **配列**として返却戻り値の型 = return文に指定する処理結果の型
## 戻り値の返し方
「戻り値」がある場合は、**「処理の結果を返す必要」**があります。返し方は以下です。
“`
1. return文 を記述
2. 処理結果を呼び出し元へ返す
“`その時、 戻り値の型 と return文に指定する処理結果の型 が合ってなければなりません。
## void
メソッドの処理結果を呼び出し元へ返す必要がない場合は、
戻り値の型を**「 void 」** と記述して、戻り値なしの[メソッド]にし
【Java】引数についてメモ
# 引数
引数とは、「このデータを使って処理をして!」と[メソッド]へ受け渡す値を **引数** といいます。引数は一つだけでなく、 複数指定することができ 、複数指定する際は ,(カンマ) で区切ります。
## サンプルコード
ポケモンで敵トレーナーに勝負を挑まれたときのメッセージを出力する[メソッド]をつくってみました。
複数の引数を与えて処理を行います。【Main.java】
“`java
//【Main.java】
public class Main {
public static void main(String[] args) {//引数に使う値をここで作ってます
EnCount enCountTrainer = new EnCount();
String trainerJob = “ジムリーダー”;
String trainerName = “ミカン”;
String enemyPokemon = “ハガネール”;
String myPokemon = “ハッサム”;
SpringBootことはじめ 1.SpringBootでHello World REST API
# はじめに
[前回](https://qiita.com/suganury/items/c9284a13b96f0a626d4d)、SpringCLIでHelloWorldのREST APIを作成したので
今回はEclipseのプロジェクトからSpringプロジェクトを作成して、Hello World REST APIアプリを作成してみる。# 環境
|ソフトウェア|バージョン|
|:–:|:–:|
|OS|Windows10 Pro|
|Java|JDK12|
|Eclipse|2020-12 M1|
|SpringBoot|2.4.0|
|Spring Tool Suite (STS) |4.8.1|# 実施
## 1. Eclipseを入手
まずはEclipseの入手から。
[Pleiades](https://mergedoc.osdn.jp/index.html#/pleiades.html)のページからEclipse最新版(2020-12)を入手。
このEclipseには初めからSpring Tool Suite (STS) 4.8.1プラグインが入ってい
mainメソッド・メソッドの呼び出し
# mainメソッド
mainメソッドは 特別な[メソッド]で,ほかの[メソッド]と比較して以下のような特徴を持っています。
– **Javaのプログラムで一番最初に処理が行われる**
– **一つのクラスに一つしか記述することが出来ない**
– **Stringの配列、 argsという名前の 引数 を持っている。**## mainメソッドの記述
記述の仕方は以下になります。“`java
public static void main(String[] args) {
…
…
}“`
また、mainメソッドは
明確な使い所はありますが、今は頭の片隅にでも入れておきましょう。## メソッドの呼び出し(メソッドの実行)
### メソッドの呼び出しとは
作成したクラスの[インスタンス]を生成してから 以下のような形式で[メソッド]の呼び出しを行うこと です。“`
インスタンス名.メソッド名();
“`例えば下記に示すものは、[インスタンス]名 「 **pokemon** 」 が 「** attack **」 という名前の[メソッド]を呼び出す例で
【Java】カプセル化
# カプセル化
## カプセル化とはオブジェクト指向の重要な機能の1つで、
– **大切なデータが他の人が操作した時変わってしまわないように**
– **クレジットカードの情報が外にもれないように**
– **ネットで勝手に買物をされないように**そのためには、外部からそれら「見られたくない」、「変更されたくない」情報に対しては**外部からのアクセスを制限する**必要があります。
つまり、– **「オブジェクトの情報が外部に公開しないようにすること」**
– **「使い手に必要ないものを隠してしまうこと」**
– **作成したクラスに対する アクセス方法を限定すること**それが**カプセル化**です!
### カプセル化の必要性
上記のような、作成したクラスのデータ([フィールド変数])や処理(メソッド)を他のクラスから隠蔽するには、情報を **[アクセス修飾子] の private** でクラスの外部から変更できないように設定する必要があります。また、「カプセル化」することによって、作成したクラスが何をしてくれるクラスなのかが 明確 になり、**他のクラスか
【Java】環境構築 VSCode
VSCode上でJavaの開発環境を構築する方法について:writing_hand:
Go や JavaScript をVSCodeで動かして勉強しているので、「ついでにJavaの開発環境も作っとこ~」と軽い気持ちで始めたのですが、意外と面倒でした。。。##1.VSCodeのダウンロード
Goの学習を始めるときにダウンロードしていました。
→[【Go】開発環境構築 Windows](https://qiita.com/zmym/items/6fba441b369f30da23b4)##2. プラグインのインストール
Javaで検索し、以下のプラグインをインストールしました。– Java Extension Pack
– Java Test Runner
– Debugger for Java##2. JDKのインストール
JDKは既にインストールしていたのですが、VSCode上では「JDKのバージョンが古い」とエラーが出ました。
プラグインの関係上、JDKのバージョンが11以上でないと動作しないようです。解決策として、
– 設定でpathを設定
– 最新のJDKを
【Java】new演算子
# new演算子
new演算子は、Javaのクラスを **[インスタンス化]** するために利用されます。
**new演算子に続けて、クラスのコンストラクタを呼び出して実行するコードを記述すると、クラスのインスタンスが生成されます。**## new演算子の使い方は以下のとおりです。
**コンストラクタはクラスと同じ名前を付ける決まり**になっています。
なので、**実際には以下のように書いてください。**“`
//クラス名とコンストラクタ名は同じにしましょう!クラス名 変数名 = new コンストラクタ名();
“`システム開発の現場では、[インスタンス化] することを「newする」とか言ったりするみたいです。
[インスタンス化]:https://qiita.com/takahirocook/items/ec01cdcbb440cf0d1cc4
[アクセス修飾子]:https://qiita.com/takahirocook/items/e51b0b9d37d95ad587fe
[フィールド変数]:https://qiita.com/takahirocook/it
【Java】フィールド変数
## 【フィールド】フィールド変数
フィールドまたは フィールド変数 とは、クラス内の 変数 のことです。
先程のコードのここの部分です。“`java
//クラス
public class HelloWorld {
// フィールド ここの部分
private String printHello;
// コンストラクタ
public HelloWorld() {
“`
###フィールドの書き方– フィールドを宣言するとき、**「 public 」**や**「 private 」**などの **アクセス修飾子** を記述します。
– **アクセス修飾子を省略することが可能**
– **初期化を省略することが可能。**(その場合は、デフォルト値が入ります。)フィールドとして宣言した変数は、**コンストラクタやメソッド内で変数を宣言することなく、そのクラス内であればどこからでも値を参照したり更新したりすることができます。**
[インスタンス化]:https://qiita.com/takahirocook/items/ec01cdcbb440