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

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

【Mockito】ランダム生成の文字列を使ったdo whileループを検証する

# 問題
Mockitoを使って単体テストを作成中
以下のようなコードのテストに悩んでいた…

* ユーザーIDを生成
* 既存ユーザとIDが重複していたら生成し直す
* 生成したIDでSELECTしてEntityが取得できた場合は重複しているとする。

“`java
private String generateUserID() {
String userId;
do {
// ランダム8桁の文字列を作成
userId = RandomUtil.getRandomString(8);
// 作成したuserIDが既に使用されてなければループを抜ける
} while (userRepository.findByUserId(userId) != null);
return userId;
}
“`

Repository部をスタブ化してSELECTの戻り値を設定することでテストする。

“`java

// Entityが取得できるパターン
when(userRepository.findBy

元記事を表示

Java + MySQLで簡易掲示板を作る

![board.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566570/44aafca8-4c47-98a7-814f-4ba20f3e45ef.png)

mysqlを使った簡易的な掲示板を作りました。

##概要
・ID、名前、コメント、タイムスタンプを掲示板に表示する。
・名前かコメントが未入力だとエラーメッセージがポップアップする。

##苦労したところ
・DBに格納したデータを取り出す方法がわからなかった。
最初は配列で別々にID、名前、コメント、タイムスタンプを取り出そうとしたが上手くできなかった。
ArrayListならインスタンスまるごと格納できる!

・ArrayListの中身をjspで取り出す方法がわからなかった。
EL式で取り出そうとしたが上手くできなかった。
JSTLのcoreタグライブラリで`forEach`を使って取り出すことができた。

・mysql接続時にtime zoneエラーが出る。
下記を参考に接続URLを変更。日本時間にしたい場合は末尾をJSTに変更する。
[

元記事を表示

Javaでいいね機能の実装

![iineko.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566570/290f2b85-4b6b-7484-e3dc-f9db743d30fc.png)

アウトプットはどんどんした方がいいらしいので、初めて作ったいいねアプリの公開をします。
MVCモデルで作りました。
##概要
画像をクリックするといいねこ!が増えます。
値はアプリケーションスコープに保存しています。
https://iineko.herokuapp.com

##苦労したところ
1、HTMLから画面遷移せずに値を送る方法がわからずに四苦八苦しました。
[画面遷移せずにHTMLで値を送る方法](https://qiita.com/parapore/items/227782c252af6ab5aa03)

2、いいねを押しても1以上にならない。
いいねされる度に毎回newしていたので初回起動判定を入れた。

3、クラスをまたいでインスタンスを渡す方法がわからなかった。
YoineServelet.javaで`Yoine y =

元記事を表示

画面遷移せずにHTMLで値を送る方法

画面遷移せずにGETで値を送る方法のメモです。

##HTMLで値をGET送信
a href=”URL?属性名=変数名”

“`html



“`

##Javaで値を受け取る
request.getParameter(“属性名”)
sは文字列「sample」を受け取ります。

“`java
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

String s = request.getParameter(“action”);
“`

元記事を表示

NLP4J [006-034b] NLP4J で言語処理100本ノック #34 「AのB」の Annotator を作ってみる

# 改善すべき点

[NLP4J [006-034] NLP4J で言語処理100本ノック #34 「AのB」](https://qiita.com/oyahiroki/items/f4eeb31e073136f494d9) では「AのB」を抽出する処理を直接コードで書いていました。以下の部分です。

“`java
// 「AのB」を探す
String meishi_a = null;
String no = null;

for (Keyword kwd : kwds) {
if (meishi_a == null && kwd.getFacet().equals(“名詞”)) {
meishi_a = kwd.getLex();
} //
else if (meishi_a != null && no == null && kwd.getLex().equals(“の”)) {
no = kwd.getLex();
} //
else if (meishi_a != null && no != null && kwd.getFacet().equals(“名詞

元記事を表示

FreeMarkerでSpring Security JSPタグを使う

# やりたいこと
FreeMarker上で、 `` などのJSPタグを使いたい。https://vorba.ch/2018/spring-boot-freemarker-security-jsp-taglib.html で紹介されていたことを、自分でも確認したい。

FreeMarkerには元々、JSPタグを使う機能があるらしい。→ [参考URL](https://freemarker.apache.org/docs/pgui_misc_servlet.html#autoid_63)

# 環境
– AdoptOpenJDK 11.0.5
– Spring Boot 2.2.2.RELEASE
– Spring Security 5.2.1.RELEASE
– Embedded Tomcat 9.0.29
– FreeMarker 2.3.29

# 依存性

“`xml:pom.xml


org.spring

元記事を表示

[Android] MySQLに接続する(未完)

##JDBCダウンロード
AndroidからDBに直接接続できないので、JDBCドライバが必要になる。
MySQLインストール時にしなかった方は、こちらのConnecter/Jというリンクからダウンロード・インストールできる。
https://dev.mysql.com/downloads/

C:\Program Files (x86)\MySQL\Connector J 8.0の階層にmysql-connector-java-8.0.18.jarがあるので、これをビルドパスに追加する。

##ビルドパス設定
jarファイルをapp/libsの下に追加。
さらにbuild.gradleに以下を追加。

~~~gradle
dependencies {
compile files(‘libs/mysql-connector-java-8.0.18.jar)
}
~~~
その後、おそらく同期ボタンが出てくるので同期する。

・参考URL
https://qiita.com/icchi_h/items/8ce738ce8511ef69c799

##パーミッション
ネットワークを

元記事を表示

VScodeでJavaウェブアプリケーション開発環境構築(struts2)

VSCodeでJavaのWebアプリケーション開発ができるように開発環境を整えたい。
開発したものはVSCodeからコンパイルして実行したい。デバッグもしたい。テストもしたい。
と色々調べ、使用しているもの全てにおいて初心者なので苦労しましたが、
なんとか実行可能な環境が完成したのでまとめます。
少しでも同じようなことをしたい方の助けになれば幸いです。

この記事内では紹介しておりませんが、Tomcatを使用してデバッグも可能です。

#動作環境
  ・macOS Catalina 10.15.2
  ・Visual Studio Code 1.41.1
  ・AdoptOpenJDK 1.8.0_232
  ・Maven 3.6.3
  ・Tomcat 9.0.30

#JAVA_HOME設定
これまでOracle提供のJDK1.8.0_221を利用していたのですが、
このタイミングでAdopt提供のOpenJDK1.8.0_232をインストールしたのでまずはこちらを使うためにパスを通します。

“`terminal:ターミナル
$ open ~/.bash_profile
`

元記事を表示

組み合わせ計算(フェルマーの小定理、事前計算による高速化)(Java)

# はじめに

フェルマーの小定理を利用した組み合わせ計算の理論と、javaの実装例を書きました。
また複数回組み合わせを求める際に利用する、事前計算による高速化の実装例も載せています。
実装例はソースに貼り付けて汎用的に利用できます。

# 計算方法

**組み合わせ $_nC_r$ の求め方**

* nが小さい時

パスカルの三角形を用いて行います。
n=4000くらいまでは計算できます。
考え方や実装例は[こちら](https://qiita.com/naru7sh/items/7f3f47fbf2e415c0ec86)に書きました。
ただしnが小さくても、modを法として計算できる時は、nが大きい時と同様にフェルマーの小定理を用いて計算して良いです。

* nが大きい時

nが大きい時の組み合わせは、ある大きな素数modの法の元で計算します。
modを法にするとき、n!やr!などもオーバーフローしないまま計算できるので、以下の公式通りに計算することができます。

“`math
nCr=\frac{n!}{r!{(n-r)!}}
“`

ただしmod計算では割り算を自由に

元記事を表示

【Java】ファイステルネットワークの実装

###【概要】
共通鍵暗号方式の1つであるDESでは、ファイステルネットワークという構造を使用しています。
簡単に説明すると、ラウンド関数という関数と排他的論理和を使用した暗号化方式です。
DESでは入力の平文は64ビット、鍵のビット長は56ビットなどの決まりがありますが、今回はファイステルネットワークを実装してみたかっただけなので、そのような制約は排除しています。

[[参考]WikipediaでのFeistel構造の説明](https://ja.wikipedia.org/wiki/Feistel%E6%A7%8B%E9%80%A0)

###【コード】
ここで掲載しているコードは、下記リンク先のGitHubに載せています。
[feistelNetwork](https://github.com/nobu12/feistelNetwork)

“`java:Main.java
package main;

import common.AbstractEncryption;
import encryption.Decryption;
import encryption.Encryp

元記事を表示

JavaのAssertionとは?まとめ。

# 概要
JavaのIntegrationTestをやったので、忘れないようアウトプットします。

#目次
1. Assertionとは
2. Assertionのメソッドたち

# 1. Assertionとは
##Assertionとは
[Oracle公式ドキュメントによると](https://docs.oracle.com/javase/jp/8/docs/technotes/guides/language/assert.html)
> アサーションとは、プログラムに関する前提をテストできるようにするJavaプログラミング言語の文です。

## Assertionのライフサイクル
アサーションは**常にBoolean型**となっており、**trueを前提**としてテストをしていきます。
falseの場合、**AssertionError**をthrowします。

## カバレッジ
また、機能をテストでどの程度カバーできているかを**カバレッジ**といいます。
**カバレッジ**の質が高いほどバグが減ります。

# 2. Assertionのメソッドたち
## assertE

元記事を表示

kuromoji を Win10 + Eclipse + Java の環境で動かす (2020年1月版)

さすがはJava製のkuromojiはOSに依存することもなくMavenにも対応しているので、とても導入しやすくて使いやすいです。

本投稿のタイトルにはWin10とEclipseと入れておりますが、kuromojiはどちらにも依存していません。

# Maven

セットアップはたったこれだけ。
モデルデータもダウンロードされます。

“`xml


com.atilika.kuromoji
kuromoji
0.9.0
pom


com.atilika.kuromoji
kuromoji-ipadic

元記事を表示

NLP4J [006-034] NLP4J で言語処理100本ノック #34 「AのB」

やってみます。

# 34. 「AのB」
2つの名詞が「の」で連結されている名詞句を抽出せよ.

# Maven

現在開発中のバージョンを利用します。

“`xml

org.nlp4j
nlp4j-core
1.1.1.0-SNAPSHOT

“`

# Text Data

デフォルトで利用している形態素解析(Yahoo! Japan デベロッパーネットワーク 日本語形態素解析) では、リクエストサイズの上限が900KBであり、回数に制限もあるので小さなサイズのテキストファイルを利用しています。

“`

 吾輩は猫である。
名前はまだ無い。

 どこで生れたかとんと見当がつかぬ。
何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。
吾輩はここで始めて人間というものを見た。
しかもあとで聞くとそれは書生という人間中で一番獰悪な種族であったそうだ。
この書生というのは時々

元記事を表示

幅優先探索で迷路の距離を測る

ABC151に参加してD問題解けなかった復習としてまとめる

# 幅優先探索と深さ優先探索

wikiの図がすごいわかりやすいから見て・・・

まぁこんな感じに木があると思って

“`木構造
親A
 ├子AA
 │ ├孫AAA
 │ └孫AAB
 ├子AB
 │ └孫ABA
 └子AC
   ├孫ACA
   ├孫ACB
   └孫ACC
“`

## 幅優先探索
https://ja.wikipedia.org/wiki/%E5%B9%85%E5%84%AA%E5%85%88%E6%8E%A2%E7%B4%A2

親ノードにぶら下がってる子ノードを全部探索してから、探索した子ノードにぶら下がってる全部の孫ノードを探索する

キューを使って解く

1. キューに親Aを入れる ( キューの状態:親A )
1. 親Aを取り出す ( キューの状態:空 )
1. 親Aにぶら下がってる子AA,AB,ACを全部キューに入れる ( キューの状態:子AA 子AB 子AC )
1. 子AAを取り出す ( キューの状態:子AB 子AC )
1. 子AAにぶら下がってる孫AAA,AABを全部キューに入れ

元記事を表示

【初心者】Java オブジェクト指向/インスタンスフィールド/インスタンスメソッド/オーバーロード【備忘録24】

##オブジェクト指向
楽にプログラムを組み立て、修正できるように存在する指向のこと。
プログラムの中に人間がいるかのようにし、それぞれに自己紹介をさせるような形。

###オブジェクト(別名:インスタンス)
情報と振る舞いに分けられる。
情報の種類としては、名前・年齢など。
振る舞いの種類としては、hello・walkなど。

※情報=インスタンスフィールド
※振る舞い=インスタンスメソッド

###クラス(メソッドをまとめる部品)
インスタンスの設計図を意味する。

##インスタンス
インスタンスを生成する際は基本的には変数に代入して用いる。
「クラス型 変数名 = new クラス名();」
※大文字・小文字の違いに気を付ける。
※変数名に1、2、3など数字を付ける事で大量に作ることが可能。

###インスタンスフィールド
情報を格納しておく変数のこと。
基本的にクラスの一番上で定義する。

“`java
class Person{
public String name;
}
“`

呼び出し方としては

“`java
/*にて*/

Person

元記事を表示

Java Dynamic Proxy

*前言:Java标准库提供的动态代理(Dynamic Proxy)功能,允许在运行期动态创建一个接口的实例。动态代理实际上是通过JDK在运行期动态创建class字节码并加载的过程。*

# 代理模式
## 关于代理模式
**代理模式**(Proxy pattern)是经典的23种设计模式之一,Java的动态代理就是代理模式。首先来看看什么是代理模式?下面是代理模式的UML图:
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228534/9dcf0e0a-6508-154a-2e15-862942f4989d.png)

该模式的参与者:

– Proxy
– 保存一个引用使得代理可以访问实体。Proxy引用Subject。
– 控制实体的存取,负责创建和删除它。
– 提供一个与Subject的接口相同的接口,这样代理可以用来代替实体。
– Suject
– 定义RealSubject和Proxy的共用接口,这样就在任何使用RealSubject的地方都可以使用

元記事を表示

NLP4J [006-033] NLP4J で言語処理100本ノック #33 サ変名詞

やってみます。

# 33. サ変名詞
> サ変接続の名詞をすべて抽出せよ.

# Maven

現在開発中のバージョンを利用します。

“`xml

org.nlp4j
nlp4j-core
1.1.1.0-SNAPSHOT

“`

# Text Data

デフォルトで利用している形態素解析(Yahoo! Japan デベロッパーネットワーク 日本語形態素解析) では、リクエストサイズの上限が900KBであり、回数に制限もあるので小さなサイズのテキストファイルを利用しています。

“`

 吾輩は猫である。
名前はまだ無い。

 どこで生れたかとんと見当がつかぬ。
何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。
吾輩はここで始めて人間というものを見た。
しかもあとで聞くとそれは書生という人間中で一番獰悪な種族であったそうだ。
この書生というのは時々我々を捕えて煮て食

元記事を表示

NLP4J [006-032] NLP4J で言語処理100本ノック #32 動詞の原形

やってみます。

# 32. 動詞の原形
> 動詞の原形をすべて抽出せよ.

# Maven

現在開発中のバージョンを利用します。

“`xml

org.nlp4j
nlp4j-core
1.1.1.0-SNAPSHOT

“`

# Text Data

デフォルトで利用している形態素解析(Yahoo! Japan デベロッパーネットワーク 日本語形態素解析) では、リクエストサイズの上限が900KBであり、回数に制限もあるので小さなサイズのテキストファイルを利用しています。

“`

 吾輩は猫である。
名前はまだ無い。

 どこで生れたかとんと見当がつかぬ。
何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。
吾輩はここで始めて人間というものを見た。
しかもあとで聞くとそれは書生という人間中で一番獰悪な種族であったそうだ。
この書生というのは時々我々を捕えて煮て食う

元記事を表示

NLP4J [006-031] NLP4J で言語処理100本ノック #31 動詞

やってみます。

# 31. 動詞
> 動詞の表層形をすべて抽出せよ.

# Maven

現在開発中のバージョンを利用します。

“`xml

org.nlp4j
nlp4j-core
1.1.1.0-SNAPSHOT

“`

# Text Data

デフォルトで利用している形態素解析(Yahoo! Japan デベロッパーネットワーク 日本語形態素解析) では、リクエストサイズの上限が900KBであり、回数に制限もあるので小さなサイズのテキストファイルを利用しています。

# Java Code

“`java
package nlp4j.nokku.chap4;

import java.util.List;

import nlp4j.Document;
import nlp4j.DocumentAnnotator;
import nlp4j.DocumentAnnotatorPipeli

元記事を表示

javaでAtCoder Beginner Contest 151を解く

AtCoder Beginner Contest 151お疲れ様でした!
[公式ページ](https://atcoder.jp/contests/abc151)

今回の自分の書いたコードは[こちら](https://github.com/ko-flavor/atcoder-java/tree/master/atcoder/src/abc/abc151)
以下簡単に解説します。

##[問題A](https://atcoder.jp/contests/abc150/tasks/abc151_a)
入力文字列の次のアルファベットを出力する問題。
javaのcharはインクリメントすると次のcharになることを知っていたので、そのまま記載。

##[問題B](https://atcoder.jp/contests/abc150/tasks/abc151_b)
テストの点数が与えられ、目標点に到達するには何点とればよいか、という問題。
テストの点数を順番に足していって、目標点と引き算すればOKです。

目標点に頑張っても到達できない場合と既に到達している場合があるので、注意。

##[問題C

元記事を表示

OTHERカテゴリの最新記事