Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaで2つの数値を交換(スワップ)するプログラムの書き方


この記事では、Javaで2つの数値を交換(スワップ)する方法について解説します。数値の交換は、一時変数(テンポラリ変数)を使うことで簡単に実現できます。

まずは、入力と出力のイメージを確認しましょう。

入力

たとえば、次のような2つの値が与えられたとします。

value_1 : 45
value_2 : 70

出力

交換後の出力は次のようになります。

value_1 : 70
value_2 : 45

アルゴリズム

一時変数を使ったスワップ処理の手順は以下の通りです。

Step 1- 処理を開始する
Step 2- 整数型変数 value_1、value_2、temp を宣言する
Step 3- 2つの値を読み込む
Step 4- value_1 の値を一時変数 temp に退避させる
Step 5- value_2 の値を value_1 に代入する
Step 6- temp の値を value_2 に代入する
Step 7- 交換後の2つの値を表示する
Step 8- 処理を終了する

なぜ一時変数が必要なのか?

いきなり「value_1 = value_2」と代入してしまうと、value_1 の元の値が失われてしまいます。そこで、あらかじめ value_1 の値を一時変数に退避させておくことで、値を失うことなく安全に交換できるのです。

例1:ユーザーからの入力を受け付ける場合

ここでは、Scanner クラスを使って、ユーザーがコンソールから入力した値を交換します。

import java.util.Scanner;
public class NumbersSwap{
   public static void main(String[] args){
      int value_1, value_2, my_temp;
      System.out.println("必要なパッケージがインポートされました");
      Scanner my_scan = new Scanner(System.in);
      System.out.println("Scannerオブジェクトが定義されました");
      System.out.println("1つ目の数値を入力してください");
      value_1 = my_scan.nextInt();
      System.out.println("2つ目の数値を入力してください");
      value_2 = my_scan.nextInt();
      System.out.println("----交換前----");
      System.out.println("1つ目の値は " + value_1 + " 、2つ目の値は " + value_2 + " です");
      my_temp = value_1;
      value_1 = value_2;
      value_2 = my_temp;
      System.out.println("----交換後----");
      System.out.println("1つ目の値は " + value_1 + " 、2つ目の値は " + value_2 + " です");
   }
}

出力

必要なパッケージがインポートされました
Scannerオブジェクトが定義されました
1つ目の数値を入力してください
112
2つ目の数値を入力してください
34
----交換前----
1つ目の値は 112 、2つ目の値は 34 です
----交換後----
1つ目の値は 34 、2つ目の値は 112 です

例2:値を直接指定する場合

次に、変数に直接値を設定してスワップを行うシンプルな例です。動作の流れを確認したい場合におすすめです。

public class NumbersSwap{
   public static void main(String[] args){
      int value_1, value_2, my_temp;
      System.out.println("必要なパッケージがインポートされました");
      value_1 = 45;
      value_2 = 70;
      System.out.println("----交換前----");
      System.out.println("1つ目の数値は " + value_1 + " 、2つ目の数値は " + value_2 + " です");
      my_temp = value_1;
      value_1 = value_2;
      value_2 = my_temp;
      System.out.println("----交換後----");
      System.out.println("1つ目の数値は " + value_1 + " 、2つ目の数値は " + value_2 + " です");
   }
}

出力

必要なパッケージがインポートされました
----交換前----
1つ目の数値は 45 、2つ目の数値は 70 です
----交換後----
1つ目の数値は 70 、2つ目の数値は 45 です

補足:一時変数を使わないスワップ方法

算術演算を利用すれば、一時変数なしでも2つの数値を交換することが可能です。

value_1 = value_1 + value_2;
value_2 = value_1 - value_2;
value_1 = value_1 - value_2;

ただし、この方法は大きな数値を扱う際にオーバーフローが発生する可能性があるため、実務では一時変数を使う方法が推奨されます。

まとめ

Javaで2つの数値を交換する基本は、「一時変数に退避 → 上書き → 復元」という3ステップです。このパターンは配列の要素入れ替えやソートアルゴリズムなど、さまざまな場面で応用される重要なテクニックなので、ぜひマスターしておきましょう。

  1. 【Java】2つ以上の数値や配列の最大公約数(GCD)を求めるプログラム

    最大公約数(GCD:Greatest Common Divisor)とは、複数の整数に共通する約数の中で最も大きいもののことです。この記事では、2つ以上の数値(配列の全要素)からGCDを求めるJavaプログラムを、サンプルコードと実行結果とあわせて解説します。サンプルコードpublic class Demo{ static int gcd_of_nums(int val_1, int val_2){ if (val_1 == 0) return val_2; return gcd_of_nums(val_2 % val_1, va

  2. Javaで2つの数の公約数の個数を求めるプログラムの書き方

    この記事では、Javaを使って2つの整数の公約数(共通の約数)の個数を求めるプログラムを紹介します。再帰処理によるユークリッドの互除法で最大公約数(GCD)を計算し、その約数を効率よく数える手法を、サンプルコードとともにわかりやすく解説します。 サンプルコード public class Demo{ static int find_gcd(int val_1, int val_2){ if (val_1 == 0) return val_2; return find_gcd(val_2%val_1,val_1); } sta