logo

Javaのマジックナンバー

プログラミングでは、 マジックナンバー コード内で直接使用される数値です。識別の目的で使用されます。このセクションでは、次のことについて説明します。 マジックナンバーとは何ですか そして Java プログラムを使用してマジック ナンバーを見つけるにはどうすればよいでしょうか。

プログラミングにおけるマジックナンバー

マジックナンバー コード内にハードコーディングされた数値 (場合によってはテキスト値) であり、後の段階で変更される可能性があります。それは恣意的であり、文脈も意味もありません。更新するのが大変です。例えば:

 const num = 74; //where 2 is hard-coded const number = num / 2; //it should be properly defined 

このような定数を使用すると、他の多くのファイル形式の間でファイルを区別するのに役立ちます。例えば:

  • PDF ファイルはマジック テキスト %PDF -> Hex (25 50 44 46) で始まります。
  • PNG ファイルはマジック テキスト %PNG -> Hex (25 50 4E 47) で始まります。

マジックナンバーを避けるべき理由は何ですか?

プログラミングではマジック ナンバーを使用すべきではありません。コードの理解と保守が困難になるアンチパターンにつながるからです。また、意図が隠蔽されるため、マジックナンバーの使用は避けるべきです。コードの変更も非常に難しくなります。

値を表すには、マジックナンバーを使用するのではなく、定数を使用することをお勧めします。これにより、コードの可読性が向上し、コードの変更が容易になります。

数学における魔法の数

数学では、その数字の合計が 再帰的に 一桁まで計算されます。一桁が 1 の場合、その数字は a と呼ばれます。 マジックナンバー 。それは非常によく似ています 幸せな数字

二分木と二分探索木

例えば、 325 は魔法の数です。その数字の合計 (3+2+5) が 10 で、その結果の (1+0) を再度合計すると、結果として 1 桁の (1) が得られます。したがって、325 という数字は魔法の数字です。

他の魔法の数字は次のとおりです。 1234、226、10、1、37、46、55、73など

数値がマジックナンバーである場合、その数値の可能な組み合わせもすべてマジックナンバーになることに注意してください。

たとえば、532、253、325、235、352、523 の場合、すべての数値の桁の合計は 10 になり、その結果 (1+0) を再度合計すると、1 桁、つまり 1 が得られます。 したがって、次のように言えます。魔法の数字とその組み合わせも魔法だということ。

上記のロジックを Java プログラムに実装して、指定された数値がマジックであるかどうかを確認してみましょう。

Java マジック ナンバー プログラム

MagicNumberExample1.java

 import java.util.Scanner; public class MagicNumberExample1 { public static void main(String args[]) { int n, remainder = 1, number, sum = 0; //creating a constructor of the Scanner class Scanner sc = new Scanner(System.in); System.out.print('Enter a number you want to check: '); //reading an integer form the user n = sc.nextInt(); //assigning the entered number in the variable num number = n; //outer while loop while (number > 9) //while(number > 0 || sum > 9) { //inner while loop while (number > 0) { //determines the remainder remainder = number % 10; sum = sum + remainder; //divides the number by 10 and removes the last digit of the number number = number / 10; } number = sum; sum = 0; } if (number == 1) { System.out.println('The given number is a magic number.'); } else { System.out.println('The given number is not a magic number.'); } } } 

出力 1:

 Enter a number you want to check: 325 The given number is a magic number. 

成果 2:

 Enter a number you want to check: 891 The given number is a magic number. 

マジックナンバーをチェックするための別のロジックを見てみましょう。

MagicNumberExample2.java

 import java.util.Scanner; public class MagicNumberExample2 { public static void main(String args[]) { Scanner scanner = new Scanner(System.in); System.out.print('Enter any number to check: '); //reading an iteger from the user int number = scanner.nextInt(); if(magicNumber(number)) System.out.println(number +' is a magic number.'); else System.out.println(number +' is not a magic number.'); } //user-defined method to check the number is magic or not public static boolean magicNumber(int number) { if( ((number - 1) % 9) == 0) return true; else return false; } } 

出力 1:

 Enter any number to check: 73 73 is a magic number. 

成果 2:

 Enter any number to check: 671 671 is not a magic number. 

マジックナンバー vs ハッピーナンバー

唯一の違いは、 魔法 数字と ハッピー 数値とは、マジックナンバーでは、シグナル桁、つまり 1 が得られるまで、数値のすべての桁を再帰的に合計することです。 ハッピー 数値の場合、1 桁の 1 が得られるまで、数値の 2 乗の合計を再帰的に計算します。このプロセスの結果、4 を含む数値が無限に循環する場合、その数値は と呼ばれます。 不幸な 番号。たとえば、次のことを確認する必要があります。 19 魔法とハッピーナンバーかどうか。

マジックナンバーの例 ハッピーナンバーの例
We have to check n = 19 1 + 9 = 10 1 + 0 = <strong>1</strong> 
We have to check n=19 1<sup>2</sup>+ 9<sup>2</sup> = 1 + 81 = 82 8<sup>2</sup>+ 2<sup>2</sup> = 64 + 4 = 68 6<sup>2</sup>+ 8<sup>2</sup> = 36 + 64 = 100 1<sup>2</sup>+ 0<sup>2</sup>+0<sup>2</sup> = 1 + 0 + 0 = <strong>1</strong> 

どちらの場合も、次のようになります。 1 。したがって、数値は 19 は魔法の数字であり、幸せな数字でもあります。