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

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

ABC168を解いてみた(C問題まで)

こんにちは!!

今回はAtCoderのコンテストに向けて過去問を解いたので、C問題までの各問題について方針と解答コードを投稿していきたいと思います。

#A問題-∴ (Therefore)
https://atcoder.jp/contests/abc168/tasks/abc168_a

###方針
1. 与えられる入力値(Nとする。Nは999以下の正整数)を文字列方で受け取る。
2. 一の位を比べれば良いので、1.で受け取った文字列から末尾の文字を取り出して数値型に変換
3. 2.で変換した値を問題文に従って判定して分岐させる。

###コード
if文の分岐をswitch文に変えても良かったかもしれません…?

標準入力と出力に関しては下記サイトから拝借しています。

https://qiita.com/p_shiki37/items/a0f6aac33bf60f5f65e4

“`Main.java
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
impor

元記事を表示

Javaを利用してWordテキストボックスでテキストの回転方向を設定する方法

##Javaを利用してWordテキストボックスでテキストの回転方向を設定する方法

##背景
Word文書にテキストボックスを追加し、テキストボックスを水平方向のテキスト配置または垂直方向のテキスト配置に設定するか、テキストボックスでテキストの回転方向までも設定できます。Javaプログラムコードにより、上記のテキストボックスの操作も実現できます。以下は、具体的な実装手順を示すJavaコード例です。

プログラムテスト環境は以下のとおりです。
Wordテストドキュメントバージョン:.docx 2019
Word Jarパッケージツール:**[free spire.doc.jar 3.9.0](https://www.e-iceblue.com/Download/doc-for-java-free.html)**
コードコンパイルツール:IDEA
JDKバージョン:1.8.0
ドキュメントの操作に必要なjarパッケージツールをインポートし、結果は以下の通りです:
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.

元記事を表示

Java変数のスコープ(有効範囲)について

この記事は、[シアトルコンサルティング株式会社 Advent Calendar 2021](https://qiita.com/advent-calendar/2021/seattleconsulting)の7日目の記事です。
こんにちは、シアトルコンサルティングの小泉です。
##はじめに
今回は変数のスコープ範囲についてまとめました。
プログラミングを学び始めた際に、変数の有効範囲がどこまでかわからずエラーが出ることがよくありました。
そんなプログラミング初学者に向けて作成いたしましたので、変数のスコープについて知りたい方はぜひ活用してみてください。

##ゴール
変数のスコープについて理解した上でコードを書けるようになる。

##Java変数のスコープ(有効範囲)とは
文字通り定義した変数の有効な範囲のことです。
(変数の宣言した場所によって、その変数を使用できる範囲が制限されます)

・ローカル変数
・インスタンス変数
・static変数

宣言する場所によって、呼び名も複数種類に分かれています。

## ローカル変数
{ } ブロック単位で有効範囲が変わり、ブロック

元記事を表示

起動時に初期化されてしまうクラスの振舞

#TL;DR
起動時に初期化が走ってその後の挙動が固定されてしまうクラスがマルチバンドル環境下でどんな問題を引き起こすのかを解説します。

#まえがき
前にもやりましたが、主にOSGiでシングルVMマルチバンドルの環境で起こるできごとについて書きます。SecurityManagerが(あっさりと)[なくなってしまう](https://openjdk.java.net/jeps/411 “JEP 411”)ことが決定した今になってなんやねん、という感じですが、そうは言ってもまだ生き残っているシステムもありますので、実感するもよし、他山の石とするもよし、でお願いします。

#起動時に初期化って
起動時に初期化、すなわちstatic initializerです。というのは嘘ですが、ほぼそんな感じです。主に、クラスローダーがクラスを読み込むと同時に初期化されてしまうようなクラスの話です。

#それって
まあいろいろと例はあるのですが、ここでは分かりやすい?例として[ImageIO](https://docs.oracle.com/javase/8/docs/api/javax/imageio/

元記事を表示

マインクラフトでトロッコの自動運行をする

#概要

CIBPluginは、Minecraftサーバ(SpigotMCサーバー)上でトロッコの自動運行を行うプラグインです。
本記事ではCIBPluginの開発背景と技術的概要を説明し、現在の問題点とその改善案について説明する。
添付資料として、プラグインによるトロッコ走行時のYouTube動画とGitHub上のコードを提示する。

#プラグインの開発背景

スタッフをしていたMinecraftサーバー内でトロッコ鉄道網を整備した人がいたが、ほとんどのプレイヤーがアイテムのトロッコを持ち歩くのが面倒で利用頻度が低かった。
トロッコの配布を駅で行うなどしてみたが補充の手間がかかり、また線路上にエンティティ化したトロッコが放置されるなどの問題が発生した。
またMinecraftのトロッコ鉄道にはつきものだが、加速用レールの効率的な配置を考えるのも手数がかかっていた。

#主な解決方法

トロッコの生成:
自動で線路上に配置する駅設備を用意する。
トロッコの自動運行:
線路上に配置されたトロッコが自動的に発車する

元記事を表示

STSでStarterProjectを作成しようとしたら「unsupported class file major version 61」でこけた

###「unsupported class file major version 61」ってなに?
Java17非対応だよ!と怒られている。
classファイルのversion61は、Java17を示す。

### 対策方法
(プロジェクトのビルドツールがGradleなら)Gradleのバージョンを上げる必要がある。
STSの preference >> Gradle を開くと、初期状態では「Gradle Wrapper」にチェックが付いているはず。

Gradle Wrapper is 何? を知りたければぐぐると色々出て来るので読みましょう。
とりあえず今すぐ動かしたいなら、「Specific Gradle version」にチェックを入れて、GradleのバージョンをJava17サポート済みのものに変更すればOK。

元記事を表示

楕円曲線暗号の鍵をJavaで読み込む

OpenSSLで生成した楕円曲線暗号の鍵をJavaで読み込む方法。RSAはあるけど楕円曲線が無かったので。

# 手順

## OpenSSLで鍵生成

“`bat
$ openssl ecparam -genkey -name secp256r1 -out keypair.pem
$ openssl ec -in keypair.pem -outform PEM -pubout -out public.pem
$ openssl ec -in keypair.pem -outform PEM -out private2.pem
$ openssl pkcs8 -topk8 -nocrypt -in private2.pem -out private.pem
“`

できたもの

– `public.pem`:公開鍵
– `private.pem`:秘密鍵(PKCS#8形式)

いらないもの

– `keypair.pem`
– `private2.pem`

ポイント1:`-name` で指定する楕円曲線の一覧は `openssl ecparam -list_curves` で出

元記事を表示

Javaを使った関数型プログラミング

[Javaのカレンダー | Advent Calendar 2021](https://qiita.com/advent-calendar/2021/java)の6日目の記事です

# 概要

手続き型のこれを

“`java
@GetMapping(“/items”)
public List get(@RequestParam(name = “name”, defaultValue = “”) String name) {
// 入力チェック
if (name.length() <= 10) { throw new IllegalArgumentException("name"); } // 商品をDBから検索 List itemDataList = repository.findByNameLike(“%” + name + “%”);
List result = new ArrayList

元記事を表示

Javaアクセス制御について

この記事は、[シアトルコンサルティング株式会社 Advent Calendar 2021](https://qiita.com/advent-calendar/2021/seattleconsulting)の5日目の記事です。
こんにちは、シアトルコンサルティングの小泉です。
##はじめに
今回はプログラミングを学び始めた際に苦戦したアクセス制御についてまとめました。
プログラミング初学者の方に向け作成いたしましたので、アクセス制御について知りたい方はぜひ活用してみてください。

##ゴール
アクセス修飾子の役割と使用場面を理解できるようになる。

## フィールドとメソッドに対するアクセス制御
Javaでは、それぞれのフィールド及びメソッドに対してアクセス制御を行うことができます。
以下の4段階からアクセス制御のレベルを選ぶような仕組みになっています。

| 制限のレベル | 名称  | 指定方法 |アクセスを許可する範囲|
|:—:|:—|:—|:—|
| 制限が厳しい |private|private|自分自身のクラスのみ|
|

元記事を表示

Helidon 2.4.0 で導入された OpenID Connect のログアウト機能(RP-Initiated Logout)について

# はじめに

こちらの記事は、[Oracle Cloud Infrastructure Advent Calendar 2021](https://qiita.com/advent-calendar/2021/oci) Day 6 の記事として書かれています。
11 月の上旬ごろ、Helidon のバージョン 2.4.0 がリリースされました。今回の記事はアップデートされた内容の中から(個人的に待望していた) OpenID Connect 1.0 のログアウト機能(RP-Initiated Logout)について解説したいと思います。

# Helidon が提供していた OIDC の機能

一般的な OpenID Connect 1.0 の認可コードフローは以下のようになっています。ここで、下図の赤線・文字で表現されている箇所が Helidon の Security Provider(OIDCProvider) が提供している箇所となります。

![image01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.

元記事を表示

String Boot環境構築

1.eclipseをインストール(Windows版のインストールをキャプチャしています)
  1-1.https://mergedoc.osdn.jp/ にアクセス
  1-2.Eclipse 2021をクリック(赤枠で囲っている箇所)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2353455/e942feed-8715-a7e2-217e-8759729daa35.png)
  1-3.Windows64bit版 Full EditionのJavaをクリック(赤枠で囲っている箇所)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2353455/128b50cb-5779-4011-c301-a475a6d2e732.png)
 1-4.Eclipseダウンロード(ダウンロードが開始されない場合、赤枠のリンクをクリック)
![image.png](https://qiita-image

元記事を表示

【Android Studio】Gradleでの Jackson の追加方法(Java)

Android Studioを使用した`Jackson`の使用方法について調べたのですが、実装までに四苦八苦したので、メモを残しておきます。

#リポジトリ
`Jackson`が公開されているページです。
ページ内の取得したいバージョンの「Gradle」の部分をコピーします。
jackson-core
https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core
jackson-databind
https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind
jackson-annotations
https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations

####使用するバージョンの選択
a010b5d5-04f0-c700-22a2-08b424747a4</p></blockquote>
</blockquote>
<aside class='widget widget-post'>
<div class='tag-cloud-link'>Java</div>
<div class='tag-cloud-link'>Android</div>
<div class='tag-cloud-link'>Jackson</div>
<div class='tag-cloud-link'>AndroidStudio</div>
<div class='tag-cloud-link'>android開発</div>
</aside>
<div><a style='width:100%;' class='btn__link' href='https://qiita.com/NagaJun/items/9099e721aeeb7e31e322'>元記事を表示</a></div>
<h3 id=Retrofit+OkHttpでファイルダウンロードするAPIを呼び出す

この記事は[ラクスアドベントカレンダー](https://qiita.com/advent-calendar/2021/rakus)の5日目の記事です。

なぜ3日連続書くなんて宣言してしまったのか激しく後悔していますが、今日も書いていきたいと思います。

### はじめに

今日はRetrofit+OkHttpでファイルダウンロードするAPI呼び出しについて書いていきたいと思います。
検索すると古いバージョンの話やAndroidに特化した内容の記事が多くヒットしたのですが、今回紹介するのはWebサイトで同期的にAPIを呼び出す前提のやり方です。

### バージョン

– retrofit:2.9.0
– okhttp:3.14.9

### 実装方法

#### Retrofitのインスタンス生成

レスポンスをバイト列で受け取りたいので今回はコンバーターを設定しません。

“`java
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(“http://localhost:8080”)

元記事を表示

【Themeleaf初心者向け】formにおけるth:fieldの挙動まとめ

##はじめに

Spring+Thymeleafで開発を行っていて、
formの作成の際、
``
のように、複数Thymeleafタグを使っています。
これって全部書く意味があるのか?必要ないものはないのか?
と思ったので、自分で検証してみた結果を以下にまとめます。
## 概要
inputのtypeによって、th:fieldの挙動が違うので、記載すべきものが違います。

– text,number,range
th:fieldは、「id」「name」「value」の役割を果たします。
th:fieldとth:valueが重複している時、th:objectで指定したformの値がある場合は、th:fieldが優先されます。

– textarea
th:fieldは、「id」「name」「text」の役割を果たします。
th:fieldとth:textが重複している時、th:objectで指定したformの値がある場合は、th:fieldが優先されます。
– radio,c

元記事を表示

Retrofit+OkHttpでmultipart/form-dataなAPIの呼び出してハマった

この記事は[ラクスアドベントカレンダー](https://qiita.com/advent-calendar/2021/rakus)の4日目の記事です。

空いているので昨日に引き続き書いていきたいと思います。

### はじめに

multipart/form-dataなAPIを呼び出す実装が一番面倒だと思っているのですが、自前でゴリゴリと実装している人が意外と多い印象です。
Retrofit+OkHttpを使ったらどれぐらい簡単なのか試してみたのですがハマり所もあったので記事していきます。

### ハマりどころ

`@retrofit2.http.Multipart` `@retrofit2.http.Part` `@retrofit2.http.Body` `okhttp3.MultipartBody` `okhttp3.MultipartBody.Part` `okhttp3.RequestBody` あたりを組み合わせて実装するのですが、まずい組み合わせでハマったり、必要なリクエストヘッダーが指定できそうで出来なかったりと使い方が分かるまで結構大変でした。

https:/

元記事を表示

FizzBuzzは無慈悲な面接の女王

この記事は[FOLIOアドベントカレンダー2021](https://adventar.org/calendars/6253)の5日目です[^0]

# 創世記

最初にnandがあった。nandは神であった。

“`clojure
(defn nand [x y] 神)

(deftest nand-test
(testing “nand”
(is (true? (nand false false)))
(is (true? (nand false true)))
(is (true? (nand true false)))
(is (false? (nand true true)))))
“`

ジム・ケラーが「光あれ」と言った。するとnotがあった。

“`clojure
(defn not [x]
(nand x x))
“`

2日目、光は世界をandとorに分けた。

“`clojure
(defn and [x y]
(not (nand x y)))

(defn or [x y]
(nand (not x)

元記事を表示

jersey-clientでリクエスト/レスポンスのログを出す

# やりたいこと

リクエスト/レスポンスのbodyをログに出したい。

# 依存関係

“`xml


org.glassfish.jersey.core
jersey-client
2.35


org.glassfish.jersey.media
jersey-media-json-jackson
2.35


元記事を表示

JavaでABC230(B問題まで)

ABC230に参加しました。解答できた問題に関して投稿していきます。

使用言語はJavaです。

#A問題
https://atcoder.jp/contests/abc230/tasks/abc230_a

####方針
1. 入力される値(Nとする)によって処理を分岐させる。具体的には42 ≦ Nであれば、”AGC0″ + (N + 1)と出力する。N < 10であれば、"AGC00" + Nと、それ以外の場合は"AGC0" + Nと出力する。 ####コード **標準入力と出力のコードは省略しています。(以下略)** ```Main.java import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.util.Arrays; import java.util.Comparator; import java.util.NoSuchElementException; public class Main { public static voi

元記事を表示

Spring BootでJSONを整形してログ出力する

# はじめに
Spring Bootを用いたREST APIの動作確認でリクエスト・レスポンスのJSONを整形した状態でログ出力したくなった。
logback.xmlの設定でログ全体をJSONとして整形・出力する方法はすぐに見つかったが、パラメータのJSONのみ整形する方法になかなか辿り着けなかったためメモ。
# サンプルプロジェクト
– [spring initializer](https://start.spring.io/#!type=maven-project&language=java&platformVersion=2.6.1&packaging=jar&jvmVersion=11&groupId=com.example&artifactId=demo&name=demo&description=Demo%20project%20for%20Spring%20Boot&packageName=com.example.demo&dependencies=web,lombok)で作成。
– Spring Boot : 2.6.1
– spring-boot-star

元記事を表示

JJUG CCC 2021 Fallに参加しました

# はじめに
本記事はMDC Advent Calendar 2021の4日目の記事です。
少し前になりますが、11/21(日)に開催されたJJUG CCC 2021 Fallについて参加しましたのでそれについて感想を書いていきたいと思います。

# このイベントは何?
JJUGというコミュニティの半年に一度のカンファレンスです。JJUGとは日本Javaユーザーグループのことです。JavaのユーザーグループはJUGとして世界中にコミュニティがあります。JUGの中の日本最大のコミュニティがJJUGです。

https://www.java-users.jp/

ちなみに日本でもう一つ公認のJUGとして、関ジャバ(関西Javaエンジニアの会)があります。

https://kanjava.connpass.com/

さらにちなみに、ですが、JUGではないもののJava関連のコミュニティとして大きく活動が活発なものとして、日本Springユーザー会(JSUG)があります。ちょうど先日SpringFestというJSUG年度最大のイベントが開催されており、盛り上がってましたね。

https:

元記事を表示

OTHERカテゴリの最新記事