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

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

【Java】4乗的ガウスを解く

 僕はこれまで「Ruby on Rails」をメインに勉強してきましたが、現在は「Java」も勉強しています。
 ということで僕が過去に「Ruby」で解いた問題を「Java」で解くとどうなるかを試してみました。

https://qiita.com/kim-shun/items/a46cc43c31959ff765ea

 1⁴ + 2⁴ + 3⁴ + …….. + 40⁴

 上記の計算の結果をプログラムで出していきます。

“`java
package example;

public class JavaGouse {

public static void main(String[] args) {
int count = 1;
int sum = 0;

while (count <= 40) { sum += Math.pow(count, 4); count += 1; } System.out.println(sum); } } ```  これで求めたい値である「21781332」を出すことができました。ただしまだ「

元記事を表示

リスト型のcontains​がどの程度遅いのか今度こそはっきりさせる

公開・非公開問わずソースコードを見ているとjava.util.List系のコレクションに対してcontainsメソッドを呼び出しているのを見かけます。

個人的にはcontains使うならjava.util.Set系のコレクションだろというのが染みついているので違和感があるのですが、仮にList系でも件数が少なければそれほど速度を気にすることもないというのは理解できます。

というわけで要素数の違いによってList系とSet系のcontainsでどの程度速度差が出るのか[JMH](https://github.com/openjdk/jmh)を使って検証しました。

:::note warn
以下のベンチマークはあくまで特定のPC上で行ったもので、誰がやっても同じ結果が出るとは限りません。
ListとSetでの速度差が明確に出てくる要素数も環境によって変わる可能性があるので、あくまで参考程度に捉えてください。
:::

# ベンチマーク環境

* OS
* Windows10Pro
* CPU
* Core i7-10700 (8core 16thread)
* Mem

元記事を表示

「とりあえず今日から一週間でSpringで何か作るプロジェクト」の準備

今日から一週間で、Java初心者がSpringで何か作ります。

# 目次
1. きっかけ
1. プロジェクト開始時点の私のスキル
1. 目的
1. やること

# きっかけ
SES企業の面接を受けたら、フレームワークを使えることが大切とのアドバイスを頂いたので、期間を決めて基礎を固めようと思った。

# このプロジェクト開始時点の私のスキル
– Javaの基礎は理解。
– スクラッチでGUIを使ったアプリは作成できる。
– リファクタリングは、つまみ食い程度。
– テストも体系的には行えていない。
– 2か月後に、Java SE11の資格(1z0-819)を受験予定なので、範囲内のことに関しては知っている(が、使いこなせるのとは別のことというのも承知している)。
– Javaの開発は、英語でしかやったことがないので、日本語の用語がいまいち分かっていない。考えれば分かるが瞬時には単語が出てこないので、日本語の用語を頭に浸透させるため、Qiitaで記事を書く。
– ちなみにこの世には、SpringとSpring bootというものがあるということを、この記事を書いて初めて知った(それくら

元記事を表示

nextLine()ではまったワナ

# nextLine()すると勝手に空文字入力される

###こたえ
https://teratail.com/questions/106725

どうやら、`sc.nextInt()` のときの改行が残っているらしく、`sc.nextLine()`が実行されたタイミングで、その改行がユーザーの入力よりも先に入力→Enter実行されてしまうみたい。

`sc.next()`を使うとその症状は起こらない。

元記事を表示

Moodleからスクレイピングする

# はじめに
オープンソースのeラーニングプラットフォームである「Moodle」だが、自分で情報を取得し、解析したいと思った。MoodleにはAPIが用意されているため、システム管理者に連絡すれば使えるようになるのかもしれないが、面倒なので自前でスクレイピングできるようにした。
完全なる自分用メモのための記事。

# ソースコード

“` login.java
//import文は省略
class login{
public static void main(String[] args){
String UA=”hogehogeBOT 1.0/” //ユーザーエージェント
String id=”aiueo1234″ //ユーザーid
String password=”123456789″ //パスワード
try{
Connection.Response response=Jsoup.connect(“https://moodle.org/login/index.php”)
.userAgent(UA)
.method(Connection.Me

元記事を表示

Gradleコマンドで実行したテストをIntellij IDEAでブレークポイント付けてデバッグする

## ナニコレ?
通常はIntellij経由でテストを実行すればブレークポイントを張った場所で止めることができるが、
ターミナルのgradleコマンド経由で実行したテストでも同じことがしたいときのやり方。

## 手順

### 1. デバッガの設定をする

`Run` > `Edit Configurations…` を開き、左上の「+」ボタンから「Remote JVM Debug」を選ぶ。
特に設定はいじらずデフォルトのまま「OK」で保存。(port=`5005`)

![Screen Shot 2021-08-05 at 11.36.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109747/0241e2bb-59d7-60ec-57e5-e04780c39068.png)

### 2. Gradleコマンドで対象のテストを実行

“`
./gradlew test –tests “HogeTest*” –debug-jvm
“`

– `–tests` …実行対象のテ

元記事を表示

While(flag) 無限ループを使う時の注意

### はじめに
これは、私が無限ループを使うときに失敗して今後、注意しようと思うことである。
初心者の方で同じ落とし穴に落ちた人の役に立てば何よりである。
そして、これは自分の備忘録でもある。

### はじめに
ここで問題になるのは、arraySort()メソッドにおけるwhileの無限ループである。
Whileの無限ループは仕事が終わったらflag=false;にしてループを止めるのであるが、このflag=false;の位置について論じたい。

これを私ははじめ、18行目に入れていた。
そしたら、結果は
{31,29,45,77,84,96}となり並び替えが完了していない。
そこで、並び替えの様子を書き出してみた。
![スクリーンショット 2021-08-05 8.51.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1762776/375f20bd-0ac3-bd7e-147a-817bdfecf433.png)

これをみると、ループは調度2回、回ったところで止まっている。
2巡目の最後は

元記事を表示

電話番号チェックに NumberUtils#isNumber() を使ってはいけない

> Non-hexadecimal strings beginning with a leading zero are treated as octal values. Thus the string 09 will return false, since 9 is not a valid octal value. However, numbers beginning with 0. are treated as decimal.
> https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/math/NumberUtils.html

頭にゼロが付いていて16進数でない文字列は8進数として扱われます。
よって9は有効な8進数ではないため、文字列 “09” はfalseを返します。
ただし、(頭ゼロの次が)0で始まる文字列の場合は10進数として扱います。

つまり、電話番号の数値チェックで `NumberUtils#isNumber()` を使うと “090” や “080” が数値で

元記事を表示

CodeSignal – rotateImageにチャレンジ

コーディングしなさすぎてコーディングを忘れたエンジニアがコーディングを思い出すためにコーティングします。
今回は、アメリカのコーデイング練習サイトCodeSignalの問題「rotateImage」を解いていきます。
サイトによると、この問題はAmazon、Microsoft、Appleの面接で出されたことがあるようです。

##問題
画像を表したn×nの2Dの行列が配列として与えられるので、それを時計回りに90度回転して出力する関数を書きます。
たとえば以下であれば、

“`Java
a = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
“`

出力はこうなります。

“`Java
rotateImage(a) =
[[7, 4, 1],
[8, 5, 2],
[9, 6, 3]]
“`

制約:
1 ≤ a.length ≤ 100
⇨配列の長さは1以上100以下
a[i].length = a.length
⇨画像の縦横の要素数は同じ
1 ≤ a[i][j] ≤ 10^4
⇨配列の中の値は1以上1000

元記事を表示

Java超基本文法

##はじめに
就職活動を行なっている中で、企業様からJavaの基礎を使って解く問題が課題で出されまして、触ったことはありませんが、Javaの基礎学習を始めます。

よろしくお願いします。

##文字の出力
System.out.print()で、()の中身を出力できます。
文字列を出力させる場合はダブルクオーテーションが必要です。

ちなみに「println」ですが、「l」はエルです。
私は「i」だと思いました。
ちなみにセミコロンは必須で文末に必要です。

“`java
System.out.println(“Hello World”);
// => Hello World
“`

文字列同士の足し算(結合)ができます。計算するときと同じように「+」を使って結合します。

“`java
System.out.println(“Hello” + “新しい私”);
System.out.println(“3” + “5”);

// => Hello新しい私
// => 35
“`

##数値の出力
数値の場合は、ダブルクオーテーションが必要ありません。
()内で「+」や「-

元記事を表示

Javaで文字列が数値かどうかを判定する

なんでこんな初歩的なことを書くかというと、7月18日(日)に行われたJava™プログラミング能力認定試験 1級(サーティファイ)で出題されたのです。

ド忘れしちゃって苦し紛れに書いたのがこれ。

“`java:
boolean isNum = true; // 数値だよ
try {
Integer.parseInt(str);
} catch (NumberFormatException e) {
isNum = false; // 数値じゃないよ
}
“`

満点だったので合ってはいたようです。
ただ、これだと[全角数字もチェックOKになってしまう点](https://qiita.com/cress_cc/items/a72c25b39f5baaaac4d6)は要注意です。
知識や技能というよりは「妥協する力」を問われる試験だった。

実務では正規表現を使うのが正解なんだろうなあ。。

元記事を表示

Java PDFファイルのプロパティを設定

今日から、Javaについての話にします。PDF のプロパティは、文書のタイトル、使用しているフォント、セキュリティ設定などのファイル情報を含んでいます。従って、今回はSpire.Doc for Javaというライブラリを使ってPDFファイルのプロパティ、及びカスタムプロパティを設定する方法を紹介させていただきます。

下準備

1.E-iceblueの公式サイトからSpire.PDF for Javaをダウンロードしてください。

f:id:lendoris:20210804142827p:p</p></blockquote>
</blockquote>
<aside class='widget widget-post'>
<div class='tag-cloud-link'>Java</div>
<div class='tag-cloud-link'>PDF</div>
<div class='tag-cloud-link'>設定</div>
<div class='tag-cloud-link'>プロパティ</div>
</aside>
<div><a style='width:100%;' class='btn__link' href='https://qiita.com/iceblue/items/cedce3a33af3a4310bd9'>元記事を表示</a></div>
<h3 id=SQL Server JDBCでTLSエラーが出る時の対処法

SQL Serverのサーバー側がTLS1を使用していると、セキュリティの制限でエラーとなることがある。

環境
Debian 10
OpenJDK 8 JRE Headless
Python 3.9
SQL Server JDBC 9.2.1.0 Jpn

# エラー
“`
com.microsoft.sqlserver.jdbc.SQLServerException: com.microsoft.sqlserver.jdbc.SQLServerException: ドライバーが SSL (Secure Sockets Layer) 暗号化による SQL Server への安全な接続を確立できませんでした。エラー: “The server selected protocol version TLS10 is not accepted by client preferences [TLS12]”。
“`

# Javaの場所を探す
“`
$ /usr/sbin/update-java-alternatives -l
java-1.8.0-openjdk-amd64 1061 /u

jarファイルをjdbcドライバも含めて作成する

## 概要
jdbcドライバも含めたjarファイルを作成する方法。
ここでは、Sample.javaというファイルと、sample-jdbc-1.0.0.jarとsample002-jdbc-1.0.0.jarというjdbcドライバを使う例を書く。

## Classファイル生成
まずはclassファイルを作成する。
ドライバは`:`でつなぐ。windowsの場合は`;`でつなぐらしい。(未確認)

“`
$ javac -classpath “./sample-jdbc-1.0.0.jar:./sample002-jdbc-1.0.0.jar” Sample.java
“`

実行

“`
$ java -cp “.:./sample-jdbc-1.0.0.jar:./sample002-jdbc-1.0.0.jar” Sample
“`

## jarファイル作成
以下コマンドでjarファイルを作成する。

“`
$ jar cvf Sample.jar *.class
“`

jarの中身を見てみるとこんな感じ。このまま実行するとエラーになるので、MANIFEST.M

Java入門[Javaとは〜型と変数、定数]

Javaの基本的な学習を終えたので、思考整理のための投稿になります
もしも間違っている部分などがあれば、ご指摘などを頂けると幸いです。

## Javaとは

1995年に登場したプログラミング言語であり、世界的に有名。

RedMonkが2021年3月に公開した言語ランキングでは以下のような順位

1.JavaScript
2.Python
3.Java
4.PHP
5.C#

The RedMonk Programming Language Rankings: January 2021

## Javaで開発されたもの

https://evernote.com/intl/jp

https://www.minecraft.net/ja-jp/store/minecraft-java-edition

## Javaの開発

`コード作成 → コンパイル → 実行`になる。

#### コンパイルとは

プログラム言語をコンピュータが理解できる言語に変換すること。
JavaはWindowsでもMacでも環境に左右されずに動作する。

**WindowsOSにだけわ

【VBscript、Java】Tumblrのエクスポートファイルからホームページを生成する。

こんばんは。

写真共有サービスのTumblrをご存じですか?写真に特化したSNSで、世界中の写真好きの投稿を見る事ができます。ユーザー数はtwitterやfacebookには及びませんが、SNSのデメリットの誹謗中傷なども(自分が知る限りは)殆ど目に触れる事はなく、とっても快適なサービスです。自分は2014年頃から愛用しており、ほぼ毎週投稿しているので、300件くらいの投稿があります。

今回は、Tumblrに投稿した記事を、ホームページ風にアレンジするプログラムを作りましたのでご紹介します。

事情により、VbscriptとJavaの合わせ技という事もあり、またTumblrのアーカイブも(Tumblr社には申し訳ないですが)非常に使い辛く苦慮しました。
空き時間にちょこちょこプログラムを作り、テストでもバグが大量に出まして、結果6か月かかりました(途中でモチベーションが下がりサボった期間含む・・)。

全体像はこんな感じです。

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

Javaにおけるアノテーションの復習メモ

## アノテーションとは
– ソースコードの注釈
– コンパイラやJVMに付加情報を伝える
– 目印のようなもの

## 主なアノテーション
– @Override→スーパークラスのメソッドをオーバーライド

– @FunctionalInterface→関数型インターフェイス

→単一の抽象メソッドを持つインターフェイス(1つだけ持てる)
→staticメソッド、デフォルトメソッドは複数可
→Objectクラスのpublicメソッドである抽象メソッドは含まない(複数定義可)

“`java
package cp2.no3;

@FunctionalInterface
public interface FunctionalInter {

// 単一の抽象メソッド(抽象メソッドは1つしか定義できない。2個以上は不可)
void foo(T t);

// Objectクラスのpublicメソッド
String toString();

// Objectクラスのpublicメソッド
boolean equals(Object object);

// static

[JAVA][SpringBoot]HttpClientが通信の際に利用しているTLSのバージョンを確認する

## やりたいこと
* SpringBoot(2.3.3.RELEASE)で作成されたWebアプリが、ある外部APIに接続する際に、HttpClientがセキュリティ通信方式としてTLSのバージョンのいくつを利用しているのかを調べる

## 解決できた方法
* 出力するログレベルをDEBUGにした上で実際に通信させたところ、SSLConnectionSocketFactory がログに情報を出力した

## 解説
### HttpClientのバージョン
* 4.5.3
* build.gradle に記述があった
`implementation ‘org.apache.httpcomponents:httpclient:4.5.3’`
* gradleでの記述を検索する際、「HttpClient」「httpClient」みたいに大文字を入れて検索してる間は見つからなかったので全部小文字で検索すべきだった

### 直面した困難
* 検索したところ、HttpClientが利用するTLSのバージョンの設定方法はヒットするが現在実際にどれを使っているのかの調べ方はヒットしなかった

Thymeleaf

#基本は変数式とOGNL
Thymeleafの基本は、「値を出力する(表示する)」ということです。これは、${{○○}}という形で記述されます。この${0}という書き方は「変数式」と呼ばれます。変数式の中に記述されるのは、「OGNL」(Object-Graph Navigation Language)式という、Javaの値にアクセスするための式言語です。Thymeleafに限らず、各種のライブラリやフレームワークなどで使われています。

OGNLは、Javaの簡易版のような書き方をするので、Javaプログラマであればそれほど難しくはありません。基本的に「Javaで式を書けば、シンプルなものならたいていはOGNLの式になる」と考えてしまっていいでしょう。既に基本的なOGNLは使っていますが、もう少し違ったサンプルを挙げてみましょう。

“`
タグの部分をこのように書き換えてみてください。
リスト4-1

Helo page

JavaGold学習メモ(第一章)

## 主旨
– JavaGold資格取得に向けて学習したことの内容メモ(黒本をまずは読んでみる)
– 記憶の怪しい項目や知らなかったことをまとめる
– あとで見返せる程度で備忘録を残す(多分意味が自分しか理解できない記載も多い)
– 完全なメモなので誤字などもあるかもしれないが細かいことはひとまず気にしないでおく

## Javaのクラス設計について
■カプセル化
・外部に公開するアクセス手段のメソッド→アクセサメソッド o r アクセサ
・finalやstaticを実装することとカプセル化は無関係
・トップレベルクラス→ネストされたクラスでない通常のクラス→ファイル名がFoo.javaでクラスがFooの場合、トップレベルクラス
・一つのソースにおいて、宣言できるpublicなトップレベルクラスは一つだけ

■継承
・is-a関係(AはBである) or kind -of-a関係(AはBの一種である)
・has-a関係(AはBを持っている)は、集約の関係。構成集約とも呼ばれる。
・集約は関係するオブジェクトのライフライクルが同じではない→親クラスと学生クラス。親クラスを削除しても子クラス