-
【Java入門】三角形パターンをコンソールに出力する方法
三角形パターンを表示するJavaプログラム 以下は、ユーザーが指定した行数に応じて、三角形のパターンをコンソールに出力するJavaプログラムです。 サンプルコード import java.util.*; public class Demo{ public static void main(String[] args){ Scanner my_scan = new Scanner(System.in); System.out.println(Enter the number of rows which needs to be printed);
-
最長共通部分列(LCS)を求めるJavaプログラムの解説
最長共通部分列(Longest Common Subsequence:LCS)とは、2つの文字列に共通して現れる部分列の中で最も長いものを指します。本記事では、動的計画法を用いてLCSの長さを効率的に求めるJavaプログラムを紹介します。サンプルコード以下は、最長共通部分列を求めるJavaプログラムの完全な例です。public class Demo{ int subseq(char[] a, char[] b, int a_len, int b_len){ int my_arr[][] = new int[a_len + 1][b_len + 1]; f
-
最長増加部分列(LIS)問題を解くJavaプログラム:動的計画法による実装
最長増加部分列(Longest Increasing Subsequence、略称LIS)とは、配列の中から元の順序を保ったまま要素を選び、値が厳密に増加していくような部分列のうち、最も長いものを指します。以下は、動的計画法を用いてLISの長さを求めるJavaプログラムです。サンプルコードpublic class Demo{ static int incre_subseq(int my_arr[], int arr_len){ int seq_arr[] = new int[arr_len]; &n
-
【Java】Xで割り切れる最大のK桁の数を求めるプログラムの書き方
以下は、指定した数Xで割り切れる最大のK桁の数を求めるJavaプログラムです。 サンプルコード import java.io.*; import java.lang.*; public class Demo{ public static int largest_k(int val_1, int val_2){ int i = 10; int MAX = (int)Math.pow(i, val_2) - 1; return (MAX - (M
-
【Java】ループを使わずに数列を出力するプログラム ~再帰呼び出しの活用~
はじめに通常、数列を出力するには for 文や while 文などのループ処理を使用します。しかし、Javaでは「再帰呼び出し(リカージョン)」を利用することで、ループ構文を一切使わずに同じ処理を実現できます。再帰とは、メソッドが自分自身を呼び出す仕組みであり、条件分岐と組み合わせることで繰り返し処理を代替できる強力なテクニックです。本記事では、0から15までの数値をループなしで出力するJavaプログラムを紹介します。サンプルコードpublic class Demo{ public static void main(String[] args){ int my_num
-
【Java入門】配列を左に回転させるプログラムの書き方と仕組みを解説
配列ローテーションとは配列のローテーション(回転)とは、配列内の要素を指定した位置数だけ前後にずらす操作のことです。本記事では、Javaを使って配列を左方向へ回転させるプログラムを紹介し、その仕組みをわかりやすく解説します。サンプルコード以下は、配列を左に回転させるJavaプログラムの完全なコード例です。public class Demo{ void rotate_left(int my_arr[], int d, int len){ d = d % len; int i, j, k,
-
Javaで四面体の体積を計算するプログラム|公式とサンプルコードを解説
四面体(Tetrahedron)とは、4つの三角形の面、6つの辺、4つの頂点を持つ多面体のことです。すべての面が正三角形である「正四面体」の場合、一辺の長ささえ分かれば体積を簡単に計算できます。 一辺の長さを a とするとき、正四面体の体積は次の公式で求められます。体積 = a³ ÷ (6√2) ここでは、この公式を使って四面体の体積を計算するJavaプログラムを紹介します。 サンプルコード import java.io.*; public class Demo { static double tetra_vol(int side) { double my_vol =
-
Javaで実装する再帰的バブルソートのプログラムと仕組みをわかりやすく解説
バブルソートは、隣り合う要素を比較して並べ替える最も基本的なソートアルゴリズムの一つです。通常はfor文などのループで実装されますが、再帰呼び出しを使って実現することもできます。ここでは、Javaで再帰的にバブルソートを実装する方法を、サンプルコードとともに詳しく解説します。 再帰的バブルソートのサンプルコード 以下が、再帰処理を用いたバブルソートのJavaプログラムです。 import java.util.Arrays; public class Demo{ static void bubble_sort(int my_arr[], int len_arr){
-
Javaで学ぶ再帰的挿入ソートの実装方法とコード解説
挿入ソートは、配列の要素を1つずつ取り出し、すでにソート済みの部分に適切な位置へ挿入していくシンプルな整列アルゴリズムです。本記事では、この挿入ソートを再帰(リカーシブ)を用いて実装するJavaプログラムを紹介します。 再帰的挿入ソートのサンプルコード 以下は、再帰呼び出しによって挿入ソートを実現するJavaプログラムの例です。 import java.util.Arrays; public class Demo{ static void recursive_ins_sort(int my_arr[], int arr_len){ if (arr_len <= 1
-
【Java】反転アルゴリズムを使って配列を回転させるプログラムの書き方
配列の回転を実現する手法のひとつに、「反転アルゴリズム(Reversal Algorithm)」と呼ばれる効率的なアプローチがあります。このアルゴリズムでは、配列を3回部分反転するだけで、目的の回転結果を得ることができます。具体的な手順は以下の通りです。回転させたい位置までの要素を反転する残りの要素を反転する配列全体を反転するこの方法なら、追加の配列を用意する必要がなく、時間計算量 O(n)、空間計算量 O(1) で処理できるのが大きな特徴です。サンプルプログラム以下は、反転アルゴリズムを使って配列を左回転させるJavaプログラムの例です。import java.io.*; public cl
-
【Java】ノームソートの実装方法をサンプルコード付きでわかりやすく解説
ノームソート(Gnome Sort)は、一度に1つの要素に注目し、その要素を本来あるべき位置へ移動させていくシンプルなソートアルゴリズムです。隣接する要素を比較しながら必要であれば交換し、条件が満たされるまで戻りながら整列を進めるのが特徴で、その動作が「地精(ノーム)が花鉢を並べ替える様子」に似ていることからこの名前が付けられました。ここでは、Javaでノームソートを実装する具体的な例を紹介します。サンプルコードimport java.util.Arrays; public class Demo{ static void gnome_sort(int my_arr[]
-
【Java入門】マージソートの実装方法をサンプルコードで解説
マージソートは、配列を半分に分割し、それぞれを整列させてから統合(マージ)することで全体を並べ替える、分割統治法に基づく代表的なソートアルゴリズムです。平均・最悪ともに計算量が O(n log n) であり、安定したソートとしても知られています。以下は、Javaでマージソートを実装したサンプルプログラムです。サンプルプログラム 1){ int mid = my_arr.length / 2; int[] left = new int[mid]; for(int i = 0; i < mid; i++){
-
Javaで実装する反復クイックソート(非再帰)プログラムの解説
クイックソートは通常、再帰呼び出しによって実装されますが、再帰を使わずに明示的なスタックを利用することでも実装できます。これを「反復クイックソート(Iterative Quick Sort)」と呼びます。以下は、そのJavaによる実装例です。 サンプルコード public class Demo{ void swap_vals(int arr[], int i, int j){ int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } int partition(int arr
-
Java仮想マシン(JVM)のスタック領域とは?仕組みと構造をわかりやすく解説
Java仮想マシン(JVM)におけるスタック領域は、スレッドの実行に不可欠なメモリ領域です。本記事では、JVMスタック領域の基本的な動作原理と、その内部構造について詳しく解説します。 JVMスタック領域の主なポイント スレッドが生成されると、JVMはそのスレッド専用のスタックを個別に作成します。 JVMがこのスタックに対して実行する操作は、「プッシュ(挿入)」と「ポップ(削除)」の2種類のみです。 スレッドが実行中のとき、そのスレッドに関連付けられたスタックは「ランタイムスタック」と呼ばれます。 スレッドによるメソッド呼び出し、中間計算結果、ローカル変数への代入、引数の受け渡しなどは、すべて
-
Javaの最大ヒープ(Max Heap)とは?PriorityQueueを使った実装方法をわかりやすく解説
最大ヒープ(Max Heap)とは 最大ヒープは完全二分木の一種で、すべての親ノードの値が子ノードの値以上であるという性質を持つデータ構造です。この特性により、木の根(ルート)には常に最大の要素が配置されるため、優先度付きキューの実装などに広く活用されています。 Javaでは、標準ライブラリの java.util.PriorityQueue クラスに Collections.reverseOrder() を組み合わせるだけで、最大ヒープを簡単に実現できます。通常の PriorityQueue は最小ヒープとして動作しますが、逆順のコンパレータを渡すことで、最大値が常に先頭に来る構造に変更でき
-
Javaのメモリリークとは?OutOfMemoryErrorが発生する仕組みとコード例で解説
Javaでは、ガベージコレクション(GC)によってメモリの解放(デストラクタに相当する処理)が自動的に行われます。しかし、コード内でオブジェクトへの参照が残っている場合、そのオブジェクトは解放対象とみなされず、メモリを回収することができません。このような状態が繰り返され、生成・参照されたオブジェクトがまったく使用されなくなると、それらは不要なデータでありながらメモリ上に残り続けます。これがいわゆる「メモリリーク」です。メモリ使用量が上限を超えると、プログラムは「OutOfMemoryError」というエラーをスローして強制終了します。そのため、不要になったオブジェクトへの参照はすべて削除し、J
-
【Java】Stream.concatを使って配列を新しいオブジェクト配列にマージする方法
Javaでは、Stream.concatメソッドとArrays.streamメソッドを組み合わせることで、複数の配列を簡単に1つの新しいオブジェクト配列へマージ(結合)できます。元の配列を変更せずに済むため、安全かつ簡潔に処理できるのが特徴です。以下は、Javaで2つの配列を新しいオブジェクト配列にマージするプログラムの例です。サンプルコードimport java.util.stream.Stream; import java.util.Arrays; import java.io.*; public class Demo{ public sta
-
Javaで2つのSetをマージする方法【サンプルコード付き】
Javaで2つのセット(Set)を1つにマージ(結合)する方法を解説します。ここでは、Stream APIとaddAllメソッドを組み合わせた基本的なアプローチを紹介し、あわせてより簡潔に書ける代替手段も取り上げます。 コード例 import java.util.stream.*; import java.util.*; import java.io.*; public class Demo { public static <T> Set<T> set_merge(Set<T> set_1, Set<T> set_2) {
-
Javaのランタイムスタックの仕組みを徹底解説!スタックフレームとスレッド終了の流れ
JavaのランタイムスタックとはJavaでは、プロセスやコード、スレッドが実行されるたびに「ランタイムスタック」が作成されます。これは、スレッドの実行中に行われる一連の操作を記録しておくための領域です。ランタイムスタック内の各エントリは「スタックフレーム」または「アクティベーションレコード」と呼ばれます。メソッドが呼び出されるたびに新しいスタックフレームがスタックに積まれ、そのメソッドの実行が完了すると、関連するデータはスタックから取り除かれます。すべてのメソッドの実行が完了すると、ランタイムスタックは空になり、メモリから解放されます。この時点でランタイムスタックは破棄され、スレッドも終了しま
-
Javaで空の関数(メソッド)を書く方法をわかりやすく解説
Javaでは、処理内容を持たない「空の関数(メソッド)」を簡単に定義できます。ここでは、その基本的な書き方と動作をサンプルコードとともに見ていきましょう。 サンプルコード import java.util.Vector; public class Demo{ public static void my_empty_fun(){ } public static void main(String[] args){ System.out.println(In the main function); my_empty_fun(); }