JAVA関連のことを調べてみた2021年05月28日

JAVA関連のことを調べてみた2021年05月28日

while文とdo-whileについて

# while文とdo-whileについて

## 繰り返し文とは
Javaには制御文として、**繰り返し文**があります。繰り返し文は**ループ**とも呼ばれます。

今回、繰り返し文の一つとして、while文を紹介します。

## while文
while文は、指定された条件が成立する間は、繰り返し処理を行います。
コードは以下のようです。

“`
num = 0;
while(num < 5){ System.out.print(num + " "); num++; } ``` ()内に条件式を記述し、条件式を満たしている間(true)は{}内の処理が実行されるという構文です。 ()内の条件式が満たされない場合(false)の場合は処理が実行されないという内容になります。 ## 無限ループ while文の注意点として、処理が半永久的に実行されてしまう**無限ループ**には注意が必要です。 ``` num = 0; while(num < 5){ System.out.print(num + " "); } ``` num++が記述されない

元記事を表示

Play Framework入門(2.8.8) 掲示板の作成まで

先日、Java&ScalaのフレームワークであるPlay Framework(以下Play)を使って掲示板サイトを作ったので、それの備忘録を残したいと思います。

この記事ではPlayFrameworkの公式とgithubにある公式サンプルを多数引用します。

https://www.playframework.com/getting-started

https://github.com/playframework/play-samples

“`conf:実行環境
PC: Ubuntu20.04
java: 11.0.11
sbt: 1.4.9
Play: 2.8.8
“`

# Play! Play Framework
Playとは、MVCでWebサイトを構築するフレームワークです。
MVCとは、Model、View、Controllerの頭文字を取ったものです。

– Model: データの管理、取得などを担当
– View: データの表示を担当
– Controller: ModelとViewの制御を担当

https://qiita.com/s_emoto/items

元記事を表示

Play frameworkでテストコードを作成してみた。

##Play frameworkでのテストコード
Play frameworkでjunitを使ってテストコードを作成したのでメモ。

Playでプロジェクトを作成するとtest/controllersディレクトリ内にデフォルトでHomeControllerTest.javaが入っている。

“`java:HomeControllerTest.java
package controllers;

import org.junit.Test;
import play.Application;
import play.inject.guice.GuiceApplicationBuilder;
import play.mvc.Http;
import play.mvc.Result;
import play.test.WithApplication;

import static org.junit.Assert.assertEquals;
import static play.mvc.Http.Status.OK;
import static play.test.Helpers.GET;

元記事を表示

ヒープソート Heap Sort【可視化GIFでソートアルゴリズムを解説 その7】

ヒープソート (heap sort) とはリストの並べ替えを二分ヒープ木を用いて行うソートのアルゴリズムである(ヒープ領域とは無関係であることに注意する)。ヒープはほぼ完全な二分木構造であると同時に、累積の性質を満たします。つまり、子ノードのキー値またはインデックスは常にその親ノードよりも小さい(または大きい)です。

## 7.1 アルゴリズムの説明

アルゴリズムは、以下のように2つの段階から構成される。

* 未整列のリストから要素を取り出し、順にヒープに追加する。すべての要素を追加するまで繰り返し。
* ルート(最大値または最小値)を取り出し、整列済みリストに追加する。すべての要素を取り出すまで繰り返し。

ヒープ構造は、ポインタ等の制御用データが不要で、データ自体の並び順(配列)だけで表現できるという利点がある。ヒープソートを実装する際にはこの利点を生かし、元のデータ領域をそのままヒープ構造や整列済みリストに転用するインプレースなソートとして実装することが多い。

最初にN個のデータを含む配列が与えられるものとする。添字は1 〜 Nとする。

まず各データをヒープ構造に登録し

元記事を表示

クイックソート Quick Sort【可視化GIFでソートアルゴリズムを解説 その6】

クイックソート (quicksort) は、1960年にアントニー・ホーアが開発したソートのアルゴリズム。分割統治法の一種。

n個のデータをソートする際の最良計算量および平均計算量はO(n log n)である。他のソート法と比べて、一般的に最も高速だといわれているが対象のデータの並びやデータの数によっては必ずしも速いわけではなく、最悪の計算量はO(n^2)である。また数々の変種がある。 安定ソートではない。

## 6.1 アルゴリズムの説明

クイックソートは分割統治法を使用して、リストを2つのサブリストに分割します。 具体的なアルゴリズムは次のとおりです。

* シーケンスから要素を選択し、それを「ピボット pivot」と呼びます。
* シーケンスを並べ替えると、ベンチマーク値よりも小さいすべての要素がベンチマークの前に配置され、ベンチマーク値よりも大きいすべての要素がベンチマークの後ろに配置されます(同じ番号をどちらの側にも配置できます)。 パーティションが終了した後、ベンチマークはシーケンスの途中にあります。 これは分割(partition)と呼ばれます。
* 二分割された各

元記事を表示

似た様なフォルダ名を複数作らないといけなくなりました。ぴえん。

どうも最近画像作ったり、リスケしたりなんやかんや業務でコーディング1ヶ月くらいをしていないちゃむじです。
今日も今日とてフォルダを10個くらい作ることになった。
名前は”フォルダ_1”みたいな連番のやつ。

**1つずつ作成して名前編集してやるのでもいいのだが、同じ作業の繰り返し・・・だるすぎてダルメシアンになりそうだわ**
**安西先生・・・俺は・・・プログラミングが・・・したいです・・・**
と思ったのが今回の記事を書くきっかけです。

“`
import java.io.IOException;
import java.io.File;

class CreateDirectory {
public static void main(String[] args) {
int number =10;
File file = null;
for (int i = 1; i <= number; i++) { file = new File("ファイル生成したい場所の絶対パス / フォルダ_" + i); file.mkdirs

元記事を表示

マージソート Merge Sort【可視化GIFでソートアルゴリズムを解説 その5】

選択ソートと同様に、マージソートのパフォーマンスは入力データの影響を受けませんが、常にO(n log n)の時間計算量であるため、選択ソートよりもはるかに優れたパフォーマンスを発揮します。 価格は、追加のメモリスペースの必要性です。

マージソートは、マージ操作に基づく効果的なソートアルゴリズムです。 このアルゴリズムは、分割統治法の非常に典型的なアプリケーションです。 マージソートは安定したソート方法です。 既存の順序付けられたサブシーケンスを組み合わせて、完全に順序付けられたシーケンスを取得します。つまり、最初に各サブシーケンスを順番に作成し、次にサブシーケンスを順番に作成します。 2つの順序付きリストが1つの順序付きリストにマージされる場合、それは双方向マージと呼ばれます。

## 5.1 アルゴリズムの説明

* データ列を分割する(通常、二等分する)
* 分割された各データ列で、含まれるデータが1個ならそれを返し、2個以上ならステップ1から3を再帰的に適用してマージソートする
* 二つのソートされたデータ列(1個であればそれ自身)をマージする

## 5.2 可視化デモ

!

元記事を表示

シェルソート Shell Sort【可視化GIFでソートアルゴリズムを解説 その4】

シェルソート(改良挿入ソート、英語: Shellsort)は、1959年に(Donald Shell)によって提案されたソーティングアルゴリズムです。 シェルソートも一種の挿入ソートであり、改良後の単純な挿入ソートのより効率的なバージョンであり、縮小インクリメンタルソートとも呼ばれます。同時に、このアルゴリズムはO(n2)を破る最初のアルゴリズムの1つです。挿入ソートとの違いは、最初に離れている要素を比較することです。

**シェルソートとは、テーブルに従ってレコードを特定の増分でグループ化し、直接挿入ソートアルゴリズムを使用して各グループをソートすることです。増分が減少すると、増分が1に減少すると、各グループに含まれるキーワードが増えます。ファイル全体が1つのグループに分割され、アルゴリズムが終了します。**

## 4.1 アルゴリズムの説明
シェルソートの基本的な手順を見てみましょう。ここでは、増分gap=length/2を選択し、縮小増分はgap=gap/ 2で続行します。この増分選択はシーケンス{n / 2、 (n / 2)/ 2 … 1}、インクリメンタルシーケンスと

元記事を表示

リバーシの操作(斜め)

https://paiza.jp/works/mondai/a_rank_level_up_problems/a_rank_pincerattack_step4
変なところで詰まった。

「置いた後の斜めにひっくり返す処理」で混乱してしまったのだ。

“`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];

for(int i=0; i

元記事を表示

try-catch-finally文を利用した例外処理について

# try-catch-finally文を利用した例外処理について
Javaでは実行に発生したエラーを例外と呼びます。
例外が発生した場合、Java上で例外に対する処理を記述していない場合、プログラムはそこで強制終了します。
下記のコードは意図的に例外を発生させ、実行結果を確認しています。

“`JAVA
public class Main {
public static void main(String[] args) {
int[] test = {1,2,3};
for(int i = 0; i <= 3; i++){ System.out.println(test[i] + "回目のループ") } System.out.println("ループ終了"); } } ``` 実行結果 ``` 1回目のループ 2回目のループ 3回目のループ Exception in thread "main" java.lang.ArrayIndexOutOfBoundsExceptio

元記事を表示

[競プロ]ダイクストラ実装【Java】

競技プログラミングで頻出のダイクストラ法について実装してみました。
例題も解いて解説していきます。

# ダイクストラ法とは
経路の最短距離を求めるアルゴリズムです。

wikipediaより引用
> ダイクストラ法(だいくすとらほう、英: Dijkstra’s algorithm)はグラフ理論における辺の重みが非負数の場合の単一始点最短経路問題を解くための最良優先探索によるアルゴリズムである。辺の重みに負数を含む場合はベルマン-フォード法などが使える。辺の重みが全て同一の非負数の場合は幅優先探索が速く、線形時間で最短路を計算可能である。また、無向グラフで辺の重みが正整数の場合は、Thorupのアルゴリズム[1]によって線形時間での計算が可能であるが、実用性はあまり高くない[要出典]。

– 辺の重みがない(単一の)場合はBFSが早い
– 辺の重みに負数を含む場合はベルマン-フォード法

が使えるようです。
今回は辺の重みがすべて非負整数であるグラフについてのダイクストラ法を実装していきます。

# 求め方

ダイクストラでの最短経路の求め方は以下のとおりです。

1. 始点に0を設定

元記事を表示

GitHub × Azure Pipelines で Dockerized Java アプリを Azure にデプロイしてみる

最近 Java に力を入れがちなマイクロソフトですが、Dockerized Java アプリを Azure にデプロイするのがどれくらい簡単なのか試してみたいと思います。

#ソースコード
今回使用する Java アプリケーションですが、Tomcat のアプリを使用します。以下 GitHub にコードを配置しているのでご活用ください。
https://github.com/komiyasa/TomcatCICDsample

#Azure Pipelines で CI 作成
まずは Azure Pipelines で CI を作成してみましょう。Azure DevOps の Pipelines にアクセスして `New Pipeline` から新しい Pipeline を作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149921/4112ce64-107d-93ff-7fd6-d1439d87f882.png)
YAML ベースで作成するのが最近の主流ですが、せっかく Az

元記事を表示

Spring Boot 自作アノテーションを作成して複数項目にvalidationをかける

## やりたいこと

リクエストクラスでは以下`@NotNull`や`@Size`のような
`@`のついたアノテーションで入力チェックをすることができる。
用意されているアノテーションは一つの項目のみしかチェックを行うことができない。
複数の項目を検証するアノテーションが欲しいため、独自に作成したアノテーションで入力チェックを行いたい。

#### リクエストクラス

“`.Java
public class SampleRequest {

// nullは不可
@NotNull
private Integer id;

// 1〜50文字
@Size(min = 1, max = 50)
private String name;

private String name1;

private String name2;

private String name3;

public Sample convert() {
Sample sample = new Sample();
sample.setId(id);

元記事を表示

SpringBoot 2.5 WebfluxでI/Oが発生するシステムの性能テストしてみた

![springwebflux.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143552/125536df-0ba3-5c46-c5f5-217217bd6797.png)
Spring WebfluxはノンブロッキングI/Oな処理を提供するフレームワークです。
このフレームワークについては、何度か使用したことはありますが性能面にテストしたことがなかったので、軽くテストしてみます。

## テスト結果
先に結果から言っておきます。

スレッドが4つ起動しているSpring上で、40リクエストを同時に実施した場合以下の結果となります

| 手法 | 応答時間(s) |
| —- | —- |
| mvc | 11.041 |
| Webflux | 2.016 |

IOが発生した場合、mvcの場合はスレッドを専有したままIOが終わるのを待ち続けますが、webfluxの場合はIOが発生したら、他のリクエストを待ち受けるようになり、メモリ効率がよくなります。

## Webfluxが解

元記事を表示

Java PowerPointでテキストを取得

今回はSpire.Presentation for Javaという無料のライブラリを使用して、PowerPointでテキストを取得する方法を紹介します。

 下準備

1.E-iceblueの公式サイトからFree Spire. Presentation for Java無料版をダウンロードしてください。

f:id:lendoris:20210526155656p:plain

元記事を表示

オーバーライドについて

# オーバーライドについて

## オーバーライドの説明
オーバーライドとは、サブクラス内で、スーパークラスで定義しているメソッドと目的が同じであるが、
処理が異なるメソッドを定義する場合に使用します。

## オーバーライドのルール

実際にコードをみてみましょう。

“`
class Parents { //親クラス
A method(int a){}
}

class Childs extends Parents { //サブクラス
A method(int a){}
}

“`

オーバーライドは、**メソッド名、引数リストがまったく同じであること**、
戻り値は**スーパークラスと同じ型もしくは、その型のサブクラス型でなければいけません。**

また、アクセス修飾子は**スーパークラスと同じものか、それよりも公開範囲が広いものを使用**しなければいけません。

・アクセス修飾子
*public(広い) ⇨ protected ⇨ デフォルト ⇨ private(狭い)*

## @Override(アノテーション)について
Java言語では@Ov

元記事を表示

Java DecimalFormat NumberFormat を簡単にまとめました。

|0|数値1桁を表します。数値が無い場合は「0」を表示させます。|
| —- | —- |
|#|数値1桁を表します。数値が無い場合は何も表示させないです。|
|,|カンマ区切りを表します。|
|%|パーセントで表示します。|
|–|マイナスを表します。|
|.|小数点を表します。|

“`java
// NumberFormatクラスを利用したパターン (表示形式が既定のフォーマットでOKな場合)
NumberFormat perFormat = NumberFormat.getPercentInstance(); //パーセント
NumberFormat comFormat = NumberFormat.getNumberInstance(); //カンマ区切り
NumberFormat curFormat = NumberFormat.getCurrencyInstance(); //通貨

System.out.println(perFormat.format(1.234));
System.out.println(co

元記事を表示

Microsoft Build OpenJDK の正式リリースを発表

この記事は ”[Announcing General Availability of Microsoft Build of OpenJDK, May 25th, 2021](https://devblogs.microsoft.com/java/announcing-general-availability-of-microsoft-build-of-openjdk/?WT.mc_id=java-0000-yoterada) ”の翻訳記事です

## Microsoft Build の OpenJDK の一般提供開始を発表

マイクロソフトは Microsoft Build の OpenJDK の一般提供開始を発表できることを嬉しく思います。
Microsoft Build の OpenJDK は、オープンソースで、どこにでも、どなたでも無料でご利用いただける OpenJDK の新しいディストリビューションです。
マイクロソフト社内でも Java は数多く利用されており、50万を超える Java VM が社内で実行されています。Java Engineering Group は、Ja

元記事を表示

jstatコマンドでjvmのガベージコレクションの様子を見てみよう

本記事では、jstatコマンドを使って、jvmが動的にガベージコレクションを行う様子を確認する。
java歴1週間の人間が自分用のメモとして書いた記事です。内容自体はn番煎じであること、考察も一部不完全であることをご承知おき下さい。

本記事の作成にあたって、以下の記事を大いに参考にさせていただきました。

[JavaのGCの仕組みを整理する](https://qiita.com/e_tyubo/items/48398391a8ef0f24c1be)
[jstatを使用したJavaアプリのメモリ計測](https://qiita.com/N_G/items/2dab8694fdebce2de868)
[Javaのメモリ設定と、jstatの出力結果に関するメモ](https://qiita.com/sengoku/items/03939ce47363f2b69803)
[Javaのメモリ調査ことはじめ](https://qiita.com/nkoseki/items/79ab050351e08c319832#jstat%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%

元記事を表示

Java屋さんのMaven使うのなんでを考察する

## これはなんですか?
タイトル。

この記事を読むとよいかもしれない対象者は「なんでMavenとGradleでビルドツールが2分化されているのか」について疑問に思っている人に対してJava屋さんが一つの考察を開示するものです。

ここ2年間で5回位聞かれたことなので、記事になるかなーと、考えを記すことにしました。

## 本題

メリット。
1. 昔から使ってるのでやりたいことの9割以上のことがMavenで**かんたんに**できてしまう
1. 資産として溜め込んだプラグインの使い方をGradleに移植するのが面倒
1. Gitで公開していあるそこそこ歴史あるプロジェクトはビルドツールにMavenを使っていることが多く、絶滅するおそれが少ない
1. やりたいことのプラグインも探せばだいたい出てくる

デメリット。
1. XMLだるい
1. 初心者がとっつきにくい
1. Java以外の言語だと最適ではない場合がある

長くJavaと寄り添ったツールとして発達し、支持されているため、その世界最強ですが、kotlinやgroovyのプロジェクトではgradle使うべきかなーとも思います。

元記事を表示

OTHERカテゴリの最新記事