JAVA関連のことを調べてみた

JAVA関連のことを調べてみた

解いてみた。「Aランク:ハノイの塔」

# 問題
[「Aランク:ハノイの塔」](https://paiza.jp/works/mondai/real_event/hanoi)

# コード
Javaで解いてみました。

“` Java
import java.util.*;

public class Main {

private static ArrayList> alst;
private static int nT;

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);
int nN = sc.nextInt();
nT = sc.nextInt();

// 初期設定
alst = new ArrayList>();
for (int i = 0; i < 3; i++) { a

元記事を表示

MVCモデルについて

# MVCモデルについて
WEBアプリについて独学や講義を受けるとMVCモデルについて学ぶと思います。
MVCモデルについてはそれぞれの役割についてまとめます。
* M(Model):アプリケーションのビジネスロジックを担当。データの更新等を行う
* V(View):ユーザに表示するビュー。モデルで取得したデータを利用してレンダリングする
* C(Controller):ユーザの入力を処理し、入力データに基づきモデルを操作し、結果をビューに返却する

MVCモデルについては以下のようなイメージになるかと思います。
**MVCモデルイメージ**
“`plantuml
(View) <-> (Controller)
(Controller) <-> (Model)
“`

# MVCモデルの動作について
ユーザにはViewを返却することになりますが、コーディングとしていると、コントローラーで返却することになるため、モデルイメージと若干のギャップがあるかと感じると思いますので、具体的にどのような動作になるのか説明したいと思います。

“`plantuml
autonumber
acto

元記事を表示

MyBatisで値オブジェクトとかを使う際の構文とかメモとか

値オブジェクトとMyBatisの組み合わせでハマったポイントをメインに構文とかメモとかを書いておく。~~ハマったと言いつつどうハマったのかは書いてません。~~

## 雛型
上2行はおまじない。
`namespace`に、xmlに対応するMapper.javaの絶対パスを記入する。
~~~xml:雛型xml

~~~

~~~Java:例:Mapper.java
package com.example.demo.infrastructure

@Mapper
public interface Mapper{

}
~~~

~~~xml:例:Mapper.xml

元記事を表示

解いてみた。「Aランク:山折り谷折り」

# 問題
[「Aランク:山折り谷折り」](https://paiza.jp/works/mondai/real_event/origami)

# コード
Javaで解いてみました。

“` Java
import java.util.*;

public class Main {

public static final boolean TANI = false;
public static final boolean YAMA = true;

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);
int nN = sc.nextInt();

// 初期設定
int nSize = 0;
boolean[] abFolds = new boolean[(int)(Math.pow(2, nN))];

// 谷折りをi 回開く

元記事を表示

解いてみた。「Aランク:本の整理」

# 問題
[「Aランク:本の整理」](https://paiza.jp/works/mondai/real_event/book_sort)

# コード
Javaで解いてみました。

“` Java
import java.util.*;

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

Scanner sc = new Scanner(System.in);
int nN = sc.nextInt();
int[] anBooks = new int[nN+1];

// 本の並び順を格納
for (int i = 1; i <= nN; i++) { anBooks[i] = sc.nextInt(); } // 交換回数 int nChange = 0; // 左からi冊目の本について for (int i

元記事を表示

Javaでオセロを実装してみた

## 概要
今回はjavaでオセロゲームのコードを書いてみました。
練習用で記述していますのでご承知ください。

### 参考元
以下の記事を参考元しています。
@nogitsune413様
大変勉強になりました。ご投稿感謝申し上げます。

https://qiita.com/nogitsune413/items/d252a879480480a0697a

### ソースコード
“`Osero.java
import java.util.Scanner;
public class Osero{
private static final int L = 10,
WALL = 9,
EMPTY = 0,
BLACK = 1,
WHITE = 2,
PASS = 1,

元記事を表示

Javaのプリミティブ型とオブジェクト型の違い

Javaにおけるプリミティブ型とオブジェクト型(ラッパークラス)の違いについてメモ。
検証では Java の REPL ツールである [JShell](https://docs.oracle.com/javase/jp/11/tools/jshell.html#GUID-C337353B-074A-431C-993F-60C226163F00) を使用する。

“`
$ jshell

jshell> System.out.println(“Hello”);
Hello
“`

そのため、変数の型を確認できる `/v` という JShell 特有の記法も使用しているので注意。

“`
jshell> /v 3
| Integer nullableInteger = null
“`

※ 以後コードを書く際は `jshell>` の表記を省略する

### 1. 値の比較

正直このメモを残すために記事を書いてる。
オブジェクト型の比較では `equals()` メソッドを使用する必要がある。

“`java
int a = 5;
int b = 5;
Sys

元記事を表示

Java Goldを3週間で取得した勉強法

## まえおき
Java Silver SE11の資格取得から2カ月経過後に勉強をスタートしました。
基本的なJavaの文法は理解してるくらいな状態でした。
(Silverは83%で合格でした。)

### 自己紹介
+ エンジニア歴 2年目
+ 受験時にはJavaの開発経験なし
+ フロントエンドの開発経験あり

## 学習時間と正答率
+ Java Silver:39時間、正答率:83%
+ Java Gold:72時間、正答率:79%

## Java Goldについて
Silverと比較して難易度はかなり上がります。
覚える量がSilverの倍くらいある印象でした。
ただ参考書などは充実しているので、勉強時間を確保できたら取得できる資格です。

コード読解の練習にもなるので、個人的には学習してよかったです。
Javaを使わなくても、資格の知名度や他の言語学習にも流用できる点を考えるとおすすめです!

### 要点
https://qiita.com/Anest_Doi/items/eebc8d19743330a612ed

とてもまとまっていたので、参考にさせていただきまし

元記事を表示

継承よりインターフェース・委譲を使ったほうがいい話

## はじめに
この記事は僕が技術本や記事で得た知見の理解を深める目的で作成しました。
間違っている箇所や、感想等ありましたらコメントいただけると嬉しいです。

## 対象読者層
– 抽象クラス・インターフェースは知っているけど、使い分けがわからない
– 委譲の仕組みは何となく知っているけど、具体的にどう使えばいいかわからない

## 結論
可能な限り、抽象クラスの継承は避ける。
インターフェース・委譲を積極的に使おう。
どうしても継承を使うなら、**慎重に**設計しよう。

## 継承のNGパターン
はじめに、継承を用いたNGパターンを見てみましょう。

### 実装例
以下のサンプルコードは決済処理を表現したコードになります。

#### クラス図
“`plantuml
@startuml
package Payment {
class PaymentProcessor {
+payment(amount: int): void
#addPoints(points: int): void
+processPayment(am

元記事を表示

Javaで「CASE_INSENSITIVEフラグ(大文字と小文字を区別しない)」の動作を確認してみた

# 概要

Javaで「CASE_INSENSITIVEフラグ(大文字と小文字を区別しない)」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/start/regex/index17.html

# 実装

以下のファイルを作成しました。
“`JSample17_1.java
import java.util.regex.*;

class JSample17_1{
public static void main(String[] args){
String[] target = {“apple”, “Apple”, “APPLE”};

String regex = “apple”;
Pattern p1 = Pattern.compile(regex);

for (int i = 0; i < target.length ; i++){ Matcher m = p1.matcher(target[i]); System.out.println(target[

元記事を表示

【Java】recordでCustom Constructorを実装する際に「Non-canonical record constructor must delegate to another constructor」のエラーが発生

## 概要
JavaのrecordでCustom Constructorを実装する際、[【Java】コンストラクタ](https://zenn.dev/miya_akari/articles/bdcf90b497ee69)の記事にあるように、classと同様の形式で以下のように実装したとします。

“`java
public record LatLonResponse(double lat, double lon) {
// Custom Constructorの実装
public LatLonResponse(Double[] lonLat) {
this.lat = lonLat[1];
this.lon = lonLat[0];
}
}
“`

ただ、この実装だと`Non-canonical record constructor must delegate to another constructor`というエラーになります。ではどう実装すればよいかのメモ書きです。

## 前提
* 今回使用したJDKは`Corret

元記事を表示

【Spring Security】認証トークンって何?

## はじめに
SpringSecurityの認証トークンについて、トークンってなに?何ができるの?みたいなところ解決していければと思い記事を書いていきます。
間違いなどございましたらご指摘いただけますと幸いです!

## (まずSpring Securityとは)
認証や認可、およびその他多くのセキュリティ対策を簡易に実装できるSpringのフレームワークです。
認証:ユーザーが誰であるかを確認する(ログインのこと)
認可:認証された(ログインした)ユーザーが特定のページにアクセスできるかを決定する方法(権限があるかないか)

## よく聞くトークンってなんなの?
トークンは、認証や認可のプロセスにおいてユーザーの認証情報を安全にやりとりするための文字列です。
このトークンはユーザーは見れないものになっています。
ちなみに、今回は認証トークンについての説明ですがトークンにはさまざまな種類があります。
下記にどんなトークンがあるのか書いておきます。
“`
1. 認証トークン
– JWT(JSON Web Token)
ユーザー認証に使用されるトークンの一種で、セッションの代わりに使用

元記事を表示

Paiza×Qiitaキャンペーン 全問Javaで解説してみた【D 足し算 編】

# はじめに
学習する為に使用したJavaの教科書によっては難易度が変わるかもしれません。

# 問題へのリンク

https://paiza.jp/works/mondai/d_rank_skillcheck_sample/addition

# 解答コード

~~~

import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);

final int A = scanner.nextInt();
final int B = scanner.nextInt();

System.out.println(A + B);
scanner.close();
}
}

~~~

# 解説

1行空白区切りで入力値を受け取るので、scanner.nextLine()しか知らない場合には少し難易度が上がります。

元記事を表示

Paiza×Qiitaキャンペーン 全問Javaで解説してみた【D 一番小さい値編】

# はじめに
D Rankの問題をただ解くだけだと初心者専用記事になってしまうので、通常の解法とは別に、Stream APIも使って解いてみました。

# 問題へのリンク
https://paiza.jp/works/mondai/d_rank_skillcheck_sample/min_num

# 解答コード

通常

~~~
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
final int NUMBER_OF_INPUTS = 5;
int min = Integer.MAX_VALUE;

for (int i = 0; i < NUMBER_OF_INPUTS; i++) { int input = scanner.nextInt(); min = Math.min(min, in

元記事を表示

[備忘録 その17] Java Silver ~モジュールシステム~

# モジュールシステム
コードをモジュールという単位で構成し、管理するための仕組みです。モジュールシステムは、大規模なアプリケーションの開発やライブラリの再利用を容易にし、依存関係の管理を強化することを目的としています。
## 1\.モジュールシステムの基本概念
#### モジュール
モジュールは、クラスやパッケージをグループ化し、明確に定義された境界を持つ単位です。各モジュールは、他のモジュールに対して何を公開するか(エクスポートするか)を指定できるため、アクセス制御が可能です。
__module-info.java__
モジュールシステムの中心にあるのが、__module-info.java__ というモジュール定義ファイルです。このファイルは、モジュールの名前、依存関係、およびエクスポートされるパッケージを定義します。__module-info.java__ はモジュールのルートに配置されます。
## 2\.module-info.javaの構造
module-info.javaの基本構造は次の通りです。
“`java
module com.example.module {

元記事を表示

Java Gold 例題 同期制御2

“`java
class StudentExamination {

private static final int NUM_STUDENTS = 3;
private static final int NUM_QUESTIONS = 5;
private static final int MAX_TIME_PER_QUESTION = 10;

public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(NUM_STUDENTS);

CyclicBarrier barrier = new CyclicBarrier(NUM_STUDENTS, new Runnable() {
private int currentQuestion = 0;
@Override
public void run() {
currentQuestion++;
if(currentQuestion <

元記事を表示

Java Gold 例題 ZonedDateTime

“`java
import java.time.Duration;
import java.time.ZoneId;
import java.time.ZonedDateTime;

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

ZoneId tz = ZoneId.of(“Asia/Tokyo”);
ZoneId lz = ZoneId.of(“America/Los_Angeles”);

ZonedDateTime t = ZonedDateTime.of(
2024, 8, 14,12, 0, 0, 0, tz);

Duration d = Duration.ofHours(10).plusMinutes(20);
ZonedDateTime at = t.plus(d).withZoneSameInstant(lz);

System.out.println(t);
System.out.println(at);
}
}
“`
本コードの目的

元記事を表示

Javaで「先読みと後読みを使ったパターンの記述」の動作を確認してみた

# 概要

Javaで「先読みと後読みを使ったパターンの記述」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/start/regex/index15.html

# 実装

以下のファイルを作成しました。
“`JSample15_1.java
import java.util.regex.*;

class JSample15_1{
public static void main(String[] args){
String regex = “smart(?=phone)”;
Pattern p = Pattern.compile(regex);

String[] target = {“smart”, “smartphone”, “smartwatch”};

for (int i = 0; i < target.length ; i++){ Matcher m = p.matcher(target[i]); System.out.print(target[i

元記事を表示

[備忘録 その16] Java Silver ~例外~

# 例外
Javaの例外処理は、プログラムの実行中に発生するエラーや異常な状況を処理するためのメカニズムです。例外が発生すると、通常のプログラムの流れが中断され、その例外を処理するためのコードが実行されます。これにより、プログラムが予期しない動作をすることを防ぎ、適切なエラーハンドリングを行うことができます。

### 1\.例外の基本
例外とは、プログラムの実行中に発生する異常な状態を示すオブジェクトです。Javaの例外はすべて、java.lang.Throwableクラスのサブクラスであり、主に2つのタイプに分類されます。
#### 例外にタイプ
__1\. チェック例外:__
* コンパイル時にチェックされる例外です。チェック例外が発生する可能性のあるコードは、必ず例外を処理するか、メソッドシグネチャにthrowを使って宣言する必要があります。
* 例:IOException, SQLException

__2\. 実行時例外:__
* 実行時に発生する例外で、コンパイル時にチェックされません。プログラムのロジックの問題やバグによって引き起こされることが多く、例外処理は任意です

元記事を表示

[備忘録 その15] Java Silver ~継承とポリモフィズム その4~

# ジェネリックス
ジェネリックスは、Javaにおいてクラスやメソッドに型引数を使用する機能です。ジェネリックスを使用することで、型の安全性を確保しつつ、再利用性の高いコードを記述できます。これにより、コンパイル時に型のチェックが行われ、不適切な型が使用されるのを防ぐことができます。

## ジェネリックスの基本
ジェネリックスを使うと、クラスやメソッドを定義する際に、特定のデータ型に依存しないコードを書くことができます。例えば、リストのようなデータ構造において、ジェネリックスを使うことで、格納される要素の型を指定することができます。
#### ジェネリックスクラス
以下は、ジェネリッククラスの例です。Tは型引数(ジェネリック型)を表しており、任意の型を指定できます。
“`java
public class Box {
private T item;

public void setItem(T item) {
this.item = item;
}

public T getItem() {
return ite

元記事を表示

OTHERカテゴリの最新記事