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

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

ABC254A~Cの解答[Java]

## はじめに
これはコンテスト中に解いた解法なので少々煩雑だとは思いますが、ご理解いただけると嬉しいです。

では、コードを解説していきます。

## A – Last Two Digits
問題文は[こちら](https://atcoder.jp/contests/abc254/tasks/abc254_a)

下二桁を出力すれば良いんですが、int型で受け取っちゃうと01が1になっちゃったり、わざわざ長さを整えるためにString.formatみたいなの使ったりするのはめんどくさいのでString型のまま受け取ってやりましょう。
“`A.java
import java.io.*;
class Main{
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static PrintWriter pw = new PrintWriter(System.out);

public static void main(String[] args)throws IOExce

元記事を表示

Spring BootでのAOPを利用したログ出力

# はじめに
 [以前作成したwebアプリ](https://qiita.com/be834194/items/241d4c5b16eaa326e3dc)で、ログをファイル出力できるように改良した際に学んだことをまとめました。

# 共通処理を意識していないコードの例
 例として、ユーザをデータベースに追加する処理を用意しました。データベースへの追加のほかに、ログを表示するコードが書かれています。
“`RegistrationService.java
@Service
public class RegistrationService {

private final RegistrationMapper registrationMapper;

private final PasswordEncoder passwordEncoder;

private static final Logger logger = LoggerFactory.getLogger(RegistrationService.class);

public RegistrationService

元記事を表示

研修で行ったグループ開発(9日)

## 初めに
新卒として入った会社にて、受けさせて頂いた二か月のJava研修のラスト9日で行った、グループ開発についてまとめた記事です。

### 成果物
`家庭教師と学生のマッチングを行うシステム`を作成しました。
![スクリーンショット 2022-06-05 003400.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/695130/74c48c15-0307-3dbf-c9c1-d8c730e573c7.png)

### グループについて
6人のグループでした、簡単に私の主観を交えて役割(グループリーダー、サブリーダー、テクニカルリーダー[フロント]、テクニカルリーダー[バック]、DB管理、品質管理)と共に紹介します。

Wさん(グループリーダー)
・研修中、プログラムの演習で後述する神に次いで優秀な成績を残していた方、コーディングはもちろん、リーダー適性もとてもあったため、グループ最初のミーティングで満場一致でリーダーに。

Kさん(サブリーダー)
・自頭と顔が良い、言語化が上手いためメンバー

元記事を表示

Java SE Bronze の勉強方法

# Java SE Bronze の勉強方法

## 目的
今回、[Java SE Bronze 1Z0-818](https://education.oracle.com/ja/java-se-bronze-available-only-in-japan/pexam_1Z0-818)に合格したので勉強方法をメモしておきたい

## 学習開始時スペック
* Javaは大学の授業で触ったことがある
* 細かい文法は忘れているが、型(int, float…)、For/While、Ifはわかっている
* オブジェクト指向の考え方はなんとなく知ってる

## 学習期間・時間
* 1ヶ月×1-2時間程度 ≒ 45時間ぐらい

## 学習教材
### オラクル認定資格教科書 Javaプログラマ Bronze SE(試験番号1Z0-818)
https://www.amazon.co.jp/%E3%82%AA%E3%83%A9%E3%82%AF%E3%83%AB%E8%AA%8D%E5%AE%9A%E8%B3%87%E6%A0%BC%E6%95%99%E7%A7%91%E6%9B%B8-Jav

元記事を表示

四捨五入、切り捨て、切り上げをしたい(Math)

## はじめに
現在、独学でJavaScriptを勉強中です。
`Mathオブジェクト`で躓いてしまったのでまとめてみました。

## よく使うMathオブジェクト
`Math.round` ・・・四捨五入する(戻り値 数値)
`Math.round()メソッド`は次のような挙動をする。
・小数点部分が0.5以上であれば、次に大きい整数へ切り上げ
・小数点部分が0.5以下であれば、次に小さい整数へ切り下げ
“`javascript
Math.round(5.34); //結果: 5
Math.round(6.8); //結果: 7
“`
`Math.floor` ・・・切り捨てる。数値以下の最大の整数を返す(戻り値 数値)
※少数の大小に関わらず切り捨てる。
“`javascript
Math.floor(5.34); //結果: 5
Math.floor(6.8); //結果: 6
“`
`Math.ceil` ・・・切り上げる。数値以上の最小の整数を返す(戻り値 数値)
※少数の大小に関わらず切り上げる。
“`javascript
Math.ceil(5.34); //結

元記事を表示

Javaを使用したスクレイピングでポケモンの名前と種族値を取得し、CSV出力してみた。

# 初めに
本記事は、以前Javaでスクレイピングを行う方法についての記事とOpenCSVについての記事を作成しました。
今回はそれを組み合わせて、ネットからポケモンの種族値を取得し、それをCSVファイルに出力するというのを行ってみました。

https://qiita.com/T-H9703EnAc/items/d4e887dadc63eeb25a8c

https://qiita.com/T-H9703EnAc/items/0cbb28935ca7a7e30d9c

開発環境の構築方法について

https://qiita.com/T-H9703EnAc/items/002538a2b040fc188705

# 実装の流れ
今回は以下のサイト(ポケモン徹底攻略)から取得していこうと思います。

https://yakkun.com/

図鑑No.1のフシギダネの情報を基本に取得していきます。

https://yakkun.com/swsh/zukan/n1

次の順番で実装していきます。
「1.URLの解析→2.名前の取得→3.種族値の取得→4.CSVの出力」

## 1.

元記事を表示

重複した値の二分探索

# はじめに

ソートされた配列からある値を検索するには、二分探索することで、計算量O(log n)となります。
検索範囲を2分の1に絞っていくので、1万件から検索する場合も、2^14=16384なので、十数回で見つかります。

ここで、配列内に同じ値を許している場合に、どこかヒットした位置を探すのは簡単ですが、同じ値の左端(添字が最も小さい)や右端(添字が最も大きい)の位置を探すにはどうすればよいか疑問に思いました。
数件重複しているだけなら、ヒットした位置から左へ右へ1つづつ境界を探すことを思いつきましたが、ここで、検索対象が性別で、値が男と女しかなかった場合、左端と右端を探すためのループが、初めから逐次検索するのと変わらないように見えます。

# Arrays.binarySearch

そのくらい標準ライブラリならやってくれるのかと思えば、『どれが検索されるかについての保証はありません。』。

> バイナリ・サーチ・アルゴリズムを使用して、指定されたint値の配列から指定された値を検索します。この呼出しの前に、sort(int[])メソッドで配列をソートする必要があります。リス

元記事を表示

OpenCSVの使用方法について

# 初めに
本記事は、JavaのOpenCSVの使用方法について記載しています。Gradleを使用したJavaの開発環境があれば問題ないと思います。わからない方は以下の参考にしてください。

https://qiita.com/T-H9703EnAc/items/002538a2b040fc188705

# OpenCSVを導入
以下からライブラリを追加してください。

http://opencsv.sourceforge.net/dependency-info.html

以下のようにbuild.gradleを記述してください。
“`:build.gradle
plugins {
id ‘application’
// 外部jarを読み込めるようにする
id ‘com.github.johnrengelman.shadow’ version ‘7.1.2’
}

repositories {
mavenCentral()
}

dependencies {
testImplementation ‘junit:junit:4.13.2’

元記事を表示

ダウンロードした複数銘柄のチャートデータに対応する

# はじめに

前記事
1. [auカブコム証券のkabuステーションREST APIをcurlで叩く](https://qiita.com/hiuchida/items/fcdd3d6ff921b386a37e)
2. [auカブコム証券のkabuステーションREST APIをjava(generated by the swagger code generator)で叩く](https://qiita.com/hiuchida/items/73b7fc846d4c9501ef2f)
3. [auカブコム証券のkabuステーションREST APIの残高照会をcurlとjavaで叩く](https://qiita.com/hiuchida/items/9eb5336755a3d1b1a3df)
4. [auカブコム証券のkabuステーションREST APIの残高照会から先物OPのdeltaを計算する](https://qiita.com/hiuchida/items/6e0d8d5114192bec1632)
5. [auカブコム証券のkabuステーションREST APIのテスト用モック

元記事を表示

Gradleコマンド・build.gradle記述方法まとめ

# 初めに
本記事はJava使用時のGradleの使用を想定しています。ご注意ください。
[Gradleコマンド](#gradleコマンド)
[build.gradle記述方法](#buildgradle記述方法)
# Gradleコマンド
Gradleコマンドについてです。
## プロジェクトの作成
プロジェクトの作成方法
“`# プロジェクトの作成
gradle init
“`
## クリーン
クリーンの方法
“`:# クリーン
gradle build
“`
## ビルド
ビルドの方法
“`:# ビルド
gradle build
“`
## プログラムの実行
“`:# プログラムの実行
gradle run –args=”任意の引数1 任意の引数2…”
“`
以下例です。
“`:# 例
gradle run –args=”1 1″
“`
# build.gradle記述方法
build.gradleの記述方法についてです。
## Mainクラスを指定
“`:# Mainクラスを指定
application {
mainClass =

元記事を表示

「マイクロサービスパターン」の復習 13章 リファクタリング

## 13章 マイクロサービスのリファクタリング

– ついに最終章である13章
– モノリシックアーキテクチャをマイクロサービスアーキテクチャへとリファクタリングする方法について
– 著者の主張は、最初はモノリシックで動くものをサクッとつくってから、メンテナンス性向上のためにマイクロサービスに変えるのが良いとしています
– なので必然的に、モノリシックからマイクロサービスへのリファクタリングは必須となります。

## マイクロサービスへのリファクタリングの概要

– まず、システムを0から作り直す「ビッグバンリライト」は止めた方がいいとのこと
– これは元と同じ機能を再現するだけで数年かかってしまうのでビジネス的になりたたないから
– 私の実体験からいってもこれは確かにその通り。ビジネス的に新たな価値を提供することができないので、会社的にも見放されてしまうかもしれません。
– ストラングラーアプリケーション
– 元のシステムから少しずつ一部を切り出してサービス化していって、最後には全体がマイクロサービスになるというやり方。著者的にはこちらがおすすめ。
– この

元記事を表示

Robocode Tank Royale 盤面を動き回る

こちらの続き

https://qiita.com/JQinglong/items/7ec02a689f78abbd3324

## 動きを変える

近場をうろちょろせず、混戦は避けるために
・盤面を動き回る
・敵に衝突したらそこから離れる

止まっている敵にも、意外と弾が命中しない。
・せめて止まっている敵には確実に命中させる

これらをやっていきます。

## 盤面を動き回る

参考になるのは、Crazy ですね。

setForward(40000) で、とりあえず長距離動く「設定を」します。
set系を使うことで、複数の動作をパラレルにさせることができる、ということで、合わせて setTurnRight(90) も使用しています。set系のメソッドの説明を見ると、IBaseBot.go() を行うまでの設定が使われるということのようなので、下記のように書くと、ぐるぐる回り出します。左に角度を変えながら前に進むので、そんな感じになるわけです。

“`java
setForward(400);
setTurnLeft(90);

元記事を表示

Robocode Tank Royale(Robocode が2022年に帰ってきた!)

Robocode、たまに思い出してはいたのですが、もう日の目を見ることもないかなと思っていました。

しかし、ふとまた気になって、調べてみたところ、ページが更新されている!

https://robocode.sourceforge.io/

> Note: In February 2022 a new version of Robocode is introduced named Robocode Tank Royale, which is a new platform for Robocode. This new version supports the .Net 5.0 and Java/JVM platform, and the web platform in the future.

> 注:2022年2月にロボコードの新バージョンが登場し、ロボコード・タンク・ロワイヤルと名付けられました。この新バージョンは、.Net 5.0とJava/JVMプラットフォームをサポートし、将来的にはWebプラットフォームもサポートする予定です。

新しいサイトはこちら。その名も、「Roboc

元記事を表示

ABC241A~Cの解答[Java]

## はじめに
このコンテストは私が初めてrated参加したときのコンテストです。思い出深いです。
昔書いたコードなので今の自分が書くなら~っていうコードも一緒に書きます。

では、実際にコードを解説していきます。

## A – Digit Machine
問題文は[こちら](https://atcoder.jp/contests/abc241/tasks/abc241_a)

初期値0として実際に試行してみれば答えが出ます。いわゆるやるだけ。
“`A.java
import java.io.*;
//値取得用クラス
class subMain{
public static int[] parsingInt(String someInt){
//取得した文字列を空白区切りで格納
String[] str = someInt.split(” “);
int[] Intel = new int[str.length];
//一つずつparseIntして格納
for(int i=0;i

元記事を表示

ジャンケンの勝敗判定プログラム【Java】

# 1.はじめに

こんにちは、坂内太一です。今回は僕が新入社員研修で実際に出された課題の類似問題を自分自身のアウトプットも兼ねて解説していきます。
最後まで読んでもらえたら嬉しいです。

# 2.問題内容

Aさん、Bさんが5回ジャンケンを行い、勝ちが2点、あいこが1点、負けが0点で最終的に誰が一番得点が多いかを判定するというものです。
非常にポピュラーな問題ですが他のプログラムと違い3すくみを判定するのに僕自身少し悩んだこともあり、解説付きのコードを書いたのでシェアしようと思います。

# 3.解説入りのコード

~~~ Main.java
import java.util.Scanner;

public class Main {

public static void main(String[] args) {

//2人のプレイヤーの定義
int player1 = 0;
int player2 = 0;

//キーボードから入力を受けるためのscanner
Scanner scanner = new Scanner(System.in);

元記事を表示

さいしょにおぼえる Java の stream構文(勉強会資料)

## これはなんですか
streamを知らぬ幼きものたちへのアドバイス

これさえ覚えておけばテストで100点・・はとれないけど、60点くらいはなんとかなるかもしれない。

## そもそも
Javaでfor文を使うのは、主に配列として存在する変数を参照し、加工もしくは別な結果を生成するために用いるためです。

たとえばこんなかんじ。

### 1文字ずつ
“`
String str = “ABCDE”;

for (i=0; i list = List.of(‘A’, ‘B’, ‘C’, ‘D’, ‘E’);

for (char c: list) {}
“`

### map
“`
Map map = new HashMap() {
{
put(“key1”, “A”);
put(“key2”, “B”);
put(“key3”, “C”);
put(“key4”,

元記事を表示

AnnotationProcessorでプログラムの自動生成をするときに役に立つかもしれない記事

## AnnotationProcessorでプログラムの自動生成
:::note warn
本記事はあまりにも情報が少ないため書いた記事です。本なら情報があると思うのですが、ネットでは見つけられませんでした。
そして、書いてる人は使うことをあきらめました。
:::

プログラムを一から生成する場合こちらで紹介する方法ではなく、テンプレートなどから`JavaFileObject`を生成したほうが楽です。
## 代替手段
– リフレクションで実行時に何とかする - 動作速度は遅いですが情報が多いです。
– 部分的に`JavacParser`で作成して差し替え – 圧倒的に楽になると思います。

### 環境
– JDK corretto-11
– Gradle gradle 7.4
– Intellij IDEA 2022.1

## gradleの設定
`AnnotationProcessor`を作成するプロジェクトにいかを追加します。
“`gradle
dependencies {
annotationProcessor ‘com.google.auto.service:a

元記事を表示

SpringBoot2.5.1以降でDBの初期化が走らない

こちらの記事のSpringBoot2.5.1以降の解消手順です。

https://qiita.com/gami_/items/0208a7e6d1a41b447c84

## 結論

以下を設定してください。

“`application.properties
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:file:./target/db/testdb
spring.datasource.username=sa
spring.datasource.password=
spring.sql.init.mode=always
spring.sql.init.schema-locations=classpath:schema.sql
spring.sql.init.data-locations=classpath:data.sql
“`

SpringBoot2.5.0以前は
“`application.properties
spring.datasource.initi

元記事を表示

一次関数の傾きと切片を計算する

# はじめに

前記事
1. [auカブコム証券のkabuステーションREST APIをcurlで叩く](https://qiita.com/hiuchida/items/fcdd3d6ff921b386a37e)
2. [auカブコム証券のkabuステーションREST APIをjava(generated by the swagger code generator)で叩く](https://qiita.com/hiuchida/items/73b7fc846d4c9501ef2f)
3. [auカブコム証券のkabuステーションREST APIの残高照会をcurlとjavaで叩く](https://qiita.com/hiuchida/items/9eb5336755a3d1b1a3df)
4. [auカブコム証券のkabuステーションREST APIの残高照会から先物OPのdeltaを計算する](https://qiita.com/hiuchida/items/6e0d8d5114192bec1632)
5. [auカブコム証券のkabuステーションREST APIのテスト用モック

元記事を表示

4分チャレンジ:ファイル監視&差分取得のフレームワーク

# はじめに

前記事
1. [4分チャレンジ:タブ区切りファイルをhtmlファイルに変換する](https://qiita.com/hiuchida/items/8be2894b4f38397ba7c0)
2. [4分チャレンジ:31時(翌7時)基準のファイル分割ツール](https://qiita.com/hiuchida/items/f57268047995f2290a22)
3. [4分チャレンジ:テキストファイルを分割してランダムアクセスする](https://qiita.com/hiuchida/items/635d889056e63f14459f)

もう4分で作れっこないので、思いついたことを書き残しておけば、非同期に出来てくれるいいという感じ。

# 要件

Linuxでlessでファイルを開いて大文字Fを押して、ログファイルの監視ができます。
tail -fでも同じ。
Windowsでファイル監視して差分表示するツールが欲しいというよりは、差分を1行づつ渡してくれるフレームワークが欲しい。

# 仕様

ファイル監視は、むかしだと、File.lastModified

元記事を表示

OTHERカテゴリの最新記事