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

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

AtCoder Beginner Contest 167 の C問題(Java)

## はじめに

AtCoder Beginner Contest 167

[C問題(C-Skill Up)](https://atcoder.jp/contests/abc167/tasks/abc167_c)

解説動画を見てない。または見たが理解できたか心配という方向けの記事です。

私は動画の解説を見ましたが、整理するためにまとめてみました。

解説動画も非常にわかりやすい内容になっていますので、
そちらもぜひ参考にして下さい。
C問題は21:30〜42:00あたりです。解説動画は[こちら](https://www.youtube.com/watch?v=ENSOy8u9K9I&feature=youtu.be)。

**1〜Nの数字の全ての組み合わせを試す方法**の解説になります。

## 問題
問題文を要約すると、下記のようになるかと思います。

高橋くんが学びたいアルゴリズムがM個あって、
書店にはアルゴリズム の参考書がN個ある。

高橋くんには全ての参考書を買う予算があるが、
出来れば効率よく学び最小限どの出費で抑えたい。

どの順番で参考書を買って読むと費

元記事を表示

javaでアルゴリズム入門 – 探索編(幅優先探索)

# 記事の概要
自分の勉強兼メモでまとめている記事シリーズです。第三弾。
こちらの記事の続きです。
[javaでアルゴリズム入門 – 探索編(深さ優先探索)](https://qiita.com/aja_min/items/5f25e73086b2f3c720bb)
今回の記事では

– 幅優先探索

について勉強します。

## 幅優先探索
BFS(breadth-first search)とも言うらしいです。(breadth:幅)
これも勉強しながら書いていきますね。木に見立てた深さ優先探索との違いなどはこちらの記事「[javaでアルゴリズム入門 – 探索編(深さ優先探索)](https://qiita.com/aja_min/items/5f25e73086b2f3c720bb)」をご覧ください。

迷路の最短経路を求める問題などに有効だそうですね。

実装の方法としてはキューというデータ構造を使うようです。
深さ優先探索では「先入れ後出し」のスタック、
幅優先探索では「先入れ先出し」のキューを用いることを覚えておきましょう。

また、深さ優先探索は再帰でも実装できましたが、**

元記事を表示

java(クラスとインスタンス)

##定数フィールドの宣言
“`java
public class Matango {
int hp;
//int level = 10;    //フィールド
final int LEVEL = 10; //定数フィールド
}
“`
値を書き換えることができないようにする定数フィールド
`final`を付けて名前を`大文字`にする(LEVEL)

##thisは省略しない

“`java
public class Hero {
String name; //名前の宣言
int hp; //HPの宣言

public void sleep() {
this.hp = 100;
System.out.println(this.name + “は、眠って回復した”);
}
“`

`this.`は省略しても動作する
ローカル変数や引数にも同じhpがあるとそちらが優先されてしまう可能性がある
フィールドを用いる時は`this.`をつけるようにする

##インスタンスの生成

“`java
public class Main {
publi

元記事を表示

OpenTripPlannerで異なるフィードの駅を結びつける

[OpenTripPlannerとGTFSを利用して独自の乗り換え案内を作ってみた](https://qiita.com/hiroa2/items/70770645f49d6fb18b0b)の関連記事です。
#はじめに
OSSの経路探索アプリケーションOpenTripPlanner(OTP)には、複数のGTFSファイルをフィードとして登録することができる。
このとき複数のフィードの中に同一駅を示すStopが個別に含まれていたらどうしたらいいのかという話。
#前提条件
通常OTPは、GTFSデータだけでなく地図データを登録するので、この場合駅間は徒歩移動として経路探索されるので問題ない。
また、複数のGTFSを一つに統合できるのであれば、それを読み込ませればいいので解決。
しかしながら、やんごとなき事情で複数のGTFSファイルが必要で、なおかつ地図データを登録しない場合にどうしたらいいのかというのがこの記事の内容。
要するに、かなりニッチな話ということ。
#結論
org.opentripplanner.routing.edgetype.FreeEdgeオブジェクトを使う。
OTPでは地図

元記事を表示

OpenTripPlannerのGraphからGTFSデータを取得する

[OpenTripPlannerとGTFSを利用して独自の乗り換え案内を作ってみた](https://qiita.com/hiroa2/items/70770645f49d6fb18b0b)の関連記事です。
# はじめに
OpenTripPlanner(OTP)にはWebサービスがあり、その中の [IndexAPI](http://dev.opentripplanner.org/apidoc/1.0.0/resource_IndexAPI.html) を使えば、登録済みのGTFSデータを取得することができる。
ですが、アプリ内部でライブラリ的にOTP的を利用しているときはどのようにしてデータを取得すればよいのかという話。
# 結論
結論から言えば、IndexAPIのソース(org.opentripplanner.index.IndexAPI)を見れば一目同然。
それでは、身もふたもないので…。
## ソース

“`java:
// GraphオブジェクトからGraphIndexオブジェクトを取得
GraphIndex index = graph.index;

// GraphI

元記事を表示

単体テストを書くためにstaticメソッドから脱却しよう

# 概要

レガシーコードでは、単体テストを書こうとした際に、しばしば既存のstaticメソッドが妨げになることがある。
この記事では、「新たにそのようなコードを増やさないようにするための原則(ルール)」と「既存のstaticメソッドが妨げになっているケースの解決方法」を示す。

レガシーコードに対して、はじめて単体テストを書くとき向けの記事。

# 問題

下記の`LegacyService#execute()`のようなメソッドに対して、うまく単体テストを書くことができない。
テスト対象メソッドから呼び出されているloadFromDatabaseメソッドがデータベースへのアクセスを必要とするため、アクセスが不可能な環境から実行した際には、例外が発生してしまう。

仮にデータベースへのアクセスが可能だったとしても、そのデータベースから安定して同じデータを取得することは難しく、また実行時間がかかってしまう。

“`java
public class LegacyService {
public void execute() {
// ここにテスト対象のコードが入る

元記事を表示

Javaのif文とswich文

###条件分岐
特定の状況のときだけある処理を行うです。
OOだったらXXするみたいな感じです。
例えば、天気予報が雨だったら傘を持っていくということです。
if文の場合

“`Main.java
if (条件式) {
処理;
}
“`
さっきの例に当てはめると

“`Main.java
if (天気予報 == 雨) {
傘を持っていく;
}
“`
となります。
if文を数字に当てはめます。
true(正しい)の場合

“`Main.java
int x = 10;
if (x == 10){
System.out.println(“xは10”);
}
“`
上記の場合だと(x == 10)の条件分岐がtrueになるため、コンソールは**xは10**と表示されます。
false(間違い)の場合

“`Main.java
int x = 20;
if (x == 10){
System.out.println(“xは10”);
}
“`
上記の場合だと(x == 10)の条件分岐がfalseになるため、コンソールはなにも表示

元記事を表示

Java SE 11 Programmer II試験とJava SE 8 Programmer II試験の相違点(作成中)

※随時更新していきたいと思います。
#この記事について
 2020/5/16にJava SE 11 Programmer II試験を受けて合格し、Java Programmer, Gold SE 11(以下Goldと記載)の資格を取得しましたので、これから受験する方の一助になればと思い、この記事を書くことにしました。
 自分自身新機能についてそこまで理解があったわけではないので、その復習も兼ねています。
 Java Programmer, Silverの資格まで持っていて(Java SE 11 Programmer IIの受験資格がある)、Java SE 8 Goldの知識についてもある程度学習が進んでいる前提で話を進めて行きますので、ラムダ式やStream APIなどの話はあまりせず、SE 8との違いをメインに書きたいと思います。
#はじめに
 自分が勤めている会社には資格手当があり、Javaの学習と資格手当の取得を兼ねて資格勉強を行っていました。Java SE 7/8 Bronze、java SE 8 Silver(Java SE 8 Programmer I)はいずれも2~3週間

元記事を表示

Effective Java 第2版 関連事項調査まとめ

# はじめに

新人のころ[Effective Java 第2版](https://www.amazon.co.jp/EFFECTIVE-JAVA-Java-Joshua-Bloch/dp/4621066056)を購入したが2~3年積んだまま放置してしまった。
読み返してみると案外今でも知らなかったりふわっとしてて人に説明できない関連事項が結構多かったため、恥を忍んでこの記事に調査内容をまとめていく。
Javaの本であるが、本記事の筆者は現在C#を現場で使っているため、もしC#に同等の内容が存在すれば、C#の内容を記載することもある。
また、このシリーズは、Effective Javaの本筋を追うものではなく、理解の障壁となりうる関連事項の調査をまとめたものである。
Effective Javaの内容そのものに関しては、すでに先人たちの努力によって多様なサマリーがあちこち落ちているので参照されたし。

なお、本書は2020年5月現在[第3版](https://www.amazon.co.jp/Effective-Java-%E7%AC%AC3%E7%8

元記事を表示

インスタンス制御とは?

# はじめに

Effective Java 第2版 P6に出てくる下記の内容について深堀する。

>static ファクトリーメソッドが、何度呼び出されても同じオブジェクトを返すことができることは、ある時点でどのようなインスタンスが存在するかを厳密に制御するのにも使用できます。この制御をおこなうクラスは **インスタンス制御されている** (instance-controlled)と言われます。

# 目次

1. [結局どんな状態?](#whatIsThis)
1. [具体例は?](#forExample)
1. [C#ではEnumでシングルトン作れないの?](#CSEnum)
1. [参考文献](#reference)



# 結局どんな状態?

– 実行環境が、あるクラスのインスタンス数を制限している状態
– 1個の場合もあるし、複数個の場合もあるが、**「このクラスのインスタンスはn個以上存在することはありません!!」

元記事を表示

【API】郵便番号検索APIを使ってみた

#APIを使用したアプリを作ってみる

#背景
– APIを使用したアプリケーションが増えてきている
– APIを使用する、作るエンジニアの仕事も増えている
– APIを扱う技術の需要が増えそう

#目次
* [0. 環境確認](#0環境確認)
* [1. APIの確認](#1apiの確認)
* [2. プロジェクトの作成](#2プロジェクトの作成)
* [3. サーバーエンドの実装](#3サーバーエンドの実装)
* [4. フロントエンドの実装](#4フロントエンドの実装)
* [5. 動作確認](#5動作確認)
* [6. まとめ](#6まとめ)

#0.環境確認
– ___OS___: Windows10 home
– ___IDE___ : Eclipse(Photon 4.8)
– ___ビルドツール___ : Gradle
– ___サーバーサイド言語___ : Java(1.8)
– ___JavaScript ライブラリ___ : jQuery(3.3.1)
– ___テンプレートエンジン___ : thymeleaf

#1.APIの確

元記事を表示

JSPカスタムタグを簡単に作る方法

### はじめに
今のところ、画面を作成する際に、jspをよく使われています。ある程度、JSPカスタムタグは必要になる場合もあります。
 本記事は簡単にJSPカスタムタグを作る方法を解説します。

### 概念解説
本記事はwebプロジェクトをベースにJSPカスタムタグを開発していきますよ。
また、少しだけ、JSPカスタムタグに関するの知識をまとめています。

– **SimpleTagSupportクラス**: インタフェースSimpleTagを実現するクラスです。JSPカスタムタグを開発する際に、よく親のクラスとしての使われています。
– **doTag()メソッド** : このメソッドをOverrideして実際の業務ロジックを実現する。
– **tldファイル**: JSPカスタムタグのタグ名、タグ属性、タグクラスなどの情報を定義する場所。

本記事は**\**というカスタムタグを作成します。
タグ名はhelloですし、タグの属性はnameです。
このタグを使うと、画面上にnameのvalueを含めて出力します。

元記事を表示

Ruby と Python と Java で解く AtCoder ABC141 D 優先度付きキュー

# はじめに
*[AtCoder Problems](https://kenkoooo.com/atcoder/#/)* の Recommendation を利用して、過去の問題を解いています。
AtCoder さん、AtCoder Problems さん、ありがとうございます。
# 今回のお題
*[AtCoder Beginner Contest D – Powerful Discount Tickets](https://atcoder.jp/contests/abc141/tasks/abc141_d)*
Difficulty: 826

今回のテーマ、優先度付きキュー
# Ruby
操作自体はシンプルで、一番値段の高い品物をキューから取り出し、割引券を一枚適用してキューに戻します。その都度、一番値段の高い品物ついて同様の操作を割引券がなくなるまで行います。
但し、次の様に単にソートするだけの実装では、`TLE`になります。

“`ruby_tle.rb
n, m = gets.split.map(&:to_i)
a = g

元記事を表示

C++/JavaとWin/Linuxの組み合わせにおけるビルドについて整理する

# はじめに
本記事では、C++とJavaという2つのプログラミング言語について、ビルド周りの知識を整理します。
具体的には、各言語における「基本的なビルド方法」、「共有ライブラリの利用方法」、「ビルドツール」について整理します。
その際、WindowsとLinuxとで相違がある場合には、その点についても触れます。

本記事の投稿目的は、投稿者自身が知識を整理することであり、内容に間違いが含まれる可能性があります。
間違いを見つけた方はコメントなどで指摘をお願いします。

# 基本的なビルド方法
本節では、コマンドラインからビルドを行う基本的な方法について整理します。
「ビルド = コンパイル + リンク」として説明します。

### C++
main.cpp, hoge.cpp, hoge.hという3つのファイルからプロジェクトが構成されるとします。
コンパイルは、

“`
g++ -c main.cpp hoge.cpp
“`
リンクは、

“`
g++ main.o hoge.o
“`
というコマンドで行うことができ、実行ファイル(Linuxではa.out, Window

元記事を表示

eclipse.iniに-vmを指定する方法

Eclipseを実行するJVMをeclipse.iniに`-vm`オプションで指定する。
が、CentOSでOpenJDK11の`javaw.exe`がなかった、ので調べてみた。

– 参考 : [Eclipse を起動する Java VM を指定する :Tips & FAQ | arbk-works Blog](https://aruo.net/arbk/blog/article/specifying_java_vm_for_eclipse_ide_to_run)
– 凡例 : `JAVA_HOME` : javaのインストールディレクトリ

# 実行ファイルのパスを指定する方法
これまでこの方法でしか指定したことがなかった、しかも`javaw`がWindows用って知らなかった。

> javawはどうもWindowsのために用意されたコマンドみたいですね。Windows環境向けの記事でjavaw.exeを使う解説があった場合、Linux/Mac環境では素直にjavaコマンドに置き換えましょう。
> [Linux/Mac に javaw コマンドがない…だと…](http

元記事を表示

【AtCoderProblem-ABC001】C-風力観測をJavaでやる【コード】

## はじめに
Java-Silverの勉強がひと段落ついたので、無料でアウトプットできる「AtCoderProblem」をやってみました。備忘録がてらQiitaに残しておこうと思います!

## 問題

問題文が長いので[こちら](https://atcoder.jp/contests/abc001/tasks/abc001_3)をどうぞ

## コード

“`java:WindObservation.java
import java.util.Scanner;

public class WindObservation {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

double wind_direction = sc.nextInt();

wind_direction = wind_direction / 10;

double Wind = sc.nextInt();
Wind = Wind / 60;

元記事を表示

【超基礎】PythonとJavaとJavaScriptを比較します(変数, if文, while文, for文)

#目的
– 今週から本配属だった
– 結局Javaを勉強することになった
– 記憶が新しいうちにJavaとPythonでちがったことまとめておこう
– ついでに少し勉強したことがあるJavaScriptも引っ張り出して比較しよう

# この記事で比較する内容
– 変数
– if文
– while文
– for文

#変数
###Python
– データ型を宣言する必要はありません
– 変数の中身によって勝手に型を指定してくれます
– セミコロンもいりません

“`python:asobi.py
py_str = “Python”
py_int = 23
py_float = 23.5

# データ型確認
print(type(py_str))
print(type(py_int))
print(type(py_float))
“`

“`console:コンソール



“`

– 変数のデータ型を書きかえることもできます

“`python:asobi.py
py_str = “Python

元記事を表示

脳死のうえ CentOS8 で OpenJDK 使って HelloWorld

題名の通りやってみます。

#環境確認
OS はインストールして yum update 実行済みです。

# cat /etc/redhat-release
CentOS Linux release 8.1.1911 (Core)
#
 
#Java インストール

# yum install java
# yum install java-devel
# which java
/usr/bin/java
# java -version
openjdk version “1.8.0_252”
OpenJDK Runtime Environment (build 1.8.0_252-b09)
OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)
#

#初期セットアップ
パスを通します。
/etc/profile の末尾に dirname で返って来た文字列より、最後の /jre/bin を抜いて記載します。

# dirnam

元記事を表示

BindingResultの結果にフィルターを掛ける【Spring】

#対象読者
・Springframeworkで、Validationの実装を行っているが、BindingResultの結果に対してフィルターを掛けたい!
・newとupdateで、共通のフォームを使いたい!

#対象物の確認

## View

![コメント 2020-05-16 103732.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537759/96ede579-f090-f19b-3f75-79fed1f4f03b.png)

シンプルにSpringタグを用いて、userFormをmodelAttributeに定義し、inputタグ、labelタグが書いてあります。更新側も全く、同じ構造です。

## Form

“`java:UserForm.java
@Data
@ConfirmMail(field=”mail”, groups = ValidGroup3.class)
@ConfirmPassword(field=”password”, groups = ValidGroup4.cl

元記事を表示

substring、substrメソッドの使い方

## 概要
文字列の一部を指定箇所を切り出す機能としてSubstringメソッドがある。
その他にもcharAtメソッドもある。
指定位置から始める文字列を任意長さを切り出す。

## Javaでの使い方
“`java
public String substring(int Index)
public String substring(int startIndex, int endIndex)
“`

JavaのsubStringメソッドは上記2点の使い方がある。
使い方は下記のような使い方がある。

“`java
String s1 = “Hello World”;
// o World
s1.subString(4)
// O World
s1.subString(4, 11);
“`

# PHPでの使い方
“` php
string substr (String $string, int $start [,int $length ] )
“`
string
入力文字列。最低1文字以上を指定する必要がある。

start
startが正の場合は、返却される文字列はS

元記事を表示

OTHERカテゴリの最新記事