三十三日目はなんとなく出来てきたものの…

前回(id:regasuie:20051021)から随分と変更をかけてみた。try〜catchを使わなくてもそれなりになんとかなるもんだなぁと思いつつ、どうしようもできなくなったので今日はここまで。


今回は「.」「+」「-」「*」「" "」に関する禁則については全て解決できたと思う。

public class Checker {
//	正しく数字が入力されたことを判断するプログラム ver.0.007
	 public static boolean isNumber(String value)
	 {
	 //null値の判定処理
		 if (value == null
			   || value.length() == 0){
				 return true;
				 }
	 //変数の宣言
		 int chklng = value.length();
		 int dot1 = value.indexOf(".");
		 int dot2 = value.lastIndexOf(".");
		 int plas = value.lastIndexOf("+");
		 int minas = value.lastIndexOf("-");
		 int ast = value.indexOf("*");
		 int blank = value.indexOf(" ");
		 
	 //判定処理 
	 if(dot1 == 0 || dot2 == chklng -1)
	 {
		 return false;
	 }
	 
	 if(dot1 != dot2)
	 {
		 return false;
	 }
	 	 
	 if(plas > 0 || minas > 0)
	 {
		 return false;
	 }
	 
	 if(ast > -1)
	 {
		 return false;
	 }
	 
	 if(blank > -1)
	 {
		 return false;
	 }
	 return true;
	 }
}

ひたすらif文。とにかくif文。どっかに見落としありそうだけどとりあえずif文ばっかし使ってみた。

○結果
「あいうえお」を渡したところ、「true」が返されました。「false」が返されるようにしてほしいな。
「二十五」を渡したところ、「true」が返されました。「false」が返されるようにしてほしいな。
「123456」を渡したところ、「true」が返されました。「false」が返されるようにしてほしいな。
「−12.3456」を渡したところ、「true」が返されました。「false」が返されるようにしてほしいな。

どうにか2バイト文字(って表現でいいのかな?)の判定以外は成功に至ることができたっぽい…あれ?
ふと気になって、trueを返して欲しい文字列を少し変更してみた。

callChecker("123456", true);
        ↓
callChecker("123あ456", true);

これで動かしてみたところ、さっきと同じ結果を得た。てことは数字に関するところはほぼスルーされてる状態なんだな。今trueを得る条件はこんな感じかな?

  • 文字列の先頭ないし末尾が「.」ではない
  • 文字列に「.」が1つ以上存在しない
  • 文字列の先頭以降に「+」及び「-」が存在しない
  • 文字列に「*」が存在しない
  • 文字列に「" "」が存在しない

こっから先は見当もつかなくなったんだけど、勉強してないだけなんだろうか…気づいてないだけだったら悔しすぎる。