- 締切済み
Integerで変換する前に、0~9までの数字か判別したいです。
/* Integerで変換する前に、0~9までの数字かどうか判別したいです。 入力した文字が'0'~'9'までの文字かどうか判別し、 trueなら、int len = Integer.parseInt(line) で変換し、 lenが1~10までの数値かどうか判別し、trueならwhileを抜ける それ以外は、もう一度入力するプログラムなのですか、 うまく作れなくて困ってます。 コンパイルはできましたが、入力時に入力が入らない現象がおきました。Ctrl + C では戻れます。 ここのプログラムが間違っているのですが、 if (line.length() != 0 && '0' >= line.charAt(i) && line.charAt(i) <= '9') { 何かいい方法はありませんか? */ import java.io.*; public class Kazuate { public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); // 宣言 StringBuffer sb = new StringBuffer(); String line = null; // 桁数を入力 System.out.print("1~10までの値: "); while (true) { for (int i = 0; i < len; i++) { line = reader.readLine(); if (line.length() != 0 && '0' >= line.charAt(i) && line.charAt(i) <= '9'){ int len = Integer.parseInt(line); if (Integer.parseInt(line) >= 0 && Integer.parseInt(line) <= 10) { break; } } System.out.print("入力が間違っています。もう一度を入力して下さい。\n" + "桁数(1~10までの値): "); continue; } break; } } System.out.print("入力した値は" + len + "です。"); } }
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- ProKaseifu
- ベストアンサー率51% (98/192)
int lenb = Integer.parseInt(line); ↑はint len = Integer.parseInt(line);の間違えです。 (無理やりコンパイルエラー解消するためにいじってたソース をコピペみす)
- ProKaseifu
- ベストアンサー率51% (98/192)
まてまてまて、コンパイルできないでしょうこれ。 for (int i = 0; i < len; i++) { ↑lenなんて変数どこで宣言してるんでしょ。 それに各ブロックがちゃんと閉じていない。 そしておそらく永久ループ。 int lenb = Integer.parseInt(line); ↑なんに使うのか・・・そもそもforループ前にlenを定義した場合 ここで宣言することは不可能。 まずはコンパイルエラーがでないように修正しましょう。
補足
//すいません、実際はちゃんと宣言してあります、もとのプログラムは import java.io.*; public class Kazuate { public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); // 宣言 StringBuffer sb = new StringBuffer(); // ランダムで生成したlen桁の数値 → 文字列にしたもの String line = null; // 入力文字 int len = 0; // 答えの桁数 int n = 0; // ランダムの数値記憶用 int counter = 0; // 比較回数 int match = 0; // 位置と数字が一致した数 int hit = 0; // 数値が一致した数 int linecounter = 0; // 重複チェック用カウンタ // 桁数を入力 System.out.print("1~10桁の数値当てゲームです。\n" + "同じ数値は出ないようになっています。\n" + "何桁の数当てゲームをやりますか?\n" + "桁数(1~10までの値): "); while (true) { for (int i = 0; i < len; i++) { line = reader.readLine(); if (line.length() != 0 && '0' >= line.charAt(i) && line.charAt(i) <= '9'){ len = Integer.parseInt(line); if (Integer.parseInt(line) >= 0 && Integer.parseInt(line) <= 10) { break; } } System.out.print("入力が間違っています。\n" + "もう一度を入力して下さい。\n" + "桁数(1~10までの値): "); continue; } break; } // コンピュータが数を生成 do { n = (int)(Math.random() * 10); line = String.valueOf(n); if (sb.toString().indexOf(line) == -1 || sb.length() == 0) { sb.append(n); } } while (sb.length() != len); //デバッグ用に表示 System.out.println(sb.toString()); //数当て outer: while (true) { line = null; match = 0; hit = 0; counter++; System.out.print(counter + "回目の比較\n" + "答えは? :"); line = reader.readLine(); // 入力した桁数の間違いをチェック if (line.length() == 0 || line.length() != sb.length()) { System.out.println("桁数が違います。"); counter--; continue; } for (int i = 0; i < len; i++) { for (int j = i + 1; j < len; j++) { if (line.charAt(i) == line.charAt(j)) { System.out.println("同じ数値を入れないで下さい。"); counter--; continue outer; } } } // 入力した数値とコンピュータの生成した数値を比較 // matchとhitをカウント match = 0; hit = 0; for (int i = 0; i < len; i++) { if (sb.charAt(i) == line.charAt(i)) { match++; } for (int j = 0; j < len; j++) { if (sb.toString().charAt(i) == line.charAt(j)) { hit++; } } } // 判定・表示 if (sb.toString().equals(line) == false) { System.out.print("間違いです\n" + "match(位置と数字が一致した数) = " + match + "\n" + "hit(数値が一致した数) = " + hit + "\n"); } else { System.out.println("正解です。\n" + "答えは" + sb.toString() + "です\n" + "お疲れさまでした。"); break; } } } }
補足
下のほうに、もとのプログラムを載せましたので、ご確認ください