JAVA関連のことを調べてみた2022年05月17日

JAVA関連のことを調べてみた2022年05月17日

オブジェクト指向を超ザックリ説明してみた( ᐛ )

はじめに

備忘以外で投稿するのは初めてなので、お手柔らかに(´・ω・`)
プログラミングを勉強してまず最初に躓くのがオブジェクト指向だと思います。
そこまでは単純にコードを書いてコンソールで動かしてって感じだと思うんですが、
オブジェクト指向から急に
「えっ?はっ?どういう事??」ってなる人が多いと思います。
かくいう私も「オブジェクト指向の全容を完璧に理解しているのか?」って聞かれると、自身を持って「任せとき!」とは言い難いので、今回は自分の認識のズレを見つける目的もあって記事を書いています。
※筆者はJavaをメインにしているので、Java視点での記載をします。

オブジェクト指向ってなぁに?

まぁぶっちゃけて言ってしまうと、
オブジェクト指向なんてなくてもプログラムは書けますし動かせます( ゚Д゚)
「じゃあいらんやんw」って言われてしまうかもしれませ

元記事を表示

JavaによるK-Nearest Neighborアルゴリズム

# はじめに
K-nearest neighbors (KNN) は分類や回帰のタスクを実行するために用いられる教師あり機械学習アルゴリズムです。

KNNは、テストデータと学習点の距離を求めることで、テストデータに対して正しいクラスを予測します。このアルゴリズムでは、テストデータに最も近い点をK個選択します。そして、テストデータがK個のクラスに分類される確率を計算します。そして、最も高い確率を持つクラスが選択されます。

KNN アルゴリズムは、学習データから識別関数を学習するのではなく、学習データセットを記憶するため、遅延学習アルゴリズム と呼ばれます。

# データセット
未知のデータに対して予測を行うために、顧客データセットを使用します。使用するデータセットは、以下のように、顧客の年齢、収入、購入した商品などを示しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1739999/4bac5e85-f423-929b-3995-637982c55c0d.png)
年齢58歳

元記事を表示

【React.js】SpringBootで作成したAPIを呼び出す方法

# はじめに
今回は、SpringBootで作成したRestAPIをReactで呼び出す方法について解説します。

SpringBootにReactを導入する方法を調べても、思ったようなものを見つけられなかったので備忘録として残しておきます。

# 前提
– SpringBootでアプリケーションが作成されていること

# バックエンド(API)側の実装
まずは、バックエンドの実装をします。
ここでは、Springスターター・プロジェクトを作成して、レスポンスを返すところまでを実装します。

## SpringBootプロジェクトの作成
プロジェクトの作成ですが、ビルドツールとしては`Gradle`を選択し、依存関係として以下を選択します。
– Spring Web
– Lombok
– SpringBoot Devtools

最低限アプリケーションが動作すればいいので、上記3つのみ選択します。(もちろん、がっつりアプリケーションを開発する場合は、これ以外にも選択する必要があります)

## Controllerの実装
先ほど、記述したように、今回は必要性低減の実装のためContro

元記事を表示

素因数分解を Java でやってみる

素因数分解を Java でやってみる
“`
int num = 360; // 素因数分解する数字(素因数で割った結果を入れながら処理)
int i = 2; // 素因数(2から始めてインクリメントしながら処理)

System.out.println(“素因数分解する数字:” + num);

while (i <= num) { // 素因数分解する数字 num が素因数 i より小さい間、繰り返す int j = 0; // 素因数で割れる回数(毎回、初期化して割れる間はインクリメントしながら処理) while (num % i == 0) { // 素因数分解する数字 num が 素因数 i で割り切れる間、繰り返す num /= i; // 素因数分解する数字 num に 素因数 i で割った値を代入 j++; // 素因数で割れる回数 j をインクリメント

元記事を表示

もしAndroidオープンソースがクソコードだったら

## まえおき

– 下品なタイトルで申し訳ありません。
– あえてクソコード化させてクラス設計を考察する。という内容です。
– というのは、直近でCodeCompleteを読んでいてクラスをどう設計するべきかについて学びました。
– 抽象的な表現も多く記憶から消える前に実際のソースコードを通してクラス設計のアンチパターンをまとめてみようと思います。
– しかし設計を1からするのは難しいため、逆の発想でAndroidのオープンソースコードであればJavaで美しく設計されていると信頼して、そのうちのSimpleAdapterクラスを部分的に変更してどんなリスクが生じるのかを考察します。Fragmentクラスなどはメンバが多すぎたため少しマイナーかもしれませんがアダプタを説明の都合上採用します。
– CodeCompleteを読んだ人やクラス設計を学習している人、JavaでAndroid開発をしている人に楽しんでもらえたらうれしいです。

## クラス定義のねらい

– CodeCompleteを読んでいるといろんなことが書いてあるわけですが、そもそものクラス設計の本質は『複雑さの緩和

元記事を表示

ABC002が一通り解けたので書いた記事

## はじめに
前回同様、難易度の割には易しめです(個人の感想)。
絶対もっと良い解答がある気がしますが、私は思いつかないので自分の解答を元に解説していきます。

## A – 正直者
問題文は[こちら](https://atcoder.jp/contests/abc002/tasks/abc002_1)

単純にXとYを比較してif~elseに落とし込みましょう。
“`A.java
import java.util.*;
class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
//値の受け取り
int X = sc.nextInt();
int Y = sc.nextInt();
//Xの方が大きい?
if(X>Y) System.out.println(X);
else System.out.println(Y);
}
}
“`
ちなみに、if~elseの部分はこう書き換えても良いでしょう。
`

元記事を表示

Spring循環参照

# Springの依存性の注入(Dependency Injection:DI)
まずは、SpringのDIの方式を一回振り返って見ます。
SpringのDIは@Autowiredアノテーションで実現していますので、@AutowiredのJavaDocに「Marks a constructor, field, setter method」記述があって、3方式があります。

“`
/**
* Marks a constructor, field, setter method, or config method as to be autowired by
* Spring’s dependency injection facilities. This is an alternative to the JSR-330
* {@link javax.inject.Inject} annotation, adding required-vs-optional semantics.
*
* 略
*/
@Target({ElementType.CONSTRUCTOR, ElementT

元記事を表示

【オラクル西川です。】GraalVMハンズオン演習(機能編)。主要3機能を手元マシンで触ってみる!

2022年5月

GraalVM オンハンド演習 <基礎編> 

主に、下記のサイトの手順によっておりますが、初心者にも、より分かりやすい様に編集しております。
https://medium.com/graalvm/graalvm-ten-things-12d9111f307d
https://github.com/junsuzu/graalvm-jp-handson-basic/

GraalVMの主要機能下記3つを検証します。
① 最適化されたJITコンパイラ機能
② Microserviceに最適なAOT(事前コンパイル)によるNative Image作成機能
③ 多言語対応機能

尚、私の手元の環境はMacですので、それに沿って、実施します。

<環境設定/GraalVMの設定>
OTN – Oracle Technology Network からGraalVM Enterprise Editionをダウンロードします。下図のように”GraalVM Enterprise Edition 22 Current Release” タブを選択し、“Release Version 2

元記事を表示

eclipse (Java)デバック方法

# eclipse(Java) を使ったデバック方法
プログラミングをしていると変数の途中経過だったり処理がどのように動いているか確認したいときがある
eclipse を使ったデバック方法を簡易に記載(Java で main メソッド実行時)

1. ブレークポイントを設定
エディタの止めたい行の行数横あたりで [ダブルクリック] or [右クリック] -> [ブレークポイントの切り替え]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51758/69c48b87-f287-ade7-a209-e4d3971708b9.png)

1. デバック実行
実行したいものを選択した状態で [右クリック] -> [デバック] -> [Javaアプリケーション]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51758/1f1ea027-177a-bac7-6691-33789bb22fcc.png

元記事を表示

【Springboot】HTMLと@RequestPramで簡単に検索機能を実装する。URLへパラメータを設定し、ページ間で値を受け渡しする

# 1. はじめに
写真管理アプリを制作する中で、キーワードを用いた検索機能を実装したかったです。
ブラウザの履歴に残るよう検索毎に URL を分けたかったので、URL にパラメータを含めるのが理想でした。
結果的に `http://hogehoge.com?fruit=apple`のような URL を作成し、そのパラメータを次の画面に渡すことができたので、まとめました。

# 2. 対象読者
– 検索機能を実装したい方
– ブラウザに検索履歴を残したい方( URL にパラメータまで含めることによって、ブラウザの履歴も細分化される)
– HTML と Springboot で素早く実装したい方(JavaScript は使わない)

# 3.結論
下記の通り実装すれば OK です。
完成後イメージは下図の通りです。
![Qiita図解|パラメータを用いた検索機能.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675074/c7944cfa-79dd-66b8-7fd4-b1c77cabb684.jpeg)

元記事を表示

88 解答

# Aceptedされたがダメそうな解答
問題文にソートされた配列はnums1に入れとかなくてはいけないと書いていたので、わざわざソートした combinedArray をnums1 にもういちど入れなおしている。
しかし、そもそもソートされた配列を関数で返してはいけないと書いてあるので間違いだと思う。
“`Java
public void merge(int[] nums1, int m, int[] nums2, int n) {
int[] combinedArray = new int[m + n];
int index = 0;
for (int i = 0; i < m; i++) { combinedArray[i] = nums1[i]; index++; } for (int i = 0; i < n; i++) { combinedArray[index] = nums2[i]; index++; } Arrays.sort(combinedArray); for(int i = 0; i <

元記事を表示

4分チャレンジ:31時(翌7時)基準のファイル分割ツール

# はじめに

前記事
1. [4分チャレンジ:タブ区切りファイルをhtmlファイルに変換する](https://qiita.com/hiuchida/items/8be2894b4f38397ba7c0)

毎日手作業で実施しているような小さなタスクをツール化する。
要件の洗い出しと、実装は分ける。

# 要件

通常、ログファイル等の分割は、日付単位でyyyymmdd等のファイル名に保存する。
ログファイルも当然溜まっていくが、チャートデータChartData.csvは1日単位で必要で、翌日には4本値をダウンロードすれば良いので、Tick単位のファイル(約1MB)はアーカイブしたい。
ただし、ザラ場が8:45-15:15、16:30-30:00のため、23:59:59で分割する意味がなく、翌日の06:00:01が最後のデータの後を基準にする。

過去のログファイルを確認すると、06:06ごろに注文stateが1に変更、06:17にAPI強制ログアウト、再ログイン後に終了した注文が削除、07:51ごろにcurPrice=0、08:00以降から注文stateが3に変更される。

以上を

元記事を表示

SpringBootでHerokuからアドオン使わずにGmail送信する

# Heroku に公開してるサービスにメール送信機能を実装したい。
## 前回、ローカルで動作確認に成功済
とりま、ローカルで実装しよう。。。
ということで、 Spring Mail と、 FakeSMTP を使って前回ローカル環境で動作させることができました。
↓前回の記事

https://qiita.com/tamuten310/items/07ab89ac1f2a5f0758e2

## Heroku で動作させたいけど…どうすれば…?
で、もともと Heroku に公開してるサービスなので、 Heroku でどのように動作させよう??

「Heroku gmail送信」とかで調べると、 SendGrid とか、アドオン使った実装の情報ばかり。。。
一応やってみたけど、アドオンが一瞬で凍結されたり、セキュリティが厳しそう。。。
それに、 SendGrid の API を使うために、専用のメール送信の書き方をしなければならない。

う~ん、前回 JavaMail で書いたソースをそのまま使いたいんだよね。。。

## ローカルで Gmail 送信
application.pro

元記事を表示

【Java】PokeAPIで遊んでみた(Pokemon.java編)

ネットサーフィンをしていたら面白そうなAPIを見つけたので遊んでみました。

↓↓↓↓**pokeAPI**↓↓↓↓
https://github.com/oscar0812/pokeapi-v2-java

このAPIの**Pokemonクラス**を重点的に調べてみました。
使用するにはpom.xmlに下記の追加に加え、Java15以上でないと使用することが出来ません。
“`pom.xml

com.github.oscar0812
pokeapi
1.0.0

“`

# 使い方
Clientクラスの **getPokemonById()** 又は **getPokemonByName()** を使用することでポケモンの情報を取得することが出来ます。

“`Sample.java
// ピカチュウの全国図鑑No.で取得
Pokemon pikachu = Cl

元記事を表示

PLATEAUのCityGML LOD2 を MVTに変換するツールを作ってみた

# 1. 概要
[ベクトルタイルAdvent Calendar 2021](https://qiita.com/advent-calendar/2021/vt)の@frogcatさんの記事『[PLATEAUのCityGML Building LOD2をMVTにしてみた](https://qiita.com/frogcat/items/84b413c7e08c00b78c6a)』は、[PLATEAU](https://www.mlit.go.jp/plateau/)のLOD2モデルを[mapbox-gl.js](https://docs.mapbox.com/jp/mapbox-gl-js/overview/)/[maplibre-gl-js](https://github.com/maplibre/maplibre-gl-js)の「[fill-extrusion](https://docs.mapbox.com/mapbox-gl-js/style-spec/layers/#fill-extrusion)」で描画するというものです。このLOD2-MVTは[3DTiles](https:

元記事を表示

ABC001が一通り解けたので書いた記事

## はじめに
初めてABCが開催されたときの問題ということもあり、メモリ制限が若干厳しめです。あと、今の感覚でDifficulty見るとそんな高い?って感じるかもしれませんが、今のABCの難易度が上がっているだけです。正常な感覚です。

では、実際に私がACを取れたコードを見ながら解説していきます。

## A-積雪深差
問題文は[こちら](https://atcoder.jp/contests/abc001/tasks/abc001_1)

単純にH1-H2を行なえば良いですね。
“`A.java
import java.util.*;
class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
//二つの整数を受け取る
int H1 = sc.nextInt();
int H2 = sc.nextInt();
//差を出力
System.out.println(H1-H2);
}
}
“`
今のABCもこ

元記事を表示

[Apache Hop] ETLで大量のDummyデータを生成してみた

# 紹介したいこと
– ETLを使ってDummyの大量データをを生成する方法を紹介します。
– ダミーデータを生成する**Generate random value, Fake data**部品を紹介したい。
– HopでのETLの定義の雰囲気を伝えたい for Beginner

# 対象者
– Apache Hop (データ統合プラットフォーム) 、ETLを試してみたい方。
– 大量のDummyデータを準備したい人
– そのデータをデータソースに格納したい人(ファイル、RDB、MongDBなど)

# 前提環境
– Docker Desktopをインストールしている
– Apache Hopを準備している
– Hop GUIを操作できる

https://qiita.com/Tadataka_Takahashi/items/f13161b981a8699f46ff

https://qiita.com/Tadataka_Takahashi/items/58f69ceb466a5c3a295a

https://qiita.com/Tadataka_Takahashi/items/

元記事を表示

antlr4のC++パーサーの実用性を検証してみた

# 概要
この記事は、ANTLRを応用してC++のパーサーを検討した際にわかったことをまとめたものです。誰かの役に立つことを期待して、記事を公開します。
結果は最後の方にあるので、お急ぎの方は最後の方だけ見てください。

# ANTLRはパーサージェネレータ
ソースコードなどの構造化されたテキストをデータとして処理するのに便利な、ANTLR(ANother Tool for Language Recognition)をご存知でしょうか。
構造化されたテキストデータを、構造を持ったものとしてコンピュータに理解させる処理は、パース(構文解析)と呼ばれます。
通常、テキストの構造はプログラミング言語毎に異なるので、構文解析はその言語の文法に特化する形で作る必要があります。
その構文解析の作成のハードルを少し下げてくれるのが、ANTLRです。
(だいぶ端折りますが)ANTLRは、EBNF記法に似た独自のプログラミング言語(ANTLR4向けの拡張子はg4)で構造を定義し、指定の実装(実行?)言語向けに構文解析を行うソースコードを生成することもあって、パーサージェネレータと呼ばれます。
なお、AN

元記事を表示

1 解答

# n^2の解法

“`Java
public int[] twoSum(int[] nums, int target) {
long targetLong = target;

int[] ans = new int[2];

for (int i = 0; i < nums.length-1; i++) { for (int j = i + 1; j < nums.length; j++) { if(nums[i] + nums[j] == targetLong) { ans[0] = i; ans[1] = j; } } } return ans; } ``` # nの解法 今回のように(同一配列の)二つの要素を組み合わせるにはHashMapがいいのかもしれない。 ```Java public int[] twoSum(int[] nums, int target) { Map hash = new HashMap<>();

for (int

元記事を表示

AppletをJSに変換してみる 後編

これは後編です。[前編](https://qiita.com/noty2008/items/c90820db35e2f7feabcb)をまだ読んでいない方は、まずそちらからお読み下さい。
# クラスメソッドの最適化
[前編](https://qiita.com/noty2008/items/c90820db35e2f7feabcb)の最後に、「アプリケーションのパフォーマンスを低下させる」と言いましたが、まずはその理由と対策をご紹介します。

## 原因
パフォーマンスを低下させる状況として、「同じクラスのインスタンスを大量に使用する場合」があります。例えば、次のようなJavaScriptのコードを考えてみましょう。
“`
function Hoge()
{
this.a = 0; this.b = 0;
this.setAandB = function(a, b) //・・・(*)
{
this.a = a;
this.b = b;
}
this.sum = function() //・・・(*)

元記事を表示

OTHERカテゴリの最新記事