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

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

【Java】文字取得・boolean型用途(AOJ⑤不足しているカードの発見)

#文字列から指定位置の1文字を取得
* **charAtメソッド**
* `文字列.charAt(指定位置);`

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

String str = “もふもふねこ”;
System.out.println(str.charAt(0)); //も
System.out.println(str.charAt(3)); //ふ
System.out.println(str.charAt(4)); //ね
System.out.println(str.charAt(5)); //こ
}
}
“`

#boolean型の用途
* boolean型は、true(はい)またはfalse(いいえ)の判定結果を入れるために利用できる
* 数値や文字列の比較結果を表す
* if文で分岐の方向を表す
* for文やwhile文でループを続行するか決定する

“`java
//数値比較
public class Main

元記事を表示

【Java】ArrayListクラスのオブジェクト操作 (AOJ④数列の反転)

#ArrayListクラス(可変長配列)のオブジェクト操作
* リストは**配下の要素が順序づけられたコレクション**
* ArrayListは内部的に配列を利用したデータ構造になっていて**後からでも要素追加削除可能**
* cf: 配列は不可
* インデックス値による値の読み書き(ランダムアクセス)は、**位置によらず一定時間でアクセス可能**
* **値の頻繁な挿入削除は低速**
* 挿入時に確保していたメモリの領域を超えると自動でメモリ再割り当てが発生する(→あらかじめ要素数が想定される場合サイズ宣言しよう)

###定義
* `ArrayList<型> リスト名 = new ArrayList<型>();`
* <型> にクラス名を指定
* 指定したクラスの**オブジェクトを要素として格納できるようになる**
* 基本型を扱うリストを作成したい場合は、ラッパークラスで定義(ex: int型のラッパークラスはIntegerクラス)

###要素の並べ替え
* Collectionsクラスの**sortメソッド**
* リストの要素を自然昇順でソー

元記事を表示

超初心者が覚えたてのJavaでLoto6の購入案を自動生成する

#導入
友人(プログラミング経験者)「お前プログラミング始めたんだって?」

私「うんそだよー」

友人「じゃあLoto6の数字を決めてくれるプログラミング作ってみてよ」

私「余裕でしょ\:wink:」

#始めに
ロト6は、1~43の数字の中から異なる6個の数字を選ぶ数字選択式宝くじです。

タイトルにもあるように私はプログラミング初心者なので、超簡単にJavaでロト6の数字を選んでくれるコードを書こう!の記事です。
当然ながら過去当選番号等をスクレイピングして~なんてことはしません。~~というかスクレイピングってなに?~~

奮闘記のような形になってますので、初心者の頃を思い出して生暖かい目で見て頂ければと思います。

##案1(ゴリ押し)
早速だけどコードを書いていく。

私「えーと、まずは6個の数字を格納する配列を作って・・・・・・」
私「当然、1~43の数字をランダムで選ぶんだからRandomクラスは必須だよね~」

“`java

int[] numbers = new int[6];
for (int i = 0; i < numbers.length; i++)

元記事を表示

【Java】ConcurrentModificationExceptionとは何か

#プログラミング勉強日記
2020年11月15日
Javaでコードを書きテストを使用してあっているか確かめていたところ、`java.util.ConcurrentModificationException`という例外が発生したのでConcurrentModificationExceptionとは何なのか、どうすればいいのかまとめる。

#ConcurrentModificationExceptionとは
 [ ConcurrentModificationExceptionのJavadoc](https://docs.oracle.com/javase/jp/7/api/java/util/ConcurrentModificationException.html)には以下のように書いてある。

> この例外は、オブジェクトの並行変更を検出したメソッドによって、そのような変更が許可されていない場合にスローされます。

 基本的には、繰り返しているものが変更されたときに早めに失敗して例外を投げるフェイルファーストするために使用される。つまり、繰り返し処理を終了する前に例外が発生

元記事を表示

プログラミング学習 備忘録11/14

・ローカル変数・・・main()やadd()のようなメソッド内で宣言した変数のこと。
         仮引数もその1種

・HTMLでのYoutube動画の埋め込み ⇨ 動画下の共有をクリック ⇨ 現れたダイアログの中にある「埋め込む」をクリック ⇨ 埋め込みコードが現れるのでコピーをクリック ⇨ コピーしたコードをvscode等に貼り付け

・HTMLでのGoogle Mapの埋め込み ⇨ 左上のメニューボタンから地図を共有または埋め込むを選択 ⇨ 地図を埋め込む ⇨ HTMLをコピー ⇨ コピーしたコードをvscode等に貼り付け

#引用、参考
・スッキリわかるJava入門第3版
・徹底攻略Java silver SE11 問題集
・[N予備校](https://www.nnn.ed.nico/)

元記事を表示

Observer Pattern

複数のObserverが一つのオブジェクトの状態変化を監視する
監視されるクラスは複数のObserverインスタンスを保持し、Observerクラスのメソッドを使って状態変化を各Observerに通知する
Observerは監視対象のクラスオブジェクトを保持する

[Design Pattarm MENU](https://qiita.com/old_cat/items/852d980bedb9100dd7e3)

以下のクラス構成で確認します

|クラス|説明|
|—–|—-|
|Mediator.class|各Observerクラスが監視するオブジェクト
各ObserverクラスのインスタンスをListに格納
Listにインスタンスがadd()されたら、全ObserverにListのsizeを通知する|
|abstract
Observer.class|監視対象のMediatorインスタンスを保持する
Mediatorが利用するメソッドを実装|
|ob1.class~ob2.class

元記事を表示

Javaの配列とArrayListの違いについて、似た機能のメソッドを比較・対応してみた

# はじめに

Javaの問題を解くとき、プログラムの作成条件として、”配列を使うように”とのお達しがあったのですが、
「はて、ArrayListではアカンのか?」
「そもそも配列ってなんだったっけ、めちゃくちゃ曖昧にしか認識してない」
と感じたので色々と調べてみました。
複数の言語を触った経験が悪影響を及ぼし、『リスト』『タプル』『配列』『ArrayList』など、あらゆるキーワードがごちゃまぜになっている状態です。
Javaに限ってもLinkedListなんてものもまだありますし、整理がなかなか大変です。

網羅的に、そして深くまで把握するのは今の自分には厳しかったのと、更にそれを記事にまとめるのも厳しいと感じたので、
ふわっとした感じ、「とりあえず間違ってはいない」という内容になるように努めました。
ジェネリクスだとか実装だとか、そういったものはまだ理解&説明しきれる気がしません・・

# 実行環境
[Paiza.io] (https://paiza.io/ja/projects/new) : openjdk version “15” 2020-09-15)

# この記事でわ

元記事を表示

Logbackでログメッセージ内の秘密情報をマスク

## 概要
マスク対象を正規表現で抽出できることが条件だが、Logbackの設定において **`%replace`** で文字列を置換できる。

* http://logback.qos.ch/manual/layouts_ja.html#cwOptions ← クレジットカード番号をマスクする例

[Javaの正規表現](https://docs.oracle.com/javase/jp/8/docs/api/java/util/regex/Pattern.html)の機能や、キャプチャした部分文字列の参照を利用すれば、上の例より難しい条件でのマスクもできる。その例と実際のコードを記す。

## 例
以下のログには、ユーザーID・トークン・リソースIDが*どれも同じ形式*(十六進32桁)で出力されている。このうち**トークンのみ**をマスクしたい。

“`text:ログの例
2020-11-14T09:30:52.774+09:00 [main] INFO com.example.Main – UserID: 35f44b06a3cf8dab8355eb8ba5844c73, To

元記事を表示

TDDに取り組むため実践イメージと本質的イメージを押さえる

# はじめに

TDDに取り組むため、そして他者にもTDDに対する本質的なところのイメージを共有するために、本記事を記す。
※イメージ重視。一部まとめ終わっていない箇所ありますがご容赦ください。

# TDDとは

テスト技法ではなく、設計/分析技法

– 価値
– インクリメンタルな設計を促す開発手法
– チームに良いリズムを生む
– 開発に自信と信頼をもたらす
– 原則
– 実装する前にテストを作ること
– 問題を放置せず少しずつ前進させること
– 大事なのは完璧さより自信を持てる状態を保つこと
– ルール
– (自動化された)テストが失敗したときのみ、新しいコードを書く
– 重複を除去する

## インクリメンタルな設計とは

– できるだけ無駄なく価値あるものを作るために
– 開発対象への理解が進むほど正しい判断が可能になるため
– 何を作るか正しい判断ができるまでは決めないでおくが
– 最低限必要な機能から少しずつ開発を進め設計自体も少しずつ進化させつつ
– **開発対象への理解度を少しずつ上げることで、正しい判断をできるようにする**

元記事を表示

Mediator Pattern

MediatorはMediatorが管理するクラスインスタンスをフィールドに保持し、Mediatoに管理されるクラスはMediatorのインスタンスを保持し、Mediatorのメソッドを使わせる

Mediatorは管理するクラスのインスタンスからクラスの状態を取得し、状態に応じた処理を行う

[Design Pattarm MENU](https://qiita.com/old_cat/items/852d980bedb9100dd7e3)

以下のクラス構成で確認します

|クラス|説明|
|—–|—-|
|Mediator.class|管理するクラスのインスタンスを保持|
|menber.class|men1.class~men2.classのsuper
Mediatorクラスインタンスを持つ|
|user(Main.class)|動作確認|

*user 他の開発者がこのパターンを利用する、という意味合いを含みます

“`java:Mediator.class
class Mediator{

元記事を表示

Facade Pattern

多数のFacade配下のクラスの利用をコントロールする。userはFacadeを通じてFacade配下のクラスを利用する

[Design Pattarm MENU](https://qiita.com/old_cat/items/852d980bedb9100dd7e3)

以下のクラス構成で確認します

|package|アクセス修飾子|クラス|説明|
|——|—–|—–|—–|
|sample|public|facade.class|facadeが管理する各クラスの呼び出し、利用をコントロール|
|sample|default|sam0.class~sam2.class|int値を戻す|
|default|public|user(Main.class)|facadeを利用してsam0.class~sam2.classを利用する|

*user 他の開発者がこのパターンを利用する、という意味合いを含みます

“`java:facade.class
package sample;
public clas

元記事を表示

Chain of Responsibility Pattern

オブジェクトを順次よび出す

[Design Pattarm MENU](https://qiita.com/old_cat/items/852d980bedb9100dd7e3)

以下のクラス構成で確認します

|クラス|説明|
|—–|—-|
|abstract
chain.class|chain機能を定義
フィールド next は次のオブジェクトインスタンスを格納
set():次のオブジェクトをセット
doChain()を定義|
|chai1.class~chain3.class|chainを実装|
|user(Main.class)|動作確認|

*user 他の開発者がこのパターンを利用する、という意味合いを含みます

“`java:abstract_class_chain
abstract class chain{
String name = this.getClass().getName();
chain next; // 次のオブジェクトを格納

元記事を表示

PostgreSQLでUPSERTやってみた。

#はじめに
DB操作を行うときに、「このデータがINSERT済み、もしくはUNIQUE制約にひっかかったら更新、
そうでなければINSERTしたいな」
ってときにJavaで分岐させたりしてました。
でもPostgreSQLを使用していれば、その処理が同時にできるらしい。
ということで試してみました。

ちなみに、SQLのみでの実装は結構他のサイトにも情報があるので、今回はMyBatisを使用した方法をとっていきます。
といってもやることはあまり変わりませんが。

環境は以下
`IDE:Eclipse
:Java8,SpringBoot
:PostgreSQL,MyBatis`

#環境構築
SpringBootとMyBatisそのものとか、PostgreSQLとの連携については本筋ではないのである程度省略します。
今回はGradleです。

`Gradle(抜粋)`

“`
dependencies {
implementation ‘org.springframework.boot:spring-boot-starter-thymeleaf’
impl

元記事を表示

【Android / Java】DataBinding について学んだ

# はじめに
開発案件でDataBindingを使っており、学習したことを記事にする。

今回はDataBindingを使って、データクラスオブジェクトのプロパティの変更を監視してView表示に反映させるまでを学習した。

# 今回作成した学習用アプリ
①と②のテキスト表示を「チェンジ」ボタンを押す毎に動的に行ったりきたり切り替えるというもの
「ドラえもん」⇄「のびた」

①|
—|
|

②|
—|
|

# 実装ファイル
– “build.gradle

元記事を表示

【Java】Scanner・三項演算子・配列操作 (AOJ①大小整列)


AIZU ONLINE JUDGE の教材を使って勉強していきます

#AIZU ONLINE JUDGE とは
* AOJ(Aizu Online Judge:onlinejudge.u-aizu.ac.jp)は誰でも無料で利用できるプログラミング問題のオンライン採点システムです
* http://judge.u-aizu.ac.jp/onlinejudge/
* 開発者の渡部有隆さんによる機能・使いかた解説
https://book.mynavi.jp/manatee/series/detail/id=88273
* JavadではClass名をMainにしないと通らないので注意

>オンラインジャッジとは、多くの演習問題にチャレンジすることができ、オンラインでコードを採点してくれるサービスです。各問題には、テストデータが準備されており、提出されたコードの正誤とその効率の判定を即座に行ってくれます

#入力を受け取る方法(Scanner)
* **nextLineメソッド**:改行までの1行分の入力を取得
* 単語間のスペースを含む入力を読み取ります(\

元記事を表示

備忘録11/13

・macでスクリーンショットのショートカットキー
 command + shift + 3 を同時押し → 画面全体を画像としてデスクトップに保存
 command + shift + 4 を同時押し → 画面の一部の範囲を選択して画像としてデスクトップに保存

・HTMLファイルのひな形(テンプレート)の自動入力
 html:5 → tab

・MacでVScodeの文字を大きくしたり小さくしたりする(JISキーボード)
 command(⌘) + シフト(⇧) + プラス(+)
 command(⌘) + シフト(⇧) + マイナス(-)

・ ul>*6 → tab で、ulタグの中に(子要素として)liタグを6個いれるという意味

・ 崩れたコードがあったら、bodyタグ全体をマウスのドラッグで選択し、右クリックのメニューから選択範囲のフォーマットを選択する(フォーマットとは、崩れたコードを読みやすく整形すること)すると自動的にソースコードを整形できる。

進捗 04.さまざまなHTMLタグまで   

#引用、参考
[N予備校](https://www.nnn.ed.nico

元記事を表示

使用したクーポンコードを指定したエンドポイントにポストバックする

広告の成果計測等のために、使用されたクーポンコード等の情報を含めて計測システムのエンドポイントへポストバックする必要がある際の成果通知の仕方です。

今回はHttpURLConnectionを利用しました。

# security configの設定とmanifestの設定
設定するポストバック先のURLがhttps://〜であればこの設定は不要です。
Android 9(Pie)では暗号化されていない通信はできない、つまりhttp://ではじまるURLへの通信はデフォルトでは不可能です。
※設定するURLがhttps://で始まればこの手順は必要ありません。
## security config設定

app/xmlディレクトリに以下のファイルを作成します。

“`network_security_config.xml



元記事を表示

SpringBootのWebアプリケーションにMicrosoft IDプラットフォームでサインインさせる

##概要
Microsoftの公式ドキュメントが混乱していたり、ライブラリの更新が追いついていなかったりで最新のSpringBootからMicrosoftアカウントでサインインさせることが難しくなっています。
現状でサインインを実装するためのあれこれをまとめました。

– Azure AD用のSpringBootStarterはそのままでは起動できない
– Microsoftのドキュメントも大体更新が追いついておらず、古い
– 認証のみならSpring SecurityのOAuth2だけで可能
– ほとんど日本語資料がない
– 認証後にMicrosoftGraphを通じて各機能にアクセスするなら[Microsoft Graph SDK for Java](https://github.com/microsoftgraph/msgraph-sdk-java#microsoft-graph-sdk-for-java)を使用する[^1]

##前提条件
– Java11
– SpringBoot2.3.5(最新は2.4)
– 基本の依存性はSpring Initialzrで書き出す
– Gr

元記事を表示

無限くら寿司ガチャを作ってみた

10月からスタートしたGoToEatキャンペーン皆さんは使用していますか?
[農林水産省 GoToEatキャンペーン](https://gotoeat.maff.go.jp/)

私はちょくちょく使用していたのですが、なんでも巷で「無限くら寿司」というものが流行っているらしい。
GoToEatでもらえるポイントで食事をして、その食事でまたポイントが貰えるので、くら寿司を何回もお得に食べられるといったものです。(モラル的な話はおいておきます)
[くら寿司公式GoToEatキャンペーンページ](https://www.kurasushi.co.jp/topic/000971.html)

GoToEatでポイントをもらうためには、くら寿司で一人あたりランチは税込み500円、ディナーは税込み1000円以上食事をする必要があります。
そこで、くら寿司のメニューを該当価格を超えるくらいでランダムで表示される「無限くら寿司ガチャ」を作ってみました。

作ったwebアプリはこちら↓
[**無限くら寿司ガチャ**](http://ec2-13-231-170-155.ap-northeast-1.co

元記事を表示

Visitor Pattern

Composite Patterの要素を取得する

[Design Pattarm MENU](https://qiita.com/old_cat/items/852d980bedb9100dd7e3)

以下のクラス構成で確認します

|クラス|説明|
|—–|—-|
|interface
face|型とaccept()を定義する|
|faceImple.class|faceを実装する|
|faceList.class|faceを実装する
Listを持つ
Listのiteratorを発行するメソッドを持つ|
|Visitor.class|Visitor Patternを提供する|
|user(Main.class)|動作を確認する|

*user 他の開発者がこのパターンを利用する、という意味合いを含みます

“`java:interface_face
interface face{
void accept(Visitor visit);
}
“`
“`java:faceImple.class

元記事を表示

OTHERカテゴリの最新記事