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

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

Javaで1行に複数個の文字列を入力する方法

競技プログラムで1行に複数個の文字列を標準入力する方法です。

“`Java
package nogizaka;
// Scannerクラスをインポートする
import java.util.Scanner;

public class paiza1 {
public static void main(String[] args) {
//Scannerクラスを呼び出す
Scanner scanner = new Scanner(System.in);
//文字列の個数が全て入力するまで繰り返す
while (scanner.hasNext()) {
//文字列を1個ずつ標準出力する
System.out.println(scanner.next());
}
//Scannerクラスを閉じる
scanner.close();
}
}
“`

上記のようにコードを書くと1行に複数の文字列を入力できます。

元記事を表示

GWT の domino-ui がカッコイイ

# domino-uiはGWT上のGUI部品です

GWT(Google Web Toolkit)は、JavaをトランスパイルしてJavaScriptを生成する技術です。

コンパイルした環境

Windows10
Adopt OpenJDK 8
maven 3 系

以下のサイトからソース一式をZIPでダウンロード

[ domino-ui-demo ]( https://github.com/DominoKit/domino-ui-demo )

cd domino-ui-demo-master

README.md を参考にするが、うまくいかない。

単に、 mvn package としてみる

コンパイルには、かなり時間がかかります。
私が使っているノートPCで、10分程度。ぼけーっと、待ちます

再度 README.md を参考に

“`CMD.EXE
cd ui-demo-backend
java -jar target/ui-demo-backend-1.0-SNAPSHOT-fat.jar
“`

画面にポートが表示されているので、http://loca

元記事を表示

VSCode-いろいろな言語の環境構築まとめ

## vscodeが便利だけどやっかいな話

ここ数日、vscodeの環境構築にえらい苦戦していました。
普段、同時に3~4言語使っているため、その一つ一つの環境構築が面倒すぎて、今まで使っていたエディタのほうがましなんじゃないか…とも思いました。
わからないことだらけでとにかく調べまくりましたが、ここでは、**サクッと環境構築を終えてプログラムを書きたいんだ!!**という人向けに

#####Python、C#、Java、Ruby

の環境構築の仕方から実行までの方法を簡潔にまとめました。

わたしがつまずいたところや試してみてできなかったことも共有していますので、このページだけですべて完結できるよう目指しました。

ぜひ参考にしてください。

## 環境

OS:Windows10
エディタ:VSCode(Visual Studio Code)

以下、今まで使用していた環境です。

Python:anaconda3 spyder
C#:visual studio 2019
Java:eclipse
Ruby:コマンドプロンプト

## ~言語別環境構築の仕方~
[Pyth

元記事を表示

Javaでグラフを入力画面から描画する(SpringBoot)

前回の作業履歴
https://github.com/jamcookjapan/grapy/commit/567f8b2f444b1ef4a89e622babf3a4930cd897ae

静的なデータを投入して画像バイナリを作っていましたが、今回は入力画面を作って、データを動的に受け取ってグラフを書き込みたいと思います。

“`tsv:input.tsv
1 10,640,000
2 10,640,000
3 10,640,000
4 10,640,000
5 10,620,000
6 10650000
7 10780000
8 10780000
9 10780000
10 10760000
11 10570000
12 10530000
13 9960000
14 10250000
15 10250000
“`

**グラフ**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1535669/f21310a4-10f0-e8f3-054f-403a521f0a93.png)

X軸

元記事を表示

JPAを知ろう、(Gradle + JPA + mysqlで簡単確認)

#JPA(Java Persistence API)
## JPAとは
– 関係データベースのデータを扱う Java SE および Java EE のアプリケーションを開発するためのJava用フレームワークである。(wikipedia)
– JavaのORM技術標準

### ORMとは?
– Object Relational Mapping(オブジェクト関係マッピング)
– OOPを守りなら設計
– RDB設計
– その中間の掛橋になるのがORMフレームワーク

## JPAを学ぶべき理由
– JPAが出る前はObjectをデータベースに登録するためには**JDBC APIとSQL文を直接**書かなければならなかった。
– JPAを使うとSQL文を作成する必要がない。なんて素晴らしい、
– JDBC, JDBC Template, MyBatisは効率悪い、開発生産性が低い。
– JPAがよく使われない理由は難しいから
– Java開発者としてJPAは必須。

## JPA以前の問題点とは
– OOP(オブジェクト志向プログラミング)とRDB(関係型データベース)の使用が一番多い

元記事を表示

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

元記事を表示

OTHERカテゴリの最新記事