• ベストアンサー

ループの終了条件

ループから抜ける終了条件として [CTRL]+[z]を入力するようにしたいんですが 判定はどうしたら良いんですか? for(int i=0;i<50;i++){    System.out.print(i+1+"つ目を入力してください。===>");    String line=reader.readLine();    x[i] =line.charAt(0);       if(!!!!!){         break;       } } if(!!!!!)のところをどのように書いたら良いか教えてください。 お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

使ってる OS は?

yakkuru123
質問者

お礼

if ((line=reader.readLine()) == null) でいけました ありがとうございました

yakkuru123
質問者

補足

vistaです

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

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

  • 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(); // ランダムで生成した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; } } } }

    • ベストアンサー
    • Java
  • 永久ループ・・・

    どうも、最近C言語の勉強を始めた超初心者です。 int main(void) { int i; for(;;){ printf("桁数を入力してください。:"); scanf("%d",&i); if(i<=12) break; else puts("もう一度入力してください。"); continue; } return(0); } 上のソース、i<=12の条件を満たさなければループを繰り返すというプログラムなんですけど、数値を入力した場合は思った通りに挙動するのですが、文字や文字列を入力すると永久ループになります。scanf関数で返値を受け取って判定するなどいろいろ試したのですが、どうしても永久ループになってしまいます。 どうしてか教えてください。お願いします。

  • Java言語のプログラムをC言語にする場合

    次の2つのJava言語のプログラムをC言語にしたいのですが、C言語でプログラムを書いたことがありません。C言語にする場合はどう書けばいいのでしょうか? import java.io.*; public class Sort { public static void main(String[] args) { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); try{ System.out.println("整数値を入力してください"); String line = reader.readLine(); int a = Integer.parseInt(line); String line2 = reader.readLine(); int b = Integer.parseInt(line2); String line3 = reader.readLine(); int c = Integer.parseInt(line3); String line4 = reader.readLine(); int d = Integer.parseInt(line4); int[] data = {a, b, c, d}; for (int i = 0; i< data.length - 1 ; i++) { for (int j = i + 1; j< data.length; j++) { if(data[i] > data[j]) { int e = data[i]; data[i] = data[j]; data[j] = e; } } } System.out.println("昇順に並べ替えると、"); for (int i = 0; i< data.length; i++) { System.out.print(data[i] + " "); } System.out.println("です。"); } catch (IOException e){ System.out.println(e); } catch (NumberFormatException e) { System.out.println("数式の形式が正しくありません。"); } } } import java.io.*; public class Yakusu { public static void main(String[] args) { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); try{ System.out.println("2つの整数値を入力してください"); System.out.print("整数A : "); String line = reader.readLine(); int a = Integer.parseInt(line); System.out.print("整数B : "); String line2 = reader.readLine(); int b = Integer.parseInt(line2); if(a%b == 0){ System.out.println("BはAの約数です"); } else { System.out.println("BはAの約数ではありません"); } } catch (IOException e){ System.out.println(e); } catch (NumberFormatException e) { System.out.println("数式の形式が正しくありません。"); } } }

  • [至急!]Javaのプログラミング

    野球のBSOカウンタを作ろうとしているのですが、エラーが出ないもののうまく動きません。動作としてはsと入力したらSのカウンタに「〇」を表示、といったことをO(アウト)カウンタが3つになるまで行うプログラムなのですが、入力と出力の両方をうまくループすることが出来ません。分かる方がいたら教えてください。私が作ったものは下のものです。これを改良して作っていただけると助かります。 import java.io.*; public class test1 { public static void main(String[] args) throws IOException { BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); //String str=br.readLine(); //char hantei=str.charAt(0); int sc=0,bc=0,oc=0; while(oc<3){ String str=br.readLine(); char hantei=str.charAt(0); if(hantei=='s') { sc=sc+1; if(sc==3) oc=oc+1; sc=0; bc=0; } else if(hantei=='b') { bc=bc+1; if(bc==4) sc=0; bc=0; } else if(hantei=='o') { oc=oc+1; sc=0; bc=0; } else { System.out.println("入力が違います。"); } } System.out.print("B "); for(int i=0;i<=bc;i++){ System.out.print("〇"); } System.out.println(""); System.out.print("S "); for(int i=0;i<=sc;i++){ System.out.print("〇"); } System.out.println(""); System.out.print("O "); for(int i=0;i<=oc;i++){ System.out.print("〇"); } System.out.println(""); } } 出力例 s(入力) B S 〇 O s(入力) B S 〇〇 O s(入力) B S O 〇 これをアウトカウントが3つになるまで行うプログラムです。

    • ベストアンサー
    • Java
  • ループのとめ方

    入力した文字を小文字から大文字に 変えるプログラムで、コントロール+z で、ループを抜け出すようにしたい。 連続して2度コントロール+zを 押さないととまらないのですが、 どのようにすれば、1度コントロール+zを 押すだけで、終了できるのでしょうか? 何かアドバイスをお願いします。 ======================================== #include <stdio.h> #include <ctype.h> #include <string.h> int main(void) { char moji[50],check=0; int i,len; while(check !=EOF){  printf("Enter : ");  check = scanf("%s",moji);  len=strlen(moji);  if(check!=EOF){   printf("Display : ");   for(i=0;i<len;i++){     printf("%c",toupper(moji[i]));   } } } return 0;

  • Javaのforとwhileの使い方

    プログラミングをはじめたばかりのものです。 「何回か数字を入力してその合計が100になったら終了 するプログラム(100になるまで入力待ちを繰り返すプログラム」 というのを作っているのですが、 以下のようにするとエラーが出ました。 public class upto100 { public static void main(String[] args) { for (int i=0; i <= 100; i=i+j) { String line = reader.readLine(); int j = Integer.parseInt(line); System.out.println("まだ100じゃない"); } System.out.println("もう100"); } } 入力待ちにするString line~~と int j~~~の場所が間違っているのだろうと 思うのですが、どのようにすればよろしいのでしょうか?

    • ベストアンサー
    • Java
  • enterでループ終了

    #include <stdio.h> int main(void) { char str[255]; int i, len; while (1){ printf("文字列を入力してください:"); if (fgets(str, sizeof(str), stdin) == NULL) { break; } len = strlen(str); if (len > 0 && str[len - 1] == '\n') str[len - 1] = '\0'; if (str[0] == '\0') break; enterで終了するプログラムの例ですが、 if (fgets(str, sizeof(str), stdin) == NULL) のNULLはどういった理由で必要ですか? また、 if (len > 0 && str[len - 1] == '\n') str[len - 1] = '\0'; を消して、 if (str[0] == '\0') break; を、if (str[0] == '\n') break; と書き換えれば、終了すのではないですか?不適な理由がありますか?

  • [C#]順序通りに実行されない

    次のC#のプログラムについて質問です。 //ここから using System; class Myclass { double[] point; string[] name; int nMax; public double this[string str] { get { for (int i = 0; i < nMax; i++) { if (str == name[i]) return point[i]; } return -1.0; } set { for (int i = 0; i < nMax; i++) { if (str == name[i]) { point[i] = value; break; } } } } public Myclass(int n) { point = new double[n]; name = new string[n]; nMax = n; setname(); } void setname() { for(int i=0;i<nMax;i++) { Console.Write("生徒名[{0}] = ",i); name[i] = Console.ReadLine(); } } } class ch08ex02 { public static void Main() { Console.WriteLine( "まずはじめに生徒数と、全員の名前入力が必要です"); Console.Write("生徒数--- "); string strn = Console.ReadLine(); Myclass mc = new Myclass(int.Parse(strn)); string ans, strp; Console.WriteLine("X入力で終了"); while (true) { Console.Write("点数を入力したい生徒名--- "); if ((ans = Console.ReadLine()) == "X") break; Console.Write("点数--- "); strp = Console.ReadLine(); mc[ans] = double.Parse(strp); } Console.WriteLine(); Console.WriteLine("X入力で終了"); while (true) { Console.Write("点数を知りたい生徒名--- "); ans = Console.ReadLine(); if (ans == "X") break; Console.WriteLine("{0}くんの点数は{1}点です", ans, mc[ans]); } } } //ここまで これはプロパティを使って生徒の点数を配列に格納したり参照したりするプログラムですが、実行するとMain()の    Console.Write("生徒数--- "); string strn = Console.ReadLine(); Myclass mc = new Myclass(int.Parse(strn)); string ans, strp; Console.WriteLine("X入力で終了");    while (true) { Console.Write("点数を入力したい生徒名--- "); if ((ans = Console.ReadLine()) == "X") break; Console.Write("点数--- "); strp = Console.ReadLine(); mc[ans] = double.Parse(strp); } の部分が思い通りに動いてくれません。 まずコンソールに「生徒数--- 」と表示されConsole.ReadLine()で数字を受け取り、その数からMyclassのインスタンスを作成し、「X入力で終了」と表示した後whileループで生徒名と点数の入力を受け付けるはずです。 しかしこれを実行すると「X入力で終了」と表示する前にwhileループに入り、ループを抜けた後「X入力で終了」と表示されます。 つまり順番が逆になっているわけです。 なぜこうなるかわかりません。 誰か教えてください、お願いします。

  • 現在学校のjavaの課題電卓を作っています

    import java.io.*; class dentaku { public static void main(String[] args)throws IOException { BufferedReader r = new BufferedReader(new InputStreamReader(System.in)); System.out.print("式を入力"); String input = r.readLine(); String sum[] = new String[input.length()]; String number = ""; int s = 0; int goukei =0; char enzan = ' '; for(int i=0; i < input.length(); i++) { //System.out.print(str[i]); //文字列から1文字ずつ抽出 char num = input.charAt(i); if(i == input.length()-1) { sum[s] = number; } else { if(num == '+' || num == '-'|| num == '*'|| num == '/') { //配列sumに代入 sum[s] = number; s++; sum[s] = String.valueOf(num); s++; } else { //変数numberにnumを代入 number = number + num; } } } for(int j=0; j<sum.length; j++) { if(sum[j] == null) { break; } if(j == 0) { goukei = Integer.parseInt(sum[j]); } else { if(sum[j].equals("+") || sum[j].equals("-")|| sum[j].equals("*")|| sum[j].equals("/")) { enzan = sum[j].charAt(0); } else { switch(enzan) { case '+': goukei += Integer.parseInt(sum[j]); break; case '-': goukei -= Integer.parseInt(sum[j]); break; case '*': goukei *= Integer.parseInt(sum[j]); break; case '/': goukei /= Integer.parseInt(sum[j]); break; } } } } System.out.print(goukei); } } までできたのですが 実行し 実際に 1+1+1とうってみると答えが23になってしまいます。 どのようにしたらいいのでしょうか

    • ベストアンサー
    • Java