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

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

SpringBootでStrategyパターンを適用する

# はじめに
SpringBootでStrategy パターンを適用したサンプルコードを書いてみました。
Strategy パターンについては [IT専科さんの解説記事](http://www.itsenka.com/contents/development/designpattern/strategy.html) などを参照してください。
サンプルコードは [GitHub](https://github.com/Yukiho-YOSHIEDA/spring-strategy-pattern) に公開しています。

# 動作環境
* Java 11
* SpringBoot 2.3.0

# 題材
大学の図書館を題材にしています。ユーザは本の貸出、返却ができます。またユーザは役職によって借りられる本の数が変化することとします。今回、Strategyにあてはめるのはユーザの役職によって変化する処理の部分です。サンプルコードでは教授、院生、学部生の場合を実装しています。
Strategyを利用する(呼び出す)側はFactoryに依頼をして目的にあったStrategyを取得します。
## ク

元記事を表示

Google ColaboratoryでJavaのJupyter Kernelを使う

前回([Google ColaboratoryでJavaプログラムを動かす](https://qiita.com/natsuume/items/24e152d4892710019a52))の続き

# 前回との違い
ちゃんとColab上でJavaのJupyter Kernelを使ってpythonを使うのと同じようにJavaを動かす

# 手順
## 1. colab上から`.ipynb`をダウンロードする
そのまま
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/34789/590a788d-0c92-5852-009d-3403285160e6.png)

## 2. `.ipynb`を書き換える
元の内容は下記のようになっている

“`ColabJava.ipynb
{
“nbformat”: 4,
“nbformat_minor”: 0,
“metadata”: {
“colab”: {
“name”: “ColabJava.ipynb”,

元記事を表示

try-with-resourcesとAutoCloseable

try-with-resourcesは大体IOExceptionが発生するものに対してのみ使えると思っていましたが、。
AutoCloseableで様々なクラスに対して有効化できるらしい。

#try-with-resourcesについて
try-with-resourcesステートメントは、1つ以上のリソースを宣言するtryステートメントです。 リソースは、プログラムが終了した後に閉じる必要があるオブジェクトです。 try-with-resourcesステートメントは、各リソースがステートメントの最後で確実に閉じられるようにします。 java.io.Closeableを実装するすべてのオブジェクトを含む、java.lang.AutoCloseableを実装するすべてのオブジェクトをリソースとして使用できます。

>Oracle Java Documentation
>https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html

つまり、AutoCloseableを実装すればtry

元記事を表示

「ソースが見つかりませんでした」eclipseでデバッグした時に出てきたら

eclipseでspringbootを使って開発している駆け出しエンジニアです。
やり方を調べながらデバッグをやろうとした時に出てきたエラーの解決方法についてです。

##状況・原因

ブレークポイントを立てて、デバッグを起動しました。

ブレークポイントで止まったと思ったら、赤文字で
「ソースが見つかりませんでした」と表示されました。

ソースルックアップパスというものに動かしているプロジェクトが含まれていなかったことが原因でした。

##解決方法

– デバッグの所の虫みたいなマークの隣にある逆三角クリック

– →デバッグの構成→ソースと進む

– →ソースルックパスで「追加」を押して、使ってるJavaプロジェクトを追加する

僕はこれで無事に解決されました。
試してみてください。

元記事を表示

JavaFXのTableViewで最後の列を自動制御にする

# 概要
JavaFXのTableViewの列幅の制御で、困ったのでそれの対応方法のメモ。

最後の列を自動制御にして、テーブル幅いっぱいに列が埋まるようにしてみた。

# ColumnResizePolicy
JavaFxのTableViewの列幅の制御については、ColumnResizePolicyという仕組みがある。
これは、初期描画時や列幅の調整時に、どのように列幅の制御をするかを決めている仕組みになるようだ。

デフォルトで用意されているのは2種類

| 定数 | 概要 |
|:—————–|:————————–|
| UNCONSTRAINED_RESIZE_POLICY | 特に制御は無く、ユーザーが動かした通りに列幅を処理する|
| CONSTRAINED_RESIZE_POLICY | 初期描画時などは均等の列幅、列の伸縮時はそれに合わせて、他の列を均等に処理する |

これ以外で独自の処理が必要な場合は実装する必要があり、実態としてはCallb

元記事を表示

Spring Bootで簡易検索アプリ作成

標題の通り、検索アプリを作成しました。

##使用環境
・Windows10 (64bit)
・spring-boot:2.2.6
・Eclipse:4.9.0
・H2

#完成画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/631044/97aab4a7-525b-eb09-b155-5b8c51140ba9.png)

ジャンル、著者、タイトルのいずれかまたは、すべて入力した際に
画面の下部にある内容を引っ張ってきます。

#Entity

“`java:BookData.java
import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class BookData {

@Id
private long isbn;

private String genre;
private String author;
private String title;
private

元記事を表示

【#FizzBuzz】いろいろな言語で”1から100までの数字を数えて3の倍数と3の付く数字のときにだけアホになる”というのを書いてみる

ふだん定期的にコードを書いていないと、ふとしたときに簡単なロジックのコードも書けなくなってしまう場面に遭遇してしまったため、リハビリの意味も含めて、再勉強した際の内容を自分用のメモとしてまとめました。

# 0. 説明
世界のナベアツさん(桂三度さん)の最も代表的なネタ「3の倍数と3が付く数字のときだけアホになります」というものを、いろいろな言語で実装してみます。

**Wikipedia – 桂三度#主な持ちネタ&ギャグ**
https://ja.wikipedia.org/wiki/桂三度#主な持ちネタ&ギャグ

単純に1から100までの数字を改行を入れながら出力するのですが、3の倍数と3が付く数字のときだけ「٩( ᐛ )و」という顔文字を「:(コロン)」と合わせて数字の後ろに出力します。

“`:出力イメージ
1
2
3 : ٩( ᐛ )و
4
5
6 : ٩( ᐛ )و
7
8
9 : ٩( ᐛ )و
10
11
12 : ٩( ᐛ )و
13 : ٩( ᐛ )و
14
15 : ٩( ᐛ )و
16
17
18 : ٩( ᐛ )و
19
20
21 : ٩( ᐛ )و
22

元記事を表示

MyBatisで忘れがちなこと個人的なまとめ

[MyBatis](https://mybatis.org/mybatis-3/ja/index.html)は比較的自由にSQLが組めて便利なORマッパーなので個人的にはよく使うが、たまに使うと忘れがちなことが色々あるのでその際の備忘録としてまとめてみました。

#ヘッダ明細型のデータを扱う
ヘッダテーブルと明細テーブルでが紐づいているデータを1つのマッパーでとってくるときのMyBatisの設定ファイルとSQLの書き方。
→ [MyBatisでヘッダ明細型のデータを扱う](https://kumasoft.blogspot.com/2020/04/mybatismaster-detail.html)

ページネーション用にデータをとってくるときなど行範囲を指定して取得するが、MyBatisのAPIでやろうとすると想定外の行が返ってくる、その回避方法。
→ [MyBatisでヘッダ明細型のデータを扱う(行範囲を指定)](https://kumasoft.blogspot.com/2020/04/mybatismaster-detail.html)

#そのほか
他にも順次追記していきます

元記事を表示

【AtCoderProblem-ABC100】のC問題「*3 or /2」をJavaで強引に突破する【コード】

## はじめに
強引に突破したのでその記録を残しておきます。

## 問題

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

## コード

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

public class TorT{
public static void main(String[] args){

Scanner sc = new Scanner(System.in);

int N = sc.nextInt();
int count = 0;

for(int i = 0; i < N; i++){ int a = sc.nextInt(); while(true){ if(a % 2 == 0){ a = a / 2; count = count + 1; }else{ break; } }

元記事を表示

minecraft1.14.4MOD開発覚え書きその1[独自レシピ]

#はじめに
minecraft1.14.4のMOD開発を始めたとき、開発に関する情報の少なさに苦労したので、自分用のメモ兼これからMOD開発する方の助けになる(かもしれない)ことを書いておきます。
本記事ではMOD独自のレシピ形式を作るときの解説をします。
#開発環境
||バージョン|
|:—:|:—:|
|OS|Windows10|
|Forge|28.2.0|
|JDK|AdoptOpenJDK 8u242-b08|
#環境構築
環境構築を説明した記事は他の方が書いたものがすでにあるので、そちらを参考にしてください。

↓ 私が環境構築する際に参考にした記事です
[Minecraft 1.14.4 Forge Modの作成 その1 【開発環境の準備 IntelliJ IDEA】](https://qiita.com/Hiroya_W/items/f38089724d9358d1668d)
[TNT Modders:環境構築](https://www.tntmodders.com/tutorial/env-1144/)
#独自レシピ
例えば二つのアイテムを同時に精錬して合金

元記事を表示

java でAPI呼ぶ時にjavax.net.ssl.SSLHandshakeException発生すること

だれか答えたらありがたいです

https://stackoverflow.com/q/61788988/13538484

       URL url = new URL(“https://xxxxRequest”);
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestMethod(“POST”);
conn.setRequestProperty(“Content-Type”, “application/json; charset=utf-8 “);
//some headers and params
OutputStreamWriter os = new OutputStreamWriter(conn.getOutputS

元記事を表示

【JavaServlet】千里の道も一歩から 二歩目

#jspファイル作りましょう
まずはひな形から

“`html:login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>




ログイン画面



“`
1行目の<%@ ~ %>はjspファイルを記述するときのお約束で、それ以外は基本的にHTMLのように扱える
ではbody内を実装していくよ

“`html:login.jsp

name:
password:
Integerメモ

今回はIntegerクラスのメソッドの使い方について学んでいきます。
随時更新予定です。

#compare(int x, int y)
2つのint値を数値的に比較します。
x == yの場合は値0、
x < yの場合は0より小さい値、 x> yの場合は0より大きい値

“`java
System.out.println(Integer.compare(1, 2));
System.out.println(Integer.compare(2, 2));
System.out.println(Integer.compare(5, 2));
“`
“`java
-1
0
1
“`

#compareTo(Integer anotherInteger)
2つのIntegerオブジェクトを数値的に比較します。

このIntegerが引数Integerと等しい場合は値0。
このIntegerが引数Integerより小さい数値の場合は0より小さい値。
このIntegerが引数Integerより大きい数値の場合は0より大きい値。

“`java
Integer number = new

元記事を表示

jarコマンド入門

# 第5章 成果物をアーカイブする

JARファイルのオプションについて理解するための事前知識として、
まずはJARファイルの仕様について説明します。

## JARファイルの構成

JARファイルには、以下の要素を含めることができます。
それぞれの要素について、「sample-root.jar」というJARファイルがあると仮定し、説明します。
スクリーンショット 2020-05-27 15.11.58.png

それぞれの概要について、以下に説明します。

### INDEX.LIST
jarコマンドの-iオプションで生成されるファイル。
このファイルが格納されているJARファイルと、それが依存している他のJARファイル内に
格納されているパッケージの位置情報をインデックス化することで、
クラスローダの処理高速化

元記事を表示

javaコマンド入門

# 第4章 コードを実行する

## Javaアプリケーションの種類

javaコマンドによるアプリケーションの実行について説明する前に、
Javaのアプリケーションにはどういったものがあるのかを見ていきます。

以下、Javaアプリケーションの大まかな分類です。
説明もざっくりしているので、気になった方はご自身で調べてください。

– コンソールアプリ
PromptやTerminalなど、コンソールから対話方式で利用するアプリ。
– デスクトップアプリ
1端末内で完結しているアプリ。GUIと言われることもある。
– Webアプリ
Webサーバとクライアント間の通信により処理を行うアプリ。
– Androidアプリ
Android向けのデスクトップアプリ。(ものの例えです)
– 組み込み系プログラム
家電など、ハードウェアに直接組み込まれたプログラム。

javaコマンドでは主に、コンソールアプリやデスクトップアプリの実行を行います。

## javaコマンドの概要

javaコマンドを実行すると、Javaアプリケーションが起動します。
javaツールはまずJREを

元記事を表示

javacコマンド入門

# 第3章 ソースコードをコンパイルする

## Javaにおけるコンパイルとは
コンパイルとは、平たく言えば人間にわかるように書かれたソースコードを
機械が理解できる機械語に翻訳する作業です。

Javaのコンパイルの仕組みは独特で、javacコマンドはソースコードを
Javaバイトコード(中間コード)というものにコンパイルします。

なぜ、機械語に変換しないのかというと、
Javaの基本理念「Write once, run anywhere.」の実現のためです。
ソースコードを直接機械語に変換してしまうと、コンパイルされた機械語は
コンパイルを実行した環境に「依存」するようになりますが、
JVMにはJavaバイトコードを機械語に変換する機能が実装されているため、
JVMさえ導入すればどのような環境であってもJavaを実行できるようになります。
つまり、「ソースコードを一度書いてしまえば、環境が異なっても実行できる」のです。

## javacコマンドの概要

javacを実行した際のコンパイルは、以下のような動きで行われます。

1. 指定したクラスを解析し、依存関係のある型を検索

元記事を表示

【弊社新人に向けて】開いたら必ず閉じよう

# 何が言いたいの?
**開いたら必ず閉じよう**ということです。
ファイルが開きっぱなしになっていると、場合によってはファイルの読み書きが行えなくなります。
それでは困りますね。

# 例えば?
`FileReader`クラスや`FileWriter`クラスを用いて、テキストファイルを読み書きする場合などです。
昔は`BufferdReader`クラスなんかを使っていましたが、今どきは`Scanner`クラスなるものが使われているようですね。

実際にテキストファイルの内容を読み込み、内容をコンソールに出力するプログラムを以下に示します。

“`java:サンプルプログラム
import java.io.File;
import java.util.Scanner;

public class FileOpenTest {
public static void main(String[] args) {
try {
// テキストファイルを開く
Scanner scanner = new Scanner(new File(“F1歴代チャンピオン一覧.csv”));

元記事を表示

Spring Bootでテストがコマンドラインから実行できない問題を解決

## 動作環境
java 1.8
Spring Boot 2.2.4
JUnit4

## プロジェクト構造
+ 初学者のため構造が雑なのはご容赦下さい

“`shell
src
│   ├── main
│ │ └── 省略
│ │
│   └── test
│   └── java
│   └── com
│   └── testTool
│   ├── TestToolApplicationTests.java
│   └── web
│   ├── controller
│   │   └── TestToolControllerTest.java
│   └── service
│   └── TestToolServiceTest.java

“`

## 問題点
+ `$ m

元記事を表示

formatter-maven-pluginを使用したenumのフォーマット方法(Java)

#概要
[formatter-maven-plugin](https://github.com/revelc/formatter-maven-plugin) を使用してenumのコードの自動フォーマットを行います。

#実現したいフォーマット
###実行前

“`
public enum Answer {

YES(1),NO(2),MAYBE(3);
}
“`

###実行後

“`
public enum Answer {

YES(1),
NO(2),
MAYBE(3);
}
“`

#設定箇所
設定ファイル(xml)の `alignment_for_enum_constants` の値を `49` にすることで上記フォーマットをかけることができました。

“`

“`

元記事を表示

WSlで,Vue.jsによるアンドロイドアプリ開発環境を構築しようとしたときにハマった

備忘録

[【Vue.js】WSL 上で Vue.js を用いた Android アプリを開発する](https://github.com/NativeScript/nativescript-cli/issues/5304)
こちらを用いて,よっしゃ開発環境作るどーーと意気込んでいたら…

“`bash

sudo $ANDROID_HOME/tools/bin/sdkmanager “tools” “emulator” “platform-tools” “platforms;android-28” “build-tools;28.0.3” “extras;android;m2repository” “extras;google;m2repository”

Error: Could not find or load main class com.android.sdklib.tool.sdkmanager.SdkManagerCli
“`

とのエラーが出た.調べていると,JDKが8よりも新しいものを使うとうまくいかないとのこと.この段階で最新版のjava14を入れていた

元記事を表示

OTHERカテゴリの最新記事