参考:【Java】2進数8進数10進数で回文
この記事で僕は2進数や8進数の数字をもとめるために
private static List<Integer> makeNumWithShinsu(int index, int shinsu) { List<Integer> numList = new ArrayList<Integer>(); while (index >= shinsu) { numList.add(index % shinsu); index = index / shinsu; } numList.add(index); return numList; }
わざわざArrayListまでつかってこんなことやっていました。
今思えば凄くメモリの無駄遣いです・・・。
先輩はこの問題をrubyを使って実装していたのですが
puts num.to_s(2) puts num.to_s(8)
これで2進数8進数をつくり出していてなんだそりゃ反則だろと思い
JavaのIntegerクラスのdocumentationを読んでいたら大きな発見があったので
コードを書き直しました。
public class Main { public static void main(String[] args) { int index = 1; while (true) { String binary = Integer.toBinaryString(index); String octal = Integer.toOctalString(index); String decimal = String.valueOf(index); if (isPalindrome(decimal)) { if (isPalindrome(octal)) { if (isPalindrome(binary)) { printer(index, binary, octal, decimal); break; } } } printer(index, binary, octal, decimal); index++; } } private static boolean isPalindrome(String givenNum) { boolean palindrome = false; int maxReadingValue = givenNum.length() / 2; for (int i = 0; i < maxReadingValue; i++) { char fromTop = givenNum.charAt(i); char fromBottom = givenNum.charAt(givenNum.length() - 1 - i); if (fromTop == fromBottom) { palindrome = true; } else { return false; } } return palindrome; } private static void printer(int index, String binary, String octal, String decimal) { System.out.println("index-------" + index); System.out.println("binary------" + binary); System.out.println("octal-------" + octal); System.out.println("decimal-----" + decimal); System.out.println(); } }
こんな便利なものがあったんですね!
でも自戒をこめまくってプログラミング童貞ほど
自分でなんでも実装したがって既にあるものを
上手く利用出来ていない気がするので
今回は凄く痛い目を見ました。
皆さんもJavaで2進数や8進数を作成するときは
自分で書いちゃだめですよ!!!
最後まで読んでいただきありがとうございます。もしこの記事を気に入って頂けたようであればシェアをお願い致します。非常に励みになります。