/*
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 + "です。");
}
}

このQ&Aに関連する最新のQ&A

A 回答 (2件)

int lenb = Integer.parseInt(line);



↑はint len = Integer.parseInt(line);の間違えです。
(無理やりコンパイルエラー解消するためにいじってたソース
をコピペみす)

この回答への補足

下のほうに、もとのプログラムを載せましたので、ご確認ください

補足日時:2009/05/27 17:39
    • good
    • 0

まてまてまて、コンパイルできないでしょうこれ。



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;
}
}
}
}

補足日時:2009/05/27 17:37
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング