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

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

Javaで学ぶアルゴリズム 第3弾:順位付け

# #Javaで学ぶアルゴリズム < 順位付け >

##はじめに
Javaは授業で触れただけで全くの初心者であり,何もわかっていない.なので,基本的なアルゴリズムをJavaで実装し,アルゴリズムの理解を深めるとともに,Javaにも慣れていきたい.
その第3弾として順位付けを扱う.

##順位付け
順位付けには様々な方法がある.また,数値であれば,高い順なのか低い順なのかという話も出てくる.ここでは3つの例を取り上げて,順位付けについての理解を深める.

##実装
例の説明を行った後に,Javaで実装したソースコードとそのときの出力を示し,考察を記述する.

####例①:非常に単純な順位付け
おそらく誰もがはじめに浮かぶような方法である.その説明を以下に図として示す.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951300/75cb59c4-d43d-2539-9e51-c6e1318371bc.png)
いま,61点の人の順位を求めている.順位は1~ということであるから,自分より

元記事を表示

Java double型の誤差とBigDecimal

# floatとdoubleは誤差が発生する可能性がある
以下のプログラムを実行してみる。

“`
double result = 0;
double d = 0.1;
// 0.1を10回足し算
for (int i = 1; i <= 10; i++) { result += d; } System.out.println(result); ``` ```lang:実行結果 0.9999999999999999 ``` 期待値:0.1 実行結果:0.9999999999999999 # 誤差が発生する理由 コンピュータの内部では、2進数で数値を保持している。 例えば、 10進数の「0.5」は2進数で「0.1」 10進数の「0.1」は2進数で「0.000110011001100…」⇒無限小数となり終わらない。 よって、10進数の「0.5」は誤差なくdouble型で表現できるが、10進数の「0.1」はコンピュータのビットが有限のため正確に表現できない。 # 誤差の解決方法 BigDecimalを使用する。 ``` BigDecimal result = new BigDe

元記事を表示

【精神崩壊】だからこのコードはクソなのだ!【主に俺の】

# INDEX
– 背景
– だからこのコードはクソなのだ!
– あとがき

# 背景

![Et60_3jVIAEAMQv.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92447/28ac62e2-6623-4cca-524c-85a13e2fa7ed.jpeg)

かなり攻撃的なタイトルを付けたが、要はクソコードと言われるものを引き継いだり、
生産者からアドバイスを求められたりレビューをせざるを得ない状況に追い込まれ徐々に精神崩壊を起こしそうになった気がするので脳内妄想を吐き出してみることにした。つまりフィクションだ。いいね?

クソコードにも色々誕生秘話があって確かに大多数がクソ認定するコードもあるとは思うが、**レビュアの理解が追い付かない事でクソコード認定されてしまう**事もある。

はたまた、かつては輝いていたけど幾多の苦難[^1]に飲まれ、多くの兵どもの夢の跡[^2]を見守った結果、技術的観点からグリーフシード[^3]のようにクソコードとなってしまった悲しい経緯があるかもしれん。
変に*

元記事を表示

JavaでSQLのConnectionを書くときにはまったこと

# 起きたこと
Java7から採用されたtry-with-resources文を使用してSQLのストアド呼び出しをしようとしたときにエラーが発生した。

## 環境

### OS

Windows 10

### JavaVersion
jdk-15.0.2

### JDBC
sqljdbc_9.2

### SQL Server
2019

## エラーになったコード

“`java:sqlcall.java
public Connection calltest() {
String connectionUrl = “jdbc:sqlserver://localhost:1433;”
+”databaseName=TESTDB;”
+”user=TestUser;”
+”password=*******;”

try (Connection connection= DriverManager.getConnection(connectionUrl)){
return connection;
}catch (SQLException e)

元記事を表示

JMeter +JSR223 Sampler(Java)でCognito認証を通してみた

#記事について
JMeter + JSR223 Sampler(Java)でCognito認証を通す処理を行った際の備忘録的なもの

JMeterでAWS SDK for Javaを呼び出して処理をすると行った記事がなかなかなかったので、今後の自分や同じような箇所で躓いた人のために書き残しておこうと思い記事にした。

# 必要になった経緯
JMeterでAPIのパフォーマンステストを実施してするためにログイン + その後のAPI実行の処理のシナリオを設定していた。
ログインの認証処理の箇所にCognitoが使用されており、APIを実行するためにCognitoの認証を行いIDトークンを取得する必要があった。
テスト当初はaws-cliで認証処理を実装していたシェルスクリプトを`OS Process Sampler`で呼び出していたが、ちょっと強い負荷を与えるために1,000スレッドに増やして実行したところ、IDトークンの取得処理に30秒以上かかったり本体のメモリが不足したり(一応16GB積んでいるマシン)でテストにならなかった。マシンがメモリ不足となりフリーズしてしまい、電源を強制終了し

元記事を表示

JAVAの繰り返し処理についてまとめてみた

#JAVAの繰り返し処理について調べてみた
今回はjavaの繰り返し処理について思いつく方法をまとめてみようと思います。

“`
1~10の数字の合計値
“`

##1.for文

“`for
int sum = 0;
for (int i=0; i <=10;i++){ sum += i; } ``` 一番、単純な繰り返し処理かと思われます。 int i=0でintの変数を定義して、10を超えるまでiを1ずつ増やしていく処理になってます。 ##2.while文 ```while int sum =0; int num = 1; while(num<=10){ sum +=num; num++; } ``` 条件付きでここまできたら止める繰り返し処理の時に使う書き方です。 今回みたいな範囲が決まって1ずつ足すのではfor文の方が使われるかと思います。 ##3.do...while文 ```do...while int sum =0; int num=1; do{ sum+=num; num++; }while(num<11) ``` whileとの違いは、条

元記事を表示

Javaで不動点コンビネータを活用してメモ化とトレース機能を実現する

# はじめに

不動点コンビネータは[Wikipedia](https://ja.wikipedia.org/wiki/%E4%B8%8D%E5%8B%95%E7%82%B9%E3%82%B3%E3%83%B3%E3%83%93%E3%83%8D%E3%83%BC%E3%82%BF#Z%E3%82%B3%E3%83%B3%E3%83%93%E3%83%8D%E3%83%BC%E3%82%BF)では以下のように説明されています。

> **不動点コンビネータ**(ふどうてんコンビネータ、英: fixed point combinator、**不動点結合子**、ふどうてんけつごうし)とは、与えられた関数の不動点(のひとつ)を求める高階関数である。**不動点演算子**(ふどうてんえんざんし、英: fixed-point operator)、**パラドキシカル結合子**(英: paradoxical combinator)などとも呼ばれる。ここで関数fの不動点とは、f(x) = xを満たすようなxのことをいう。

この記事ではJavaでこれをどのように実現するかを示し、それを活用して関数のメモ

元記事を表示

“JAVA_HOME is not defined correctly” 解決方法 (MacOSX + adoptopenjdk)

## 環境

2021年2月11日

Mac OS Big Sur ver11.1
adoptopenjdk ver11.0.9.1
https://adoptopenjdk.net/index.html
mavenは未インストール
そのためmaven wrapperコマンドでビルド(./mvnw)

##状況

mavenでビルドするときにエラー

エラー内容はこちら

“`
JAVA_HOME is not defined correctly.
We cannot execute /Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/bin/java
“`
内容は
「**JAVAの環境変数が正しく定義されていません。**」

その時の$JAVA_HOMEの中身は

“`
echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk
“`

要はこのパスが間違っているということ。
このパスの定義の仕方が、JREやJDKの種類によって多少異なる

元記事を表示

JAVAのデメリット3選

#JAVAのデメリット3選
この記事ではプログラミング言語「JAVA」のデメリットについて3つお伝えしたいと思います。

##1つ目のデメリット オブジェクト指向を使いこなすのが大変
オブジェクト指向は「独立性」「再利用性」「拡張性」などを実現するために様々なコードの書き方があるのですが、
理解するまでに中々時間がかかってしまいます。。
私も初めはpythonを勉強して、その後javaを勉強し始めたのですが、「なんだこのめんどくさい言語」と思ってしまいました。
慣れたら便利なことに気づいていけるのですが、初心者の方にはハードだと思います。
私もまだ使いこなしてる自身はありません!!

##2つ目のデメリット 小規模な開発には向いていない
オブジェクト指向を実現するためにコードが長くなりがちで、小規模な開発でも時間がかかってしまいます。
慣れの問題かと思われるかもしれませんが、インタプリタ言語の方が小規模であれば慣れると早く作成できるかと思います。
使い分けが大事ってことですね。

##3つ目のデメリット 流行りの企業には入れない
これは個人的なイメージでなんですが、最近はスタートアップ

元記事を表示

ドメイン駆動設計の再構成-エリックエヴァンスの4層アーキテクチャモデルの拡張-Ver1

今回の記事では、以下の記事に掲載されている**ドメイン駆動設計**の概念を再考し、エリックエヴァンスの4層アーキテクチャモデルの拡張を目的としています。

**記事タイトル:ドメイン駆動設計における5層アーキテクチャの全体図とソースの実装例**
記事URL:https://qiita.com/aLtrh3IpQEnXKN7/items/33b0a748dec34a301b37

**記事タイトル:ブルジョワが考えたドメイン駆動設計をソ連が考案した作戦術で☆粉砕☆**
記事URL:https://qiita.com/aLtrh3IpQEnXKN7/items/efeb48953794187148c3

**記事タイトル:DIKW(データ-情報-知識-知恵)モデルを活用してドメイン駆動設計のデータ抽出アルゴリズムを改善**
記事URL:https://qiita.com/aLtrh3IpQEnXKN7/items/2394918862a29d5283cb

#ブルジョワが考えたドメイン駆動設計をソ連が考案した作戦術で☆粉砕☆からの変更点
・**ドメイン層**のクラスから**倉庫(Repos

元記事を表示

JavaのEnumでコード値からの逆引きが欲しくなるときはあるけど、本当に必要ですか?

# はじめに

([Zenn](https://zenn.dev/nslender/articles/d1936e0c4f8fd9)とダブルポストです。)
やや煽り気味のタイトルですが、必要なときは当然あります。
けど、実際は、「逆引きは使わずにすむならその方がいい」というのが、多くの人が感じているところでしょう。

この記事では以下を主な目的としています。

* 極力使わないようにするやり方
* 使わざるを得ないケースの整理
* 使う場合でも、使用箇所を減らすやり方

# Enumの逆引きとは

コード値(数値や特定の文字列)をプログラム上で扱うときに、Javaではenumを使うことが多いです。その場合、コード値から対応するenumの要素に変換したいケースもよくあります。このことをenumの逆引き(lookup)といわれることが多いです。

主な方針としては、「enum要素全体からコード値が一致するもの探索」か「コード値をキーとしたマップを作成」の2つがあります。

* [Enumを中身から逆引きして取得する](https://qiita.com/ushidatmhr/items/

元記事を表示

RecyclerViewにDataBindingを導入してみた

## はじめに
前回作成したRecyclerViewにDataBindingを導入してみた。
前回記事https://qiita.com/kilalabu/items/da1aae6d73177fec9e98

## デモアプリ
![recyclerview.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670405/8e1d05fa-ba7c-260e-bf03-70e20b242f00.gif)
## コード実装
### Layout
“`xml:recyclerview_cell_item.xml



じゃんけんが決まる平均の回数

#何人かでやったときにじゃんけんの決まる平均の回数

“`java
import java.io.*;

public class Game {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int input=0;
for (;;) {
try {
System.out.println(“何人でじゃんけんするのか入力してください”);
input=Integer.parseInt(br.readLine());
if (input==0) {
System.out.println(“0以外の数を入力してください”);
}

元記事を表示

Java → Kotlinのチートシート

## はじめに
この記事は「**JavaからKotlinへの移行の際にこうすれば便利かな**」というものを軽く纏めてみたものです。
Qiitaで初めて記事を書くので至らない点もあると思いますが、温かい目で見てもらえればと思います。
また、「ここはどうなんだ?」って所があれば教えていただけると助かります。

### 環境
**Java**: 1.8.0_281
**Kotlin**: 1.4.20

## `Integer.parseInt`, `Long.parseLong` …
ユーザーから受け取った引数を数値型に変換したい時のアレです。
これにはエラー処理が含まれてないので[数値型かどうか検証](#数値型かどうか検証)も見てみると良いかもしれません。
### Java
“`java
String str = “123”;
Int i = Integer.parseInt(str);
Long l = Long.parseLong(str);
“`

### Kotlin
“`kotlin
val str = “123” // String
val i = str.toIn

元記事を表示

Javaでリサンプリングするだけ

PCマイクから8000Hz/16bitで取得し、線形補完による16000Hz/16bitにサンプリングする例です

“` java
import static java.lang.System.out;

import java.util.Arrays;

import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.TargetDataLine;
import javax.sound.sampled.DataLine.Info;

public class MicrophoneResamplingTest {

// SampleRate:8000Hz, SampleSizeInBits: 16, Number of channels: 1, Signed:true, bigEndian: false
public static final AudioFo

元記事を表示

【Java】ArrayListについて

#記述方法
ArrayListを使う記述方法は、以下の様に`<>`の中に格納したい型名を記述します。

“`Sample.java
import java.util.ArrayList;

public class Sample {
public void main(String[] args) {
ArrayList array = new ArrayList();
}
}
“`
#特徴
######宣言時のサイズ指定は不要
宣言時にサイズを指定しないため、データを追加しようとした時に自動的に追加されていく。

######インスタンスでないものは格納できない
例えば`int`型は使えないので、`Integer`を使用する。

元記事を表示

Java:「メインクラスを検出およびロードできませんでした」の解決法

#はじめに
当方はJavaの初学者で、今までは1つのソースコード内でクラスを作成しプログラミングを行ってきたが、学習が進むにつれてクラスの数が増えてきたため、パッケージを利用することにした。
しかし、パッケージを利用して同様の方法で実行しようとしたところ、少し手こずったため、備忘録として残しておく。
###現象
パッケージの利用で複数のソースコードをコンパイルし、実行しようとしたところ…
`・コンパイルはできるのに実行ができない!`
`・エラー: メインクラスを検出およびロードできませんでした`
`・原因: java.lang.NoClassDefFoundError: Sample2/Sample2 (wrong name: Sample2)`

#今までの実行方法

“`Sample1.java
class Student {
private String name;
public Student(String _name) {
this.name = _name;
System.out.println(this.name +

元記事を表示

kurento-group-callのサンプルにMCUを追加する

## 概要

Kurentoのインストールとサンプルアプリの起動を行った[前回](https://qiita.com/Otama75/items/7153607d3cde868aaf5c)からの続きです。

KurentoのTutorialには、kurento-group-callという多人数でビデオ会議を行うサンプルアプリケーションがあります。しかし、このサンプルの接続モデルはSFUで、MCUを実現したものがありません。そこで、オリジナルのkurento-group-callにMCUによる接続を追加し、合成後の映像ストリームもユーザに送るようにしたサンプルを作成してみます。

映像の合成は、Kurentoで提供されるCompositeMixerエレメントを使います。

今回作成したソースコードは[こちら](https://github.com/kozokomiya/kurento-group-call-mcu)です。

## パイプラインの構造

オリジナルのSFU版kurento-group-call (下の図左側)に、CompositeMixer(Compositeエレメン

元記事を表示

エラーハンドリング設計の鉄板4箇条と+α

#はじめに
自分自身、結構適当と言うか、
エラーハンドリング(例外処理)とログ出力(メッセージ)の設計を、
なんとな〜くやってたので、しっかりと調べてみやした。

本当だったら、
**どこでどんなエラーが起こって、どうやったら解決できるか**
っていう、
**エンジニアにヒントと希望を与えてくれるもの**なのに、

タスクが盛り盛りで、作ることだけに集中してしまうあまりに、
**運用と管理保守のことを軽視**してしまっておりました。

なんとも、Viciousスパイラル(悪循環)で、
後々自分が苦しまないように、しっかりと準備したいと思います。

(※もろもろ間違っておりましたらごめんなさい。勉強し直します。)

#1. エラー分類
大まかに分けるとエラーの種類は2つある。

###正常系エラー
例えば、トランザクション開始前のバリデーションチェックなど、
想定内として、入力エラー等を正常処理としてエラーハンドリングするケース

####正常系エラーは、例外は使わずに、ステータスコードを使うべし
なぜなら、例外処理は対応コストがかかるため、例外をthrowしない。
また、入力エラー

元記事を表示

M1 MAC × Docker × JAVA

#DockerでJAVA環境構築
Dockerfileを書いて、JAVAの環境を構築しようと思います。
Docker、JAVAともに初学者なので、ご教授お願いいたします。
#Dockerfile

“`Dockerfile
FROM ubuntu:latest
RUN apt update && apt install -y \
expect \
sudo \
wget \
unzip \
zip \
vim && \
printf “\
set timeout -1 \n\
spawn sudo apt install -y openjdk-14-jdk\n\
expect {\n\
\”Geographic area: \”{send\”6\”; exp_continue;}\n\
\”Time zone: \”{send\”79\”;}\n\
}\n\
exit\n\
” | expect
ENV JAVA_TOOL_OPTIONS -Dfile.encoding=UTF8
CMD [“/bin/bash”]
“`
#buildとrun
bu

元記事を表示

OTHERカテゴリの最新記事