【Java】意外と知らないNullPointerExceptionを出さないテクニック!
mokabuu
mokabuu.com
参考:【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を読んでいたら大きな発見があったので
コードを書き直しました。
[adsense]
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進数を作成するときは
自分で書いちゃだめですよ!!!