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

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

Hull Voronoi 3Dで何度もSingular input data errorが出る原因

### Hull Voronoi 3Dについて
3DのVoronoi図を計算するプログラムで、原作はC#で記述されています。私が作ったProcessing(Java)バージョンもあります。Convex HullのfindInitialPoints内で頻繁にSingular input data errorが出るので原因を調べてみました。
https://github.com/Scrawk/Hull-Delaunay-Voronoi
https://github.com/Nekodigi/Hull-Voronoi-3D
### 原因
そもそも、Singular input data errorは入力した点が、一致しているときに発生します。findInitialPointsには、各軸の座標が最小値、最大値の点に絞り込んで渡すのですが、複数の軸の最小値、最大値を兼ねている場合、稀に点が不足し、同じ点が選ばれてしまうという事態が起こります。
### 解決法
点が少ない場合は、Singular input data errorが起こりやすいですが、その分処理も軽いので、findInitialPo

元記事を表示

Factory Methodパターン

###Factory Methodパターン
Template Methodパターンではスーパークラス側で処理の骨組みを作り、サブクラス側で具体的な処理の肉付けを行う。
このパターンをインスタンス生成の場面に適用したものがFactory Methodパターン。

###Product (製品)の役
このパターンで生成されるインスタンスが持つべきインタフェースを定める抽象クラス。
具体的な内容はConcreteProduct役が定める。

““java
package factoryMethod;

public abstract class Product {
public abstract void use();
}
““

###Creator(作成者)の役
Product役を生成する抽象クラス。
具体的な内容はContreteCreatorが定める。
Creator役は実際に生成するConcreteProduct役については何も知らない。
C

元記事を表示

【初心者向け】「return」がイマイチ分からない2年前の自分に向けての記事(if-elseの話も少し)

#この記事を読んで習得できること
・プログラミングを初めてまだ「return」の使い方が分からない方々
・3年前の私

#経緯
大学院でプログラムを書いていた3年前のボク。
大学の研究で実験の解析で必要だったため、必死で書いていたのをなんとなく覚えている。

ひとまず、自分の行いたい解析プログラムは動くようになり、
喜びながらそのプログラムを使って解析を行っていた。

ひと段落してから、プログラムを見てみると、
「結構ソース汚いな…」と思い、修正しようと試みた。

しかし、ソースのスパゲッティ感*が半端なく、
なかなか修正が出来ずに、前回と同じようなソースなのに、
一から書き直したのを覚えている。

#3年前のソースで何が起こっていたのか
おおよそのイメージだが、こんな感じ。

“`sample.swift
func yabaiCode() {
if 条件1 {
処理1(15行以上)
処理A(10行以上)
処理4(10行以上)
} else if 条件2 {
処理2(15行以上)
処理A`

元記事を表示

kotlinとjavaでリストを作りたい!

# はじめに…

この記事は[2個前の記事](https://qiita.com/sato-na/items/cc23f9b1db9c948dc00e)で書いた、

**7日間毎日記事投稿の3日目**

になってます

使うコードは下に貼りますが、このアプリの詳しい機能はその2個前の記事をご覧ください!

– java版 : https://github.com/sato-na/guruwake_java

– kotlin版 : https://github.com/sato-na/guruwake_kotlin

↓ここからが今回の記事の本題です↓

# それぞれの言語でリストを扱うには…

— 目次 —

1. Arraylistの作り方

2. 要素を追加・削除する方法

3. 要素数を取得する方法

4. リストの中身を逆順・シャッフルする方法

5. 中身を違うリストにコピーする方法

## ArrayListの作り方

– javaの場合

“`java
ArrayList<要素の型>変数名 = new ArrayList<>();
“`

例)

“`java

元記事を表示

【忘備録】Java : 文字列調査

# はじめに
今回は今まで逃げ続けてきたJavaの今までの復習と勉強ををしていきます。初めてプログラミングでJavaを触った結果、Javaに対して苦手意識が生まれたのですが、JavascriptやRubyを学んでから、学んだことがJava現場でも少しずつ活かされ始めて少しずつJavaも書けるようになり、Javaを今度こそ、しっかり学んでいきたいと思うようになりました。

今回はJavaにもともと、備わっているStringクラスのメソッドの復習をしていきます。使っている参考書は有名な[こちら](https://www.amazon.co.jp/dp/B00O0NIW30/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)です。

## String操作

### 1, equals
文字列比較の定番。
比較対象の文字列が等しいか見てくれる。小文字、大文字も見てくれる。

“`sample.java
public class string {
public static void main(String[] args){
b

元記事を表示

【Java】ArrayListの最長文字列をstreamを使って簡単に取得する方法

ArrayList\に格納されている文字列のうち、最大長であるものを簡単に取り出す方法です。
普通に考えたら、forで回してlenghtがMaxになるものを取得するというものですが、
ここではstreamを使って1行で取得します。

注)streamはJava8以降で利用可能です。

# ソースコード
maxString()が最大文字列長を取得するメソッドです。

“` StringList.java

package samples.stream.main;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

public class StringList {
private List _strList = new ArrayList();

public void add(String str) {
_str

元記事を表示

【エラー解決】HV000030: No validator could be found for constraint 〜〜

#####【環境】

– ProductName: Mac OS X
– ProductVersion: 10.14.6
– BuildVersion: 18G2022

#####【遭遇したタイミング】

– spring-bootでアプリを開発中

###結論

– 使うべきアノテーションを間違えていた。

###原因

`@Pattern` では使えない方法でバリデーションを設定していた。

#####【エラー内容】

“`
There was an unexpected error (type=Internal Server Error, status=500).
HV000030: No validator could be found for constraint ‘javax.validation.constraints.Pattern’ validating type ‘java.math.BigDecimal’. Check configuration for ‘price’
“`

訳:

“`
HV000030: 型 ‘java.ma

元記事を表示

プログラミング言語を学ぶ時には、はじめにプログラミング言語の家系図を見ておくとよいよ、という話

# プログラミミング言語の家系図ってなに

あるプログラミングがいつ、どのような言語に影響を受けて誕生したかを表す系譜のことです。

# プログラミミング言語の家系図はここにある

プログラミング家系図を載せているサイトはいくつかあるのですが、今回はこちらのサイトを紹介します。

[diagram & history of programming languages](http://rigaux.org/language-study/diagram.html) (プログラミング言語の系譜)

|![program_diagram.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/288329/c5cab079-38a7-1cba-f4d0-0681f128ccd9.png)|
|:–|

主要言語のみものと、150以上の言語を載せているバージョンの2種類が記載されています。
2020年8月時点で、2018年の分まで記載されています。

# いくつかの言語をピックアップ

主要言語の図から、いくつかの言語を

元記事を表示

Java 練習問題「初級」

基礎編に引き続き初級編です。

##初級編
“`
package com.company;

public class HundredKnocksBeginner {
public static void main(String arg[]) {
Main main = new Main();
// question21(10,3);
// question22(10);
// question23(0);
// question24(5);
// question25(-10);
// question26(0);
// question27(6);
// question28(10);
// question29(11, 22, 33, 44, 55);
// question30(0);
// question31(17);
// question32();
// ques

元記事を表示

Javaのnull合体演算子

Javaにnull合体演算子が無いのでイケてないなあと思いつつ
Util関数を用意する次第

名称を`coalesce`として大体SQLの関数と同じ感じで使えるかなと

“`java
public final class Utils {
@SafeVarargs
public static T coalesce(T… value) {
for (T v : value) {
if (v != null) {
return v;
}
}
return null;
}
}
“`
“`java
public static void main() {
String foo = null;
String bar = null;
String hoge = Utils.coalesce(foo, bar, “huga”);
System.out.println

元記事を表示

Java で gRPC サーバーを書くことによって Java 知識をアップデートする (1)

Java を再びやることになったので、Java の知識をアップデートするために、gRPC サーバーを書いてみることにした。

* [はじめてのgRPC(Java)](https://kazuhira-r.hatenablog.com/entry/2018/11/04/230856)

こちらの記事が素晴らしいので、これを流しているだけなのだが、大量のヤクの毛刈りが発生しているので、それを含めて書いていきたい。

# maven でコンソールアプリケーションを書く時のテンプレート

最初に詰まったのが、`maven` でとても単純な、Hello World レベルのコンソールアプリケーションを作成すること。単純に、`maven-archetype-quickstart` を使うと良い。

“`bash
mvn archetype:generate
-DgroupId=com.simplearchitect \
-DartifactId=helloGRPC \
-DarchetypeArtifactId=maven-archetype-quickstart \
-Din

元記事を表示

JConsoleを使ってアプリケーション情報をリアルタイム監視する方法

## 概要
アプリケーション情報をリアルタイム監視できるようにJConsoleというツールが用意されています。
このJConsoleの使い方について備忘録を残しておきます。

## 検証環境
– Eclipse Oxygen.3a Release (4.7.3a)
– Java8
– JConsole 1.8.0_162-b12

## JConsoleの場所
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299044/565bd3d6-d272-5450-f0f6-115701465592.png)

JConsoleはJDKのbinフォルダ内にexeとして格納されており「jconsole.exe」を直でクリックして起動させます。

## JConsoleの使い方
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299044/11f62876-6eb4-b221-c2f0-a22b842f

元記事を表示

文字列比較 パイザのスキルチェック問題で引っかかったこと

パイザで公開されているスキルチェック問題「文字列比較」(※コード公開OKの問題)で引っかかったのでまとめ。

問題内容は、
「入力した2つの文字列を比較する」というもの
 
###引っかかった理由
文字列比較関数があることは知っていたが、参照した動画内でそのやり方が書かれていなかったので、「まさか使うとは思ってなかった」という先入観。

“`ruby:不正解コード

import java.util.*;

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

Scanner sc = new Scanner(System.in);
String line1 = sc.nextLine();
String line2 = sc.nextLine();

if( line1 == line2 ){
System.out.println(“OK”);
}
else{

元記事を表示

kotlinとjavaの基礎をまとめてみた

# はじめに…

この記事は[1個前の記事](https://qiita.com/sato-na/items/cc23f9b1db9c948dc00e)で書いた、

**7日間毎日記事投稿の2日目**

になってます

使うコードは下に貼りますが、このアプリの詳しい機能はその1個前の記事をご覧ください!

– java版 : https://github.com/sato-na/guruwake_java

– kotlin版 : https://github.com/sato-na/guruwake_kotlin

↓ここからが今回の記事の本題です↓

# それぞれの言語の基礎を比べると…

— 目次 —

1. 変数定義の方法

2. if文の書き方

3. for文の書き方

4. String→Intにする方法

## 変数定義の方法

– javaの場合

“`java
型 変数名 = 初期値;
“`

型の指定が必要

例)

“`java:ResultActivty.java
String rTxt = “”; // 31行目
in

元記事を表示

【SpringBoot】ConfigurationPropertiesアノテーションを付与したクラスのbeanが見当たらなかった話

## ConfigurationPropertiesとは
SpringBootにおいて設定ファイルの値をアプリケーションで取り扱う方法の一つ。

#### application.yaml
“`yaml
sample:
hoge: hogeValue
huga: hugaValue
piyo: piyoValue
“`

のような設定値が存在する場合に

“`kotlin
package com.wakye.property

import ……..

@ConstructorBinding
@ConfigurationProperties(“sample”)
data class SampleProperty(
val hoge: String,
val huga: String,
val piyo: String
)
“`

このように設定値に対応するフィールドを持つクラスにConfigurationPropertiesアノテーションを付与することで値のバインドを行った後にbeanとして登録してくれる、と

元記事を表示

Javaをより快適にするために移行しよう

これはJavaからKotlinへの移行してみたら、とてもよかったということを伝えるための記事です。
# Javaの欠点
私は少し前までJavaでプログラミングをしていました。しかしJavaには欠点があります。これは例えば次のようなものです。

:warning:これはJavaからの移行についての記事です。JavaScriptは全く別の言語です。ご注意ください。
## NullPointerException
APIから戻り値としてnullが返される場合や引数にnullを渡されたりします。前者についてはJava 8で追加されたOptionalクラスを使うことで回避できますが、後者はどうにもできません。実行時エラーはできますがコンパイルエラーが出ないことは残念なことです。
## 冗長な記述
### 型の記述
変数を宣言する場合、`List words`など型を記述します。しかし、それを推論できればいいですよね。いまでは`var`が使えますが、インスタンスフィールドなどにはそれはできません。
### オブジェクト指向について
Javaではいちいちカプセル化をするためにg

元記事を表示

二段階認証JAVA実現(TOTP)

# 1.はじめに
ある社内システムを外部へ公開により、セキュリティ対策を強化するため、ログインの二段階認証を実現したい。ITエンジニアの私として、二段階認証の実現方法を検討します。

# 2.二段階認証の使用流れ
– 各サイトに二段階認証機能を使うと、QRコードをスキャンしてから、認証アプリをアカウントに登録するよう求めるメッセージが表示
– 色々認証アプリがあり、例えば、Google Authenticator、Authy、Duo Mobile、1Passwordなど(時間ベースのワンタイムパスワード(TOTP)認証アプリ)
– QRコードをスキャンしたら、認証アプリにより、30秒ごとにパスワードを生成される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271267/6fe30615-9c0e-ee3e-a3e4-fd27040a2cbd.png)
– 普通のログインパスワード以外、該当パスワードは二段階認証コードとして使う

# 3.TOTP
時間によってワンタイムパスワー

元記事を表示

WebでH2データベースを確認

# WebでH2データベースを確認
プライベートプロジェクトを行うときによくH2データベースを利用しますが、
Web上でH2データベースを確認する方法を書いておきます。

application.properties内にコードを書きます。

“`
spring.h2.console.enabled=true
“`

そしてサーバーを起動し、以下のURLに接続するとH2データベースの設定画面が表示されます。
http://localhost:8080/h2-console/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684074/189054c6-f27f-8a97-d5ba-dd0f196bf01e.png)

Connectボタンを押すと以下のように正常に表示されることが確認されますね。
Selectの正常に動くことを確認できました。

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

元記事を表示

Windows10 Eclipse環境構築&何してるのか深堀 2020年8月

JavaのEclipseでの開発環境構築について、備忘録を兼ねて記事にまとめました。

2020年8月時点です。

##環境
OS: Windows10

#1. JavaのJDK入手
Eclipseインストーラ実行に必要な、Javaの実行環境を準備する(JDKの入手)。
###手順
https://openjdk.java.net
・install→jdk.java.net→Ready for use: JDK 14→Windows64bit
 からJDKをダウンロード。
・解凍して、「jdk-14.0.2」ができることを確認する。
・C:\ドライブ直下に「jdk-14.0.2」を移動する(他の場所でも可だが、パスが長すぎたり日本語が入ってるとエラーの原因になる)。
・パスは「C:\jdk-14.0.2」になる。
(14.0.2は記事作成時のバージョン)
###解説
#####

元記事を表示

AtomicReference について私的なメモ

コードリーディングをしていると、`AtomicReference` というクラスに当たったので、調べてみた。

# AtmoicReference とは

[リファレンス](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicReference.html)によると

> アトミックに更新されるオブジェクトのリファレンス

との事。これだけだとわからないけど、コンカレントプログラミングを実施する際に、シェアするオブジェクトで更新したいものを保持しておく。`syncronize` はコスト高だし、`violatile`キーワード は書き込みを同時にされたら破綻する。

## volatile

脱線するが、 `volatile` キーワードの意図するところは、変数の参照を、CPUキャッシュではなく、メインメモリを参照することを保証することにある。このキーワードがない変数は、通常、CPUキャッシュを参照する。複数のCPUがあるシステムの場合、同じ値を参照するとは限らない。そこで、`volat

元記事を表示

OTHERカテゴリの最新記事