-
Javaで学ぶストゥージソートの実装方法とコード解説
ストゥージソート(Stooge Sort)は、再帰を利用したシンプルなソートアルゴリズムの一つです。実用性よりも教育的な目的で知られており、計算量は O(n^(log 3 / log 1.5)) ≒ O(n^2.71) とバブルソートよりも遅いという特徴があります。ここでは、Javaを使ってストゥージソートを実装する方法を、サンプルコードとともにわかりやすく解説します。Javaによるストゥージソートの実装例以下は、ストゥージソートをJavaで実装したプログラムです。import java.io.*; public class Demo { static void st
-
【Java】正規表現を使って文字列に特殊文字が含まれているかチェックする方法
文字列の中に特殊文字(記号)が含まれているかどうかを確認する場面は、ユーザー入力のバリデーションなどでよくあります。Javaでは java.util.regex パッケージの Pattern クラスと Matcher クラスを利用することで、正規表現によるシンプルなチェックが可能です。 サンプルコード import java.util.regex.Matcher; import java.util.regex.Pattern; public class Demo { public static void main(String[] args) { String my_str
-
文中の単語をアスタリスクに置き換えるJavaプログラム
文章の中から特定の単語を見つけて、アスタリスク(*)に置き換えたい場面は意外と多くあります。例えば、不適切なワードのマスキングや、ネタバレ防止のテキスト加工などが挙げられます。本記事では、そのような処理を実現するJavaプログラムのサンプルコードと、その動作の仕組みをわかりやすく解説します。サンプルコードpublic class Demo{ static String replace_word(String sentence, String pattern){ String[] word_l
-
Javaのシャローコピーとディープコピーの違いを実例で徹底解説
シャローコピー(浅いコピー)とディープコピー(深いコピー)は、どちらも指定されたオブジェクトの複製を作成するための手法ですが、その仕組みと動作には重要な違いがあります。本記事では、それぞれの特徴をサンプルコードと実行結果をもとにわかりやすく解説します。 シャローコピー(浅いコピー) シャローコピーでは、オブジェクトの新しいインスタンスを作成し、元のオブジェクトからデータをコピーします。ただし、配列などの参照型フィールドに関しては、データの実体ではなく「参照」だけが渡される点に注意が必要です。そのため、コピー元のデータを変更すると、コピー先のオブジェクトにも同じ変更が反映されてしまいます。この
-
標準正規分布(SND)を計算するJavaプログラムの書き方
標準正規分布(Standard Normal Distribution:SND)は、平均が0、標準偏差が1となる正規分布であり、統計解析やデータサイエンスの分野で広く利用されています。本記事では、Javaを使って標準正規分布に関連する標準偏差を計算するシンプルなプログラムを紹介します。 サンプルコード 以下は、標準正規分布の標準偏差を求めるJavaプログラムの一例です。 import java.io.*; import java.util.*; public class Demo{ public static void main(String[] args){ doub
-
Javaの静的ブロック(staticブロック)とは?例付きでわかりやすく解説
Javaの静的ブロックとは静的ブロック(staticブロック)は、JVMのクラスローダーがクラスをロードするタイミングで実行される特別なコードブロックです。「静的初期化ブロック」とも呼ばれ、主に静的変数の初期化など、クラス単位で一度だけ行いたい処理を記述するために使用されます。重要なポイントとして、静的ブロックはmain()メソッドよりも先に実行されるという特徴があります。以下に具体例を示します。静的ブロックの主な特徴クラスがメモリにロードされるときに、一度だけ実行されるmain()メソッドよりも前に実行されるインスタンスを生成しなくても実行される1つのクラスに複数の静的ブロックを記述でき、記
-
Javaの静的制御フローとは?実行順序をサンプルコードで解説
Javaにおける静的制御フロー(Static Control Flow)とは、クラスがJVMによってロードされる際の処理・実行の順序を指します。大まかな流れは次のとおりです。 静的メンバー(static変数・staticメソッド)の識別 静的ブロック(staticイニシャライザ)の実行 静的なmainメソッドの実行 ここで重要なのは、静的変数への代入と静的ブロックがソースコード上の記述順に実行されるという点です。このため、宣言より前の位置にあるコードから変数を参照すると、デフォルト値が見えることがあります。以下の例で確認してみましょう。 コード例 public class Demo { &
-
Javaのインターフェースにおける静的メソッドの実装方法
Java 8以降、インターフェース内にも静的メソッド(staticメソッド)を定義できるようになりました。静的メソッドはインターフェース名を通じて直接呼び出すことができ、実装クラスのインスタンスを必要としません。ここでは、インターフェースに静的メソッドを実装する具体的なJavaコードを見ていきましょう。コード例interface my_interface{ static void static_fun(){ System.out.println(新しく作成された静的メソッド内です); } void method_override(String str);
-
Javaのイニシャライザブロックとは?基本と使い方をわかりやすく解説
イニシャライザブロック(初期化ブロック)は、クラス内に定義された複数のコンストラクタで共通して実行したい処理をまとめて記述するための仕組みです。コンストラクタが呼び出されるたびに、このブロックが必ず先に実行されます。具体的な例を見てみましょう。 サンプルコード import java.io.*; public class Demo { { System.out.println("共通のコンストラクタが呼び出されました"); } public Demo() { System.out.println("デフォルト
-
Javaでディレクトリとネストされたサブディレクトリ内の全ファイルを再帰的に一覧表示する方法
Javaでは、java.io.FileクラスのlistFiles()メソッドを再帰的に呼び出すことで、指定したディレクトリだけでなく、その中にネストされたサブディレクトリ内のすべてのファイルを一覧表示できます。以下は、階層構造(インデント)付きですべてのファイルとフォルダを出力するJavaプログラムの一例です。 サンプルコード import java.io.File; public class Demo{ static void print_recursively(File[] my_arr,int my_index,int sub_level){ if(my_index =
-
Javaでディレクトリ内の全ファイルの内容を1つのファイルにマージする方法
ディレクトリ内に存在するすべてのファイルの内容を1つのファイルにマージ(結合)したい場合、Javaでは File クラスと BufferedReader、PrintWriter を組み合わせることで簡単に実現できます。以下にそのサンプルコードを示します。 サンプルコード import java.io.*; public class Demo{ public static void main(String[] args) throws IOException{ File my_dir = new File("対象ディ
-
指定した整数の正方形パターンを出力するJavaプログラム
指定された整数に基づいて正方形パターンを出力したい場合、以下のようなJavaコードを実装できます。 サンプルコード import java.util.*; import java.lang.*; public class Demo{ public static void main(String[] args){ Scanner my_scan = new Scanner(System.in); System.out.println(Enter a range); int my_num = my_scan.nextInt();
-
Javaでのスレッド干渉エラーとは?発生原因と対策をわかりやすく解説
マルチスレッドプログラミングでは、複数のスレッドが同一のデータに同時にアクセスすることで、スレッド干渉(Thread Interference)と呼ばれる不具合が発生することがあります。本記事では、具体的なサンプルコードとその実行結果をもとに、スレッド干渉がどのような現象なのか、そしてなぜ起こるのかをわかりやすく解説します。サンプルコードimport java.io.*; class Demo_instance{ static int val_1 = 6; void increment_val(){
-
Javaのメモリ整合性エラーとは?マルチスレッドでの発生原因と対策を解説
マルチスレッドプログラミングを実装する際、あるスレッドが加えた変更が、別のスレッドからは見えない(可視化されない)ことがあります。これは、各スレッドが持つメモリの見え方が互いに一致していないことを意味し、この現象は「メモリ整合性エラー」と呼ばれます。 メモリ整合性エラーが発生する仕組み CPUはメインメモリへのアクセスを、スレッドが実行した順序とは異なる順序で行うことがあります。これは主に書き込み操作の際に顕著で、CPUの待ち時間を避けるために行われます。 書き込み操作はアトミック(不可分)な操作です。つまり、あるスレッドが書き込みを行っている間、他のスレッドがその操作に割り込んで別の処理を実
-
Javaでstart()を使わずにrun()メソッドを直接呼び出すことはできる?
結論:はい、run()メソッドは直接呼び出せますJavaでは、start()メソッドを使用せずにrun()メソッドを直接呼び出すことも技術的には可能です。ただし重要な注意点として、その場合には新しいスレッドは作成されず、run()の中身は現在実行中のスレッド(通常はメインスレッド)上で、ごく普通のメソッド呼び出しとして処理されます。まずは具体的なコード例を見てみましょう。コード例class my_thread extends Thread{ public void run(){ try{ System.out.println(The thread
-
Javaの拡大プリミティブ変換(Widening Primitive Conversion)をサンプルコードで解説
Javaでは、あるプリミティブ型の値を、より表現範囲の広い別のプリミティブ型へ自動的に変換することを「拡大プリミティブ変換(Widening Primitive Conversion)」と呼びます。たとえば byte → short → int → long → float → double のように、データの損失なく小さい型から大きい型への変換が行われます。 以下は、拡大プリミティブ変換の動作を示すサンプルプログラムです。 サンプルコード public class Demo { public static void main(String[] args) { Syst
-
Javaで数値を2進数に変換するプログラムの書き方
数値を2進数に変換する処理は、プログラミングにおける基本的なアルゴリズムの一つです。ここでは、Javaを使って10進数の数値を2進数に変換するコードを紹介します。 サンプルコード import java.io.*; public class Demo { static void decimal_to_bin(int n){ int[] bin_num = new int[50]; int i = 0; while (n > 0){ &n
-
Javaプログラマー必見!押さえておきたい8つの重要ヒントとコツ
新しいプログラミング言語を学ぶ際には、まず基礎をしっかりと理解し、各概念を明確にしておくことが重要です。本記事では、Java学習者やエンジニアに役立つ実践的なヒントとコツを8つご紹介します。 1. 配列(Array)とArrayListの違いを正確に理解する データ構造は、データの保存方法、アクセス方法、操作方法、そしてユーザーへの表示方法を決定づけるため、非常に重要な役割を果たします。配列とArrayListは似ているようで特性が大きく異なるため、それぞれの違いを明確に把握しておきましょう。 2. 文字列(String)を慎重に扱う 文字列の基本的な概念を理解することはもちろん、単一の文字列
-
JavaのLinkedHashMapとLinkedHashSetの特徴と使い方を徹底解説
Javaのコレクションフレームワークには、要素の順序を保持しながら高速な操作を実現できるクラスがいくつか用意されています。本記事では、その代表格であるLinkedHashMapとLinkedHashSetについて、それぞれの特徴と具体的なコード例を交えてわかりやすく解説します。LinkedHashMapとはLinkedHashMapは、Mapインターフェースをハッシュテーブルとリンクリストの組み合わせで実装したクラスです。最大の特徴は、要素を挿入した順序(挿入順)どおりに反復処理できる点にあります。通常のHashMapでは格納順序が保証されませんが、LinkedHashMapを使えば予測可能な
-
Javaで単一・複数の変数を出力する方法をわかりやすく解説
Javaで変数の値をコンソールに出力するには、System.out.println() や System.out.printf() といった標準出力メソッドを使用します。単一の変数だけでなく、複数の変数を一度に出力することも可能です。ここでは、その具体的な方法をサンプルコードとともに解説します。 サンプルコード public class Demo { public static void main(String args[]){ String name_1 = Hello; String name_2 = World; System.ou