- 1. 「SpringBootで日付計算処理アプリ」の続き
- 2. サーブレット / JSP Webアプリケーションについて
- 3. static メソッド、非 static メソッドについて
- 4. and演算子とor演算子について
- 5. 【Java アルゴリズム修行⑱】文字列探索 ~BM法~
- 6. LambdaでJava入門しようとしてハマった
- 7. 【Java アルゴリズム修行⑰】文字列探索 ~KMP法~
- 8. リバーシの操作(縦横)
- 9. 【Java】AtCoderのABC-201に参加しました(レート:264→272)。
- 10. 【Java】OptionalのorElseの使い方
- 11. 【SpringBoot入門】リファレンス見ながら環境構築
- 12. Quarkus+Redisで簡単なアプリケーションを作る
- 13. MapperクラスのSQLで不等号を使いたい(MyBatis)
- 14. Javaの配列とリスト配列で配列の要素を数える方法が違います
- 15. 関数を評価する前もしくは評価した後のセルの値が欲しい
- 16. spigotプラグインを作る (目次)
- 17. spigotプラグインを作る (1)
- 18. 最新バージョンのJavaをmacにインストールするところでハマったのでメモ
- 19. [Java]Spring + MySQL を用いたREST API作成メモ
- 20. 燃やす埋める問題とProject Selection Problemの整理
「SpringBootで日付計算処理アプリ」の続き
前回「[SpringBootで日付計算処理アプリ](https://qiita.com/hhujk5/items/ba8c7c73ba6c957c3e35)」で課題だった「計算結果の表示方法」が改善できましたので投稿させていただきます。
##環境
macOS Big Sur
Java 11
Spring Boot 2.4.5
SpringToolSuite4
gradle
MySQL
MyBatis##解決方法
計算結果を格納する先として別途エンティティクラスResultを作成し、
当Resultクラスのフィールドとして計算結果を表示させます。
※前回の計算式を格納するエンティティクラス「DateCalc」の名前を「DateFormula」に変更しています。##各ソースコード(重要部分のみ)
###Result.java“`java
package com.example.demo.entity;import java.time.LocalDate;
import lombok.Data;
@Data
public class Result {priva
サーブレット / JSP Webアプリケーションについて
***
####● Web アプリケーションの設計を考える前に、基礎となるオブジェクト指向設計、インターネット通信の仕組みについて記述する***
###■ オブジェクト指向設計の基本について
オブジェクト指向設計とは…
全てをモノとして捉えて設計するための考え方、設計した内容を正しくプログラムに落とし込むことができるのがオブジェクト指向言語の特徴1つの役割を明確にして持たせることで情報が共通化され、拡張性や再利用性が高まり使いやすくなる、大規模プロジェクトに向いている理由もここにある
######■ オブジェクト指向設計の原則
オブジェクト指向設計において守るべき5つの原則「 SOLID の原則」がある
1.SRP:単一責任の原則
2.OCP:オープン / クローズドの原則
3.LSP:リスコフの置換原則
4.ISP:インターフェース分離の原則
5.DIP:依存性逆転の原則***
1.単一責任の原則
SOLID の原則の根幹となる原則、この原則を順守することで残り4原則についても自然と設計することができるクラスは1つのことだけに責任を負うこと、つまり1クラスに1つの
static メソッド、非 static メソッドについて
***
###■ static 修飾子とは
static 修飾子とは、インスタンスを通してではなく、クラス(属するクラス、そうでないクラスともに)から直接呼び出すことができるようになる修飾子Java のクラスが持つことができるメソッドは主に2つ、static メソッド(クラスメソッド)と非 static メソッド、(インスタンスメソッド)である
インスタンスメソッドは、その振る舞いを持っているインスタンスを生成して呼び出す、言わばインスタンスに動いてもらう、というイメージだが、クラスメソッドはその名の通りクラスに直接属している(クラスの持ち物)
クラスメソッド内ではインスタンスに属するもの(インスタンスの持ち物)は一切参照できない、つまりインスタンスのフィールド、メソッド、同一クラス内の非 static なメソッド、this、super は使用できない(自クラスのインスタンスを生成して使用することは可能) static フィールドや他の static メソッド、引数を利用する
クラスの持ち物であるため、呼び出すときは原則として クラス名. static メソッド名 と指定する
and演算子とor演算子について
# and演算子とor演算子について
##and演算子
論理演算子は複数の条件式を組み合わせた式を評価してtrueまたはfalseを返します。
“`
if(A && B){} //論理積、AとBが共にtureならtrue
“`「A&&B」だった場合、Aの条件式がtrueかつBの条件式がtureだった場合は式全体の評価がtrueとなる。
そうでなかった場合はfalseとなります。“`
if(A & B){}
“`ちなみに、「A & B」の場合はAがtrueの場合でも、Bを評価します。
##or演算子
or演算子はAもしくはBがtrueの場合、条件式全体でtrueを返します。
“`
if(A || B){}
“`「A||B」の場合、Aがtrueだった場合、Bは評価せず条件式はtrueで評価します。
Aがfalseだった場合はBを評価します。“`
if(A | B){}
“`「A|B」の場合、Aがtrueだった場合でもBを評価します。
##まとめ
・and演算子はAかつBがtrueだった場合、trueを返す
・or演算子はAもしくはBがt
【Java アルゴリズム修行⑱】文字列探索 ~BM法~
###BM法とは
このBoyer-Moore法というのは、理論的にも、実践的にもKMP法より優れていて、
実際の文字列探索でも広く利用されているものだそうです。基本方針は、**パターンの末尾文字から先頭側へと照合を行う過程で不一致文字を見つけた場合に
事前に用意した表に基づいてパターンの移動量を決定する**というものになります。テキストを`ABCXDEZCABACABAC`、パターンを`ABAC`としたときの流れを見てましょう。
まずは、テキストとパターンの先頭文字を重ねた上で、パターンの末尾文字`C`に着目すると、
テキスト4文字目の`X`と不一致であることがわかります。
![スクリーンショット 2021-05-17 16.28.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521565/cd5f4512-3f50-3394-1cff-c41a784be251.png)
そのままパターンをパターンを1~3文字ずつ移動しながら照合してみましょう。
![スクリーンショット 2021
LambdaでJava入門しようとしてハマった
# 経緯
普段はNode.jsで開発していますが、LambdaでJavaを使うテストをしている方がエラーで行き詰っていたので一緒に調査しました。# 結論
Lambdaのハンドラー設定が間違っていました。
デフォルトでは、`example.Hello::handleRequest`
だったのを、
`com.example.Hello::handleRequest`
に変更したところ実行できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1162215/f1710c19-7996-6947-61f9-eb0eed391293.png)
[こちら](https://qiita.com/niwasawa/items/69bba64d7cd2d6277473)の記事を参考にしました。# 何しようとしてたの?
LambdaでJavaを使用するのが初めてだったので、まずは[こちら](https://blog.mmmcorp.co.jp/blog/2020/03/29/lambda-ha
【Java アルゴリズム修行⑰】文字列探索 ~KMP法~
### KMP法とは
[前回](https://qiita.com/kotaito/items/d1c3f84409d1527814c4)の力まかせ法では、不一致の文字に出会った場合、
パターンを移動して、パターンの先頭からテキストとの照合を行なっていましたが、
**移動の度に照合結果が先頭に戻ってしまうので、その点は非効率であるといえます。**
**そんな非効率な部分を有効活用したのがこのKMP法らしいです。**`ZABCABXACCAD` というテキストから `ABCABD`というパターンを探索するとして、
まず最初はテキストとパターンの先頭文字から順に照合を行います。
![スクリーンショット 2021-05-17 15.27.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521565/036aed5c-0269-5418-dfc0-c7c7a1f44143.png)
テキストの先頭文字 `Z`は、パターンには含まれない文字なので、不一致として、パターンを1文字進めます。
![スクリーン
リバーシの操作(縦横)
https://paiza.jp/works/mondai/a_rank_level_up_problems/a_rank_pincerattack_step2
きちんとメモ取っていこうという構え。
こういうところで「まあ正解したからいいや」と理解をおざなりにすると後の問題で詰まるのだ。まずは自己流。
“`java:Main.java
import java.util.Scanner;public class Main {
public static void main(String[] args) {
int h, w, y, x;
String[][] map;Scanner sc = new Scanner(System.in);
h = sc.nextInt();
w = sc.nextInt();
y = sc.nextInt();
x = sc.nextInt();map = new String[h][w];
【Java】AtCoderのABC-201に参加しました(レート:264→272)。
こんばんは。
2021/5/15に、AtCoderのABC-201に参加しました。
レートは以下の通りとなっています。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402487/2eb1b72d-177b-1890-4c33-e43cd9413938.png)
実は家の用事もあり、AB問題を速攻で解いて切り上げてしまいました。
が、C問題についてのミスが発生しなかった?ので、パフォーマンスは高めでした。
嬉しいようないまいちなような。。
順位は5631 / 8739でした。###A問題
3つの数列A1、A2、A3が与えられる。
これを、並べ替えることでA3-A2=A2-A1になるか?
3つしか文字列がないので、2重ループにしてチェックするなり、きれいな書き方は色々あったと思うのですが、とりあえず思いついた実装で。
1,2,3だと、以下の組み合わせがあると考えました。1
2
31
3
22
3
12
1
33
1
23
2
1改めて・・これは
【Java】OptionalのorElseの使い方
# Optionalとは
Optionalは、“メソッドの戻り値としてnullを返す可能性があることを明示的に示したいときに使用します。“
メソッドがnullを返す可能性があるということを示すことで、
そのメソッドを利用するプログラムをより安全に実装することができるようになります。#orElseの使い方
Optionalのオブジェクトは“nullの可能性があるオブジェクトの型を指定“して宣言します。
Optionalのオブジェクトには“ofNullableメソッドの戻り値を代入“します。
Optional.ofNullableメソッドの引数がnullの場合にorElseメソッドの引数の値を返します。
(以下の場合は「Nullです」を返します)
nullでない場合はnullではないその値を返します。“`java
String str = null;Optional
nullableString = Optional.ofNullable(str); System.out.println(nullableString.orElse(“Nu
【SpringBoot入門】リファレンス見ながら環境構築
# SpringBoot環境構築
## はじめに
SpringBootでWebアプリケーションを作ってみたかったので[公式リファレンス](https://spring.pleiades.io/spring-boot/docs/current/reference/html/getting-started.html#getting-started)を見ながら環境構築をやっていきます。
自分の記録用なので環境構築をしたい方は公式リファレンスを見ながらやったほうがいいと思います。。
ちなみにJavaでフレームワークを使うのは初めて。サーブレットとJSPで簡単なものを作ったことあるぐらいのレベル。## 開発環境
“`
mac osx 10.15.7
java 16.0.1
maven 3.8.2
“`
インストールの説明割愛。## Spring Boot CLIのインストール
Homebrewを使用してるので以下でインストールしました。“`
$ brew tap spring-io/tap
$ brew install spring-boot
“`## POMの作成
Quarkus+Redisで簡単なアプリケーションを作る
## 概要
最近QuarkusというJavaフレームワークの存在を知りました。
> Quarkus は、Java 仮想マシン (JVM) およびネイティブコンパイルのために作成されたフルスタックの Kubernetes ネイティブ Java フレームワークで、Java をコンテナに最適化し、サーバーレス、クラウド、Kubernetes の各環境で効果的なプラットフォームとして使用できるようにします。
https://www.redhat.com/ja/topics/cloud-native-apps/what-is-quarkusだそうです。
KubernetesネイティブなJavaフレームワークということで、マイクロサービスが流行りつつある今、個人的には将来性のあるフレームワークなのかな、と思っています。
特徴や詳しい使い方は他の方に任せます。(こちらの記事では、Quarkusのサイトで紹介されているredis-clientを使ったサンプルアプリケーションの作り方をまとめました。
Redisと接続してCRUDを行うRESTful APIアプリケーションです。↓のページに
MapperクラスのSQLで不等号を使いたい(MyBatis)
## 困ったこと
MapperのSQLをXMLに記載するとき、不等号(大なり、小なり など)を使用すると、
「要素のコンテンツは、整形式の文字データまたはマークアップから成るものでなければなりません。」
のエラーになってしまう。## 解決方法
` 以下の2つがあるが、1がおすすめ。### 1. 該当箇所を囲む
“`.Java
“`### 2. SQL文全体を囲む
この方が可読性が良いが、動的SQLを記載しても反映されない。“`.Ja
Javaの配列とリスト配列で配列の要素を数える方法が違います
Javaで配列とリスト配列で配列の要素を数える方法が違います。
配列の場合は
“`java
public class Main{
public static void main(String[] args){
String[] data = {“test1″,”test2″,”test3”};
for(int i=0;idata = new ArrayList ();
data.add(“test1”);
data.add(“test2”);
data.add(“test3”);
関数を評価する前もしくは評価した後のセルの値が欲しい
# 関数を評価した後の値が欲しい
Apache POIでセルの値を取得する際、「セルに関数が含まれている場合は関数を評価した後の値が欲しい」とします。書き方はいろいろあるのですが、おおよそ以下のようにすればよいです。
“`java
// WorkBookオブジェクトからFormulaEvaluatorを生成する。
FormulaEvaluator formulaEvaluator = book.getCreationHelper().createFormulaEvaluator();// CellのCellTypeを取得する。Cellが関数を含む場合は関数の評価後のCellTypeを取得する。
CellType cellType = (cell.getCellType() == CellType.FORMULA) ? formulaEvaluator.evaluateFormulaCell(cell) : cell.getCellType();// CellTypeにあわせて値を取得する。ここではサンプルとして文字列型を取得している。
if (cellType == Ce
spigotプラグインを作る (目次)
#目次
##I部 準備
[spigotプラグインを作る (1)](https://qiita.com/drafts/43ea0ccf6ed299b58492/)
##II部 絶賛執筆中!!
spigotプラグインを作る (1)
すごいお久しぶりです。beatbox4108です。
今回からは、spigotプラグインの作り方をやっていきたいと思います。
#まずspigotって?
**spigot**は、minecraftのサーバーです。
もともとは、**bukkit**というものが主流でしたが、現在は**bukkit**との互換性がある**spigot**が主流です。
**bukkit**や**spigot**はプラグインというものを導入して、minecraftの機能を追加したり変更したりできます。
###プラグインでできること/できないこと
| 機能 | できるかどうか |
|:-:|:-:|
| UIの追加 | X |
| ブロックの追加 | X |
| AIの変更 | O |
| UIの表示、機能追加 | O |
| Javaとの連携 | O |
上に挙げたのはほんの少しで、他にもいろいろな機能があります。
~~*思いつかなかったなんて言えない*~~
#実際にやってみる
###前提条件
IntelliJ IDEAがインストールされている。
JDKがインストールされている
###筆者の環境
OS—lin
最新バージョンのJavaをmacにインストールするところでハマったのでメモ
最新バージョンのJDKをmacにインストールする流れでハマったので忘れないようにメモ
#環境
Mac Os catalina 10.15.7#概要
※調べるとcaskを使う記事が複数でてきましたが使わなくてよかったので以下で実施
“`
% brew install java==> Downloading https://ghcr.io/v2/homebrew/core/openjdk/manifests/15.0.2
######################################################################## 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/openjdk/blobs/sha256:fca110fb6caad1228156b587a3ca9fa9ab5a
==> Downloading from https://pkg-containers.githubusercontent.com/ghcr1/blobs/sha256:fca110fb
[Java]Spring + MySQL を用いたREST API作成メモ
* SpringとMySQLを利用したREST API作成メモ
## API例
* 以下のようなユーザー情報の登録、取得、一覧取得用APIを作成する。
* **ユーザー登録API(`POST /api/users`)**
* リクエスト
“`http
POST /api/users HTTP/1.1
Host: localhost:8080
Content-Type: application/json
Content-Length: 24{
“name”:”test4″
}
“`* レスポンス
“`json
{
“id”: 4,
“name”: “test4”
}
“`* **ユーザー取得API(`GET /api/users/{user_id}`)**
* リクエスト
“`http
GET /api/users/4 HTTP/1.1
Host: lo
燃やす埋める問題とProject Selection Problemの整理
2021年3月から毎日問題が公開されている「[競プロ典型90問](https://qiita.com/e869120/items/1b2a5f0f07fd927e44e9)」、皆さま解いていらっしゃいますでしょうか?
一昨日、第40問として公開された「[Get More Money](https://atcoder.jp/contests/typical90/tasks/typical90_an)」が解説を読み、その後いろいろな記事を見ても理解が難しかったので整理してみました。
当然のことながらこの問題の解法に触れますので、問題に挑戦したい方はこの記事は後からお読みいただくことをお勧めします。– [AtCoder常設ジャッジ](https://atcoder.jp/contests/typical90/tasks/typical90_an)
– [問題画像](https://github.com/E869120/kyopro_educational_90/blob/main/problem/040.jpg)
– [公式解説](https://github.com/E869120/