/*
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を見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q密度関数値f(y)から分布関数値F(y)を求めたい

密度関数値f(y)から分布関数値F(y)を求めたいのですが、わかりません。


f(y)=0.0104
になりました。

これから、
F(y)を求めたいのですが、ネットで調べてもどうも分かりません。

もしかして、f(y)=0.0104がおかしいのでしょうか?


どなたか教えてください><

Aベストアンサー

>f(y)=0.0104がおかしいのでしょうか?
その通りです。
密度関数の性質
∫(-∞→∞) f(y)dy=1
を満たさなくてはいけません。

f(y)=0.0104 だと
∫(-∞→∞) f(y)dy=∞
となって密度関数の性質を満たしませんね。

なお、分布関数F(y)と密度関数f(y)の間には
F(y)=∫(-∞→y)f(t)dt, F(∞)=1
という関係にあります。

Q&= ~0x0c; &= ~0x03; |=1;

JavaScriptで分からないコードがあるので教えてください。


■変数設定
var hoge = 0;


■変数格納
・キーを押した時の条件分岐
  ~なら hoge |= 1;
  または hoge |= 2;
  または hoge |= 3;
  または hoge |= 8;

・キーを離した時の条件分岐
  ~なら hoge &= ~0x0c;
  または hoge &= ~0x03;


■変数使用
・swithch文の条件分岐に利用
  (hoge&0x03)
  (hoge&0x0c)


■質問
・どういう意味でしょうか?
・文字コード?
・ビット演算?

Aベストアンサー

ビット演算してるわね

x = x + a

x += a
って書くことができるの

つまり
hoge |= 1

hoge = hoge | 1
のことね

~はNOTのこと

0x
はアスキーコードの16進数表記ねきっと

0x0c は改ページを意味していて
0x03 は文章の最後を意味している
と思われるわ
全文がないので推測だけど

QEXCELでA列記載の数値に対応するB~F列のデータをG列に返すには?

A1からA10のセルに列順を示す1から5までの数値がランダムに入っています。
B1からF10までのセルにデータ(文字列または数値)が入っています。
B列を1列目、以下C~F列を2~5列目として、G列にA列の数値に対応する列のデータを返したいのですが、数式を忘れてしまい困っています。初歩的なな質問で恐縮ですが至急どなたかご教示ください。
例えば下表のとおりA1の数値が1のときはB1を、4の時はE1をというようにです。

列順(1)  (2) (3) (4) (5) 
A  B   C   D   E   F  G
1 山田 田中 斉藤 鈴木 佐藤 山田
4 池田 木戸 松尾 山口 近藤 山口
5  …  …  …  …  …
2  …  …  …  …  …

Aベストアンサー

H1:=INDEX(B1:G1,,A1)
以下コピーということでしょうか

QInteger.parseInt()について public static void main(String[] args) { int a =

初歩的な質問だと思うのですが、、、

public class TestTree {

public static void main(String[] args) {

int a = Integer.parseInt(args[0]);
int b = Integer.parseInt(args[1]);

GreatTree myTree = new GreatTree(a, b);
myTree.makeTree();
myTree.makeGround();
}

}

というプログラムについて、Integer.parseInt()はどういう意味を持つのかがわかりません。ただ適当につけた名前だとは思えないです。教えてもらえたら幸いです。お願いします。

Aベストアンサー

> argsで入力されたものは例え数字でも文字列として扱われているから、それをintにしている。ということですよね?

引数として (String[] args) と設定されていますので、
おっしゃるとおり 引数 args[]配列に入っているものは、文字列です。

ポイントは、 「String[]」でしょうか。。

Qf(x)=0の近次解を求める数値計算について 

方程式 f(x)=0 
の近次解を求める数値計算に関する質問です。

代表的な計算方法には二分法、はさみうち法、ニュートン法、逐次代入法
などがあるようですが、

f(x)が以下のような関数であるときどのように近似解を求めたらよいでしょうか?

(1)  f(x)はどのxに対しても常にf(x)≧0となるような関数
(2)  f(x)=0 となるxはただ一つだけである
(2)  f(x)は非常に複雑な関数でf(x)を微分するのは困難

趣味で行っている3Dのモデリングに関するプログラム中に必要になった関数で、
このような関数に対し、二分法をベースにしたプログラムをつくってみましたが、
非常にだらだらとしたアルゴリズムでなっとくできません。
この関数に適したよいを御存知の方おられましたら御回答くださいませ。


またもしf(x)が 

(4)  f(x)= |2x+3| のように f(x)が0になるまでは単調減少で、0になってからは単調増加である

という条件がさらに加わった場合どうなるかについてもご解答いただけると助かります。

方程式 f(x)=0 
の近次解を求める数値計算に関する質問です。

代表的な計算方法には二分法、はさみうち法、ニュートン法、逐次代入法
などがあるようですが、

f(x)が以下のような関数であるときどのように近似解を求めたらよいでしょうか?

(1)  f(x)はどのxに対しても常にf(x)≧0となるような関数
(2)  f(x)=0 となるxはただ一つだけである
(2)  f(x)は非常に複雑な関数でf(x)を微分するのは困難

趣味で行っている3Dのモデリングに関するプログラム中に必要になった関数で、
このような...続きを読む

Aベストアンサー

>二分法をベースにしたプログラムをつくってみましたが、
>非常にだらだらとしたアルゴリズムでなっとくできません。
もし、それが極小値を求めるように二分法を改造したのであれば、
その方法で合っています。
少しでも計算時間を稼ぎたいなら、分割方法を工夫します。
「黄金分割法」を使います。
http://www.sra.co.jp/people/miyata/algorithm/goldsect.txt
※極小(大)値を求めるアルゴリズムで、f(x)が単峰性という以外には制約が無い。

ちなみに、
二分法、はさみうち法:X=A、X=Bで、F(X)の正負が入れ替わるように区間を
  設定する必要があるため、この方法は使えない。
ニュートン法:f(x)の微分が判らない場合、f'(x)=(f(x+dx)-f(x))/dx
  で無理やり計算できるから、ニュートン法が使えないわけではない。
  ただし、f(x)=0付近において、f'(x)もゼロに近いから、運が悪いと発散して解が求まらない場合があります。
逐次代入法:逐次代入法も、発散と隣り合わせです。
 ※ニュートン法も逐次代入法の一種。

>(4)  f(x)= |2x+3| のように f(x)が0になるまでは単調減少で、0になってからは単調増加である
(1)と(2)が成立すれば、必ず(4)が成立するのだけど....
この関数でやっかいな点は、微分が連続関数となっているかどうか。
微分が連続関数:極小値の位置で微分もゼロ。 したがって、f(x)をじかに求める場合、ニュートン法や逐次代入法では発散するかも。
ただし、微分のかわりに差分を使って、差分=0のxを求める方法はok。
微分が極小値の位置で不連続:差分=0となるxを求める方法がうまくいかない可能性がある。(2分法ならば無理やりですが解は求まる。)

それやこれやで、発散しないで解にたどり着ける可能性が高い方法は2つ。(計算速度を犠牲にします。)
1つはf(x)を直接使い、黄金分割法。
もう1つは、微分のかわりに差分を使い、2分法を用いて差分=0となるxを求める。
黄金分割法のほうが計算時間は短かそうです。

>二分法をベースにしたプログラムをつくってみましたが、
>非常にだらだらとしたアルゴリズムでなっとくできません。
もし、それが極小値を求めるように二分法を改造したのであれば、
その方法で合っています。
少しでも計算時間を稼ぎたいなら、分割方法を工夫します。
「黄金分割法」を使います。
http://www.sra.co.jp/people/miyata/algorithm/goldsect.txt
※極小(大)値を求めるアルゴリズムで、f(x)が単峰性という以外には制約が無い。

ちなみに、
二分法、はさみうち法:X=A、X=B...続きを読む

Qif(document.all && navigator.appVersion.indexOf('Mac')!=-1)returnの意味

よろしくお願いします。
JavaScriptの勉強をしているのですが、参考にしている書籍に以下の構文が出てきまして、それの意味が分からなくて悩んでいます。

//MacIE4,5バグ 回避
if(document.all && navigator.appVersion.indexOf('Mac')!=-1)return

//以降に記してあるとおり、OSがMacintoshだった場合に何らかの処置を行うプログラムなのは分かるのですが・・。
navigator.appVersion.indexOf('Mac')!=-1の部分は、「navigator.appVersion.indexOf('Mac')が1ではなかったら、Macユーザーであるということ、で、falseが返されるのでしょうか?
しかし、そもそもnavigatorオブジェクトはブラウザの種類のことではないのか?と混乱してしまっています。
また、document.allがどのような役割を果たしているのかも分かりません。なぜここでdocument.allが出てくるのでしょうか?

どなたか分かる方いらっしゃいましたら、ご教授宜しくお願いします。

よろしくお願いします。
JavaScriptの勉強をしているのですが、参考にしている書籍に以下の構文が出てきまして、それの意味が分からなくて悩んでいます。

//MacIE4,5バグ 回避
if(document.all && navigator.appVersion.indexOf('Mac')!=-1)return

//以降に記してあるとおり、OSがMacintoshだった場合に何らかの処置を行うプログラムなのは分かるのですが・・。
navigator.appVersion.indexOf('Mac')!=-1の部分は、「navigator.appVersion.indexOf('Mac')が1ではなかったら、Macユーザーであるということ...続きを読む

Aベストアンサー

「document.all」は昔はIEにだけ存在するオブジェクトだったのでIEであるかどうかの判定に使われました。

今ではOperaやNetscape等でもIEへの互換の為に存在するのでIEかどうかの判定に使われる事は減ってきています。
IEであるかどうかの判定ではなく、純粋にdocument.allが在る(使える)かという判定にはもちろん使用されますが。

「navigator.appVersion」は確かにブラウザの種類なんですが、実際にはOS名も含まれていたりすのでOSの判定にも使われたりします。

また、 != -1 というのは indexOf関数の結果が 0~なら文字列が見つかったという意味(真偽ではなく、見つかった位置を返す関数)になるのでこういう比較式を使用しています。
(1でなかったらMacユーザという解釈はちょっと違います。)

参考URL:http://www.openspc2.org/JavaScript/ref/

Q関数 ~に最も近く~よりも高い数値

関数苦手です。宜しくお願いします。
セルA1からF5まで適当な数値が入っており、B1からF5までの中でセルA1に最も近く、A1よりも高い数値を選ばせたいです。同様なA1に最も近く、A1よりも低い数値を選ぶ式をお願いします。

Aベストアンサー

Excelの基本の1つでしょうか。
Office検定みたいなやつの Excelエキスパートでも出題されます。
配列数式を使うことで実現できます。


>セルA1に最も近く、A1よりも高い数値を選ばせたいです
 数式バーに以下数式を入力し
 =MIN(IF(B1:F5>A1,B1:F5))
 Shift+Ctrl+Enter で配列数式として入力されます


>A1に最も近く、A1よりも低い数値を選ぶ式
 =MAX(IF(B1:F5<A1,B1:F5))
 を同様に配列数式として入力すればOKです。


あまりデータ数が多い場合は再計算で重くなるので
対象のセルが数百万個を超える場合はマクロ化させた方が良いかもしれません。

QA a = new A(){}; の構文の意味が分からない。

下記サイトのコードを読んでいて、

ResponseListener listener = new ResponseListener() {
//略
};

という書き方があったのですが、どういう意味になるのでしょうか?
インスタンスの作り方は単に

A a = new A();

だと思うのですが…。

http://www.snmp4j.org/doc/org/snmp4j/Snmp.html

Aベストアンサー

無名クラスと呼ばれるものよ。
私も良くやるわ。

ちなみに
A a = new A();
はできないわよ。
Aはインターフェースだからね。


上記の場合、正式に実装するなら、
ResponseListenerをimplementsした
MyResponseListener(仮名)を別途作成し、
それを
ResponseListener listener = new MyResponseListener();
とする必要があるわ。
でも、このMyResponseListenerは
今ここでしか使わない、他からまったく参照する必要のない
超ローカルなクラスなのよ。
このメソッドが終了すればGCにかけてもいいわけ。
そんな場合、わざわざクラスを1つ作る必要なくて
その場でちょちょいとやってしまうことができるのよ。
それが無名クラスっていう実装方法よ。

http://www.javaroad.jp/java_class15.htm

FileFilterやCompare、Runnableなんかで
他のクラスで再利用しないときは良くやるわ。

無名クラスと呼ばれるものよ。
私も良くやるわ。

ちなみに
A a = new A();
はできないわよ。
Aはインターフェースだからね。


上記の場合、正式に実装するなら、
ResponseListenerをimplementsした
MyResponseListener(仮名)を別途作成し、
それを
ResponseListener listener = new MyResponseListener();
とする必要があるわ。
でも、このMyResponseListenerは
今ここでしか使わない、他からまったく参照する必要のない
超ローカルなクラスなのよ。
このメソッドが終了すればGCにかけても...続きを読む

Qアセンブラ言語の数字を数値に変換するプログラム

LD GR3,GR1 ;GR3にGR1の数字を入れる。
AND GR3,=#000F ;数字を数値に変換

というアセンブラのプログラムがあったのですが、なぜGR3と16進数#000Fの論理積をとることで数字を数値に変換できるのでしょうか。

それと、ここでいう数字、数値の違いとは、数字の1はコンピュータ上では
49という数値に変換される(アスキー文字)という認識でよろしいでしょうか。

Aベストアンサー

2進数で表したときの下4桁だけが残ることになるからです。

アスキーコードでは、数字の「1」は、10進で49、16進で31です。
16進の31を2進数に直すと、0011 0001です。
これと16進のOF、つまり2進の0000 1111と論理積をとると、0000 0001となり、数値の1になります。

QJavaScriptで【window.google={kHL:"ja"};】という記述はどういう意味?

JavaScriptで【window.google={kHL:"ja"};】という記述はどういう意味?


YOUTUBE日本語版
http://jp.youtube.com/
のHTMLソースを見ていたら、



<script type="text/javascript">
    window.google={kHL:"ja"};
</script>


という記述を目にしたのですがこれはどういう意味あいというか目的のものなのでしょうか?


教えていただければ幸いです。

Aベストアンサー

これは、window.googleに'kHL'というキー(値は'ja')を持つ連想配列を
作成しています。

JavaScriptでの連想配列は

var 変数名 = {
キー : '値',
キー : '値',
:,
キー : '値'
};

というような感じで作成します。
キーはダブルクォートまたはシングルクォートで囲まなくても
いいようです。

参考URL:http://javascriptist.net/docs/basic_hash.html,http://www.openspc2.org/JavaScript/kouza2007/array/hash/index.html


人気Q&Aランキング

おすすめ情報