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

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

標準入力・標準出力/エラー出力

本ページでは標準入出力とエラー出力について書いていきます。
Linuxに関してですが、個人的な慣れと共にJavaでの説明も混じっています。

コンピュータも、
何かアクションが無いと何も始まらないのは同じのようで…
やることは決まっていても、材料が無ければ何も作れません:cooking:
 例:身長・体重からBMIを算出→データが無いと計算できない など

データストリーム:コンピュータの、入力→処理→出力 の一連の流れ

入力は標準入力の1つ、
出力は標準出力と標準エラー出力の2つ

###標準入力 stdin
指定をしていないときはキーボードからの入力。
ファイルを指定することもできる 

前述のBMI算出例だと、できれば大人数のデータから調べたいですよね。
→リダイレクトの項目もご覧ください。

###標準出力 stdout
「出力する」というコマンドの時やコマンド実行の過程で通常処理が問題ない場合に端末に出力。
指定をしていないときはコンソール画面

上記標準入力・出力はまとめて標準入出力(stdio)とも。

###標準エラー出力 stderr
コマンド実行時に通常処理

元記事を表示

SpringBootポートフォリオ作成_画面

#SpringBootポートフォリオ作成
##要件
Spring Bootで一通りアプリを書く
・Todo項目追加、一覧取得、完了済みマークメソッド
・lombok ログ validation jQuery
JUnitテストケースで単体テスト作成
→ 現在ここまで
Git GitHUb

Docker(-compose)を使用
AWSでデプロイ

##作業手順
・アプリケーションで使用するデータベースを作成する。
・STS で新規プロジェクトを作成する。
・テーブル定義を作成する。
・URL 設計を作成する。
・マイグレーションファイルを作成する。
・機能ごとに…
・マッパーやドメインを作成する。
・コントローラーを作成する。
・テンプレートを作成する。
##新規プロジェクト作成
名前:springtodo
Javaバージョン:11
グループ:dev.itboot
成果物:springtodo
バージョン:1.0.0説明省略
パッケージ:dev.itboot.mb
依存関係で以下を選択して
SpringBootDevTools(開発ツール)
Lombok(開発ツール)
Valida

元記事を表示

[競プロ]いもす法実装【Java】

# いもす法を解きます

## いもす法とは
領域内の加算を効率的に行うアルゴリズムです。多次元でも行えて、便利なアルゴリズムとされています。累積和と関連があります。参考リンクは以下のとおりです。

https://imoz.jp/algorithms/imos_method.html

## 例題に合わせて解説
[ABC035 – C オセロ](https://atcoder.jp/contests/abc035/tasks/abc035_c)
ここでは例題に合わせて解説していきます。
今回、オセロのN個の駒が黒を上にして一列に置かれています。その後、Q回、ある駒からある駒までを裏返すという操作をします。その結果を一列で出力せよ、という問題です。

今回の制約からN,Qは200,000までで、例えばN=Q=200,000であったとし、各QにおいてN個の駒を裏返すという操作をするとすると、愚直に実装した場合、O(NQ)の計算量が必要となり、TLEとなってしまいます。
そこでいもす法の登場です。

今回は例題に合わせt1次元の領域について考えます。いもす法では、領域の両端のみ考え、*

元記事を表示

Java Gold SE 11 合格体験記

本日、Java Gold SE 11を受検し、無事合格しましたので、合格までの経緯を共有させていただきます。

まずは私について。

– WEB系自社開発企業開発職, 新卒一年目(入社3ヶ月目)
– 学位:学士(経済学)
– 情報系資格:基本情報技術者, Java Silver
– Javaの実務経験:なし
– 開発経験:ベンチャー企業でインターンシップを半年間(フロントエンドの開発に従事)

入社前にJavaを使うとは聞いていたので、大学4年のときにJava Silver SE 11を受検し、合格はしていたのですが、早速Java Goldを受検するよう指示が出たので、今回受検の運びとなりました。

Javaの実務経験がない中、Java Goldを受検するのはなかなかレアかもしれないということで、以下合格体験記です。

と、その前に、Java Gold SE 11の試験についての情報はまだまだサーチャブルではないのではないかと思いますので、そちらにも触れていきます。

(Java Gold SE 8の情報はたくさんあるんですがね…)

# 旧試験との範囲比較

Java Gol

元記事を表示

条件分岐を整理する

親記事 : https://qiita.com/Regpon/items/1116679adadd8fb76f3f

https://qiita.com/Regpon/items/1116679adadd8fb76f3f

# 判断や処理のロジックをメソッドへ

顧客の属性に応じて値段を変えるロジックがあるとする。
例として顧客属性が生徒だった場合のロジックを考えてみる。

“`Java
if (customerType.equals(“student”)) {
price = basePrice * 0.7;
}
“`

このようなロジックにすると、学生かどうかの判定、学生だった場合値段がどのようなロジックで生まれるのかがわかりにくいのと、管理がしにくくなる。
このロジックの変更を加える際、果たして本当にこの部分の変更だけで問題ないのか、他に同じようなロジックを持ってしまていないか考えなくてはならない。
そこで、学生かどうかを判断するロジック、学生だった場合の値段を決めるロジックを切り出し、再利用可能なメソッドに置き換えることを検討する。

すると以下のようになる。

“`

元記事を表示

【Java】Listに格納した値の平均値を出力

ちょっと悩んだのでメモとして。

“`Average.java
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

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

//Listに値を格納(ランダムで)
List list = new ArrayList<>();
for(int i=0; i<5; i++) { Random random = new Random(); int randomNum = random.nextInt(101); //0~100 list.add(randomNum); } System.out.println(list); //値が格納されているか確認(後で消す) -> 例:[62, 73, 43, 35, 58]

//Listに格納した値の合計
double sum = 0;
for(int

元記事を表示

【Java】間違いやすい! オーバーロード と オーバーライド の違い

# はじめに
Java を勉強しているとぶち当たる壁。
そう、**「オーバーロード」と「オーバーライド」の違い**です。

今回は、混同しやすいこの2つの用語について、私が「あ!なんかわかったかも!」と思えたイメージを紹介したいと思います。

# 前提
なるべく本筋である「オーバーロード」と「オーバーライド」の違いが伝わりやすいように、説明がそれすぎないよう心がけています。

なので、これから説明に出てくる用語(例えば「メソッド」「コンストラクタ」「継承」など)については、この記事では1から説明はしていません。

そんな用語まったくわからない!聞いたこともない!という方にとっては混乱を増やしてしまうだけかもしれませんが、そのあたりご理解いただいた上で読んでいただけると幸いです:bow_tone1:

# まず結論から
オーバーロード は「元々あるメソッドが使える**道を増やす**」
オーバーライド は「元々あるメソッドの**上に乗って上書きする**」

これだけでは、え、どういうこと…?と思いますよね。
まず、それぞれどういう意味なのか見ていきましょう。

### 【オーバーロード】

元記事を表示

Oracle Java SE8 Silverに合格するまで

2021年06月にOracle認定のJava SE8 Silverに合格したので、経緯を書き残していく。

概要

* 学習期間
* 1ヶ月余り
* 1日あたりの学習時間
* 2-3時間 (休日は5時間ほど)
* 使用した教材、環境
* 徹底攻略 Java SE8 Silver 問題集 (黒本)
* Paiza io
* 学習前のレベル
* PaizaのスキルチェックでBランクが解ける程度

SE8 Silverを受験した理由

もとはBronzeの勉強をしていたが、

* いきなり Silverを受けられる。
* 試験範囲がほぼ同じ

という2点を知り、試しに Silver の問題集に目を通してみたところ、
「確かに解けそうだな」と感じたのでそのまま Silver の学習にスライド。

SE11 ではなく SE8 を受験したのは、
たまたま書店にSE11の問題集が売っていなかったという程度の理由。

勉強方法

* 1周目
通勤時間に解説文を読んでインプットしてた。
条件分岐や繰り返し処理について

元記事を表示

値オブジェクトを作ってimmutableな実装を心がける

親記事 : https://qiita.com/Regpon/items/1116679adadd8fb76f3f

https://qiita.com/Regpon/items/1116679adadd8fb76f3f

# 値オブジェクト

値を扱うための専用の**小さな**クラスを立てる

| 値オブジェクト | 内容 |
|:-:|:-:|
| Quantity | 数量 |
| Price | 料金 |
| Days | 日数 |
| DateOfRecord | 記録日 |
| Telephone | 電話番号 |

などのように業務アプリケーションで使う関心ごとを扱うオブジェクトをクラス化して、そのオブジェクトの振る舞いを集約させる。
そして重要なのが**Setter**を実装しないことだ。

値を代入できるのはあくまでコンストラクタのみ。

値を更新するということはつまり、別の意味を持つオブジェクトに生まれ変わっているため、新たなインスタンス変数として定義すべきだからである。

以下のような注文に応じて注文の合計金額を返すメソッドについて考えたとすると、

“`Jav

元記事を表示

JsonInclude(Include.NON_NULL)のNULLカラムをObjectMapperで強制出力

本稿は `JsonInclude(Include.NON_NULL)` を指定したclassのオブジェクトに対して、
値がnullでもデシリアライズ時に強制的に表示する方法についてのメモである。

# 背景と動機

ObjectMapperではなく、class定義でメンバごとに表示制御を行う場合、
基本的にObjectMapperに関係なく、nullメンバは表示されなくなる。
オブジェクトで指定してるのだからその動作は当然ではあるのだが、
私は開発環境向けにどうしても強制的に表示したくなった。
しかし、nullメンバを表示しない方法はたくさん見つかるが、
逆は全然情報が見つからなかった。

# nullメンバを非表示

オブジェクトの全メンバに対してnullの場合に表示しないようにするには
以下のようにクラスにJsonIncludeを付与すれば良い。
https://fasterxml.github.io/jackson-annotations/javadoc/2.9/com/fasterxml/jackson/annotation/JsonInclude.Include.html

元記事を表示

SerializableのserialVersionUIDが原因で発生するInvalidClassExceptionの対処方法

# serialVersionUIDとは

serialVersionUIDはSerializableなオブジェクトに定義するバージョン番号のようなものです。データのシリアライズ/デシリアライズする際に、互換性を確認するためにこのserialVersionUIDを使用します。

また、serialVersionUIDを定義しない場合、自動で計算されることになります。

## `InvalidClassException`

これは、Serializableなオブジェクトをデシリアライズする際、serialVersionUIDが異なる場合に発生します。

“`
java.io.InvalidClassException
com.sample.data.SampleSerializableData;
Incompatible class (SUID):
com.sample.data.SampleSerializableData:
static final long serialVersionUID =4092797215335171425L;
but expect

元記事を表示

対策例:startActivityForResult(Intent,int) in Fragment has been deprecated

# 背景
startActivityForResult(Intent,int) での画像選択コードが deprecated と言われるので、修正前後のコード例を残しておく。

# コード

## 修正前

“`java
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private final static int RESULT_PICK_IMAGEFILE = 1000;

@Override
public void onActivityResult(int requestCode, int resultCode, Intent resultData) {
super.onActivityResult(requestCode, resultCode, resultData);

if (requestCode == RESULT_PICK_IMAGEFILE && resultCode == RESULT

元記事を表示

インターフェースの多重継承

# はじめに
Java SE 11 Silver取得に向けて学習中に、練習問題にて出題されたのでまとめてみました。
今回は4パターン紹介します。
継承の仕様(オーバーライド、オーバーロード)を把握していると、より理解しやすいかと思います。
また、共変戻り値に関しましては今回は取り上げませんでした。
※オーバーライド、オーバーロードを理解したい方は [こちらの記事](https://qiita.com/Molly95554907/items/fbcfb68a37b56fde4307) を参照

# パターン1
“`java:Interface_A.java
interface Interface_A{
void test();
}
“`
“`java:Interface_B.java
interface Interface_B{
void test();
}
“`
“`java:Interface_C.java
interface Interface_C extends Interface_A, Interface_B{
void test();//コンパイル可
}

元記事を表示

[補足] org.mockito.exceptions.misusing.UnnecessaryStubbingExceptionについて

### 背景
以下記事は [[Web/まとめ] JUnit5 で Mockitoを利用する方法](https://qiita.com/northernbird/items/90ca7713aa1be7d8ae54)で理解に若干時間のかかった `org.mockito.exceptions.misusing.UnnecessaryStubbingException` について、実際のサンプルコードを踏まえて、理解の足しにした追加メモである。

###一体どのような時に起こるのか?

#### (復習&まとめ)まずMockitoで何ができるのか?

– Mockitoを利用することで、テスト対象コードが利用する依存サービス (3rd party libraryだったり、実際の実装がわからない interface classだったり)への依存なしでテストを行うことができる。
– 例えば、実際の実装を使わずとも、Mockオブジェクトを定義し、そのMock オブジェクトがどのような結果を返すかなどを、開発者は各テストケースに応じて挙動を書き換える (=定義する)ことができる
– 利用して

元記事を表示

文字列の長さで意図的に例外処理を発生させる

例外処理を使って坂道メンバーの文字数チェックをする。

“`Java
//例外処理を使って坂道メンバーの文字数チェックをする。
// 新規作成 2021/6/23
// Author 乃木坂好きのITエンジニア

import java.util.Scanner;

public class Sakamichi {
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
System.out.println(“好きな坂道メンバーを入力してください”);
String line = sc.nextLine();
x(line);
System.out.println(“4文字以上のメンバーを入力しました “);

}
static void x(String name) throws Exception{
int len = name.length();
//メンバーの文字数が4字未満なら例外処理を実行する
if

元記事を表示

Parameter 0 of constructor in XXXDao required a bean of type XXXMapper that could not be found.

myPCで環境構築中に発生したので載せておきます。

####1つ目
SpringBootApplicationのパッケージ構成が宜しくない場合があります。
一つ上の階層に移動させてみたり色々確認してみてください。

“`java:com/example/demo/DemoApplication.java
@SpringBootApplication
public class DemoApplication {

public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
“`

####2つ目
必要なプラグインが入っていない
maven,gradleに必要なプラグインが入っていない可能性があるので入れましょう
例:mavenでの場合
記載して更新してあげればこれだけで解決する場合があります。
ペースト時に赤字の警告が出るかもですが気にしないで更新かけてみてください

“`yml:pom.xml

元記事を表示

Javaのstreamを使ってみよう!

#streamを使ってみよう

###1. 使用するオブジェクト

class People { 
private String name;
private int age;
private int gender;

public People(String name, int age, int gender) {
this.name = name;
this.age = age;
this.gender = gender;
}

public People(String name, int age, int gender) {
this.name = name;
this.age = age;
this.gender = gender;

}

public String toString() {

return “People(name=” + name + “, age=

元記事を表示

よく聞く「Apache」,「Tomcat」とは?

Apacheと、Tomcatの理解が曖昧なので、自分用の勉強用としてまとめていきます。

それぞれ一言で言うと、
>**Apache:Webサーバ
>Tomcat:サーブレットコンテナ**

それでは、それぞれ解説していきます。

#通信を表した図
![Group 6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1098849/8ea87548-fb5b-c994-bff1-43c06ebfeba5.png)
[参考](https://www.youtube.com/watch?v=kxjrd2faZMM)
訳の分からない用語がたくさんですが、後ほど解説するので、まずは、流れを説明します。

>Webブラウザでアクセス
→httpリクエストを“Apache Webサーバ“に対して送る
→“Apache“は“modJk“というモジュールを使ってAPサーバ(アプリケーションサーバ)にAJPリクエストを送る
→AJPが受け取り、Webコンテナ(サーブレットコンテナ(画面に見せる側))へ
→Web

元記事を表示

Minecraft(マインクラフト、マイクラ)でマルチサーバを立てる手順

## 1. はじめに
Minecraft(マインクラフト、マイクラ)をマルチプレイしたい!と思ったのはいいものの、realmsを購入したり、仮想サーバを契約してそこで動かす等は一々お金がかかります。(大体月額制です)

もちろん、ほとんど毎日マイクラマルチをやる!であったり、常に誰かが入っていたりするというような状況であるならば、こうしたサービスを購入する方が良いでしょう。
ただし今回の私のように、毎日やるわけでもなく、たまにマルチでできればいいかなくらいの人であったら契約するのは腰が引けます。
そのため、新規にサービスと契約する必要のない手段として、自前サーバを立てる手順を簡単にまとめました。
たまにできればいいや、とか試しにやってみたい、等という場合に参考にしてください。
(Windows10での作業を前提としています。)

## 2.必要なものの準備
– Java
– 開放くん(ポー

元記事を表示

備忘録:springbootにおけるMySQL接続について

springでMySQL接続に苦労したので忘れないように

“`
spring.datasource.url=jdbc:mysql://localhost:3306/App?serverTimezone=Asia/Tokyo
spring.datasource.username=root
spring.datasource.password=
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.hibernate.ddl-auto=create
“`
タイムゾーンを設定しないとエラー
その際、略三文字で指定すると怒られる➡エラー

driver classはmysqlのあとにcjを入れないと赤文字で警告?のようなものが出る。
意味は知らない
これから調べます。

元記事を表示

OTHERカテゴリの最新記事