無限ループからの脱出

このQ&Aのポイント
  • コンソールに入力した数字をそのまま出力するプログラムです。
  • 入力した文字列が「end」だと無限ループを脱出する予定で作られています。
  • しかし、正常にループを脱出しない問題が発生しています。
回答を見る
  • ベストアンサー

無限ループからの脱出

import java.io.*; public class Test { public static void main(String[] args) throws IOException { String ss; int idt; while(true) { try { BufferedReader f = new BufferedReader(new InputStreamReader(System.in)); System.out.print("数字を入力してください : "); ss = f.readLine(); if(ss == "end") break; idt = Integer.parseInt(ss); System.out.println("あなたの入力した数字は " + idt + " です。"); System.out.println(); } catch(NumberFormatException e) { System.out.println("error : " + e); System.out.println(); } } } } 上記は、コンソールに入力した数字をそのまま出力し、数字以外を入力すると例外処理するプログラムです。 見ていただくと分かるとおり、途中入力したものが「end」だとbreakして無限ループを脱出するということを予定して作りました。 しかしbreakしてくれません。if文の中に処理が移っていないのです。なぜでしょうか? 宜しくお願いします。

  • Java
  • 回答数2
  • ありがとう数3

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

  • ベストアンサー
  • asahina02
  • ベストアンサー率47% (95/202)
回答No.1

入力文字列の比較方法が間違っています。 文字列の場合は equals() を使用して比較しましょう。 if(ss.equals( "end" )) break;

kamakuragengorou
質問者

お礼

文字列比較の場合、equalsというメソッドがありましたね! ありがとうございます。

その他の回答 (1)

  • masusun
  • ベストアンサー率15% (44/285)
回答No.2

> if(ss == "end") break; これが間違い。 if(ss.equals( "end" )) break; ただ、ソースべた貼りで人にデバック頼むのはやめようよ。。。

kamakuragengorou
質問者

お礼

ありがとうございます。

関連するQ&A

  • Javaの例外(tryとcatch)について

    Java初心者の大学生です。授業で、 「以下のプログラミングに書き足しをして、例外が3度繰り返されたら プログラムを終了するようにせよ。」 という課題が出ました。 以下のプログラムは… package kadai; import java.io.*; public class kadai { public static void main(String[] args)throws IOException { String ss; int idt,i; BufferedReader kbd = new BufferedReader(new InputStreamReader(System.in)); for(;;){ System.out.print("整数入力: " ); ss= kbd.readLine(); try{ idt= Integer.parseInt(ss);        System.out.println("数値= " + idt); } catch(NumberFormatException e){    System.out.println("入力誤りです" ); continue; } break; } } } というものです。(見づらくて申し訳ありません!) 私はcatchの部分をfor文で3度繰り返しさせて、終了できるようにしようと思い、変数iを定義して、 for(i=0;i<3;i++){ catch(NumberFormatException e){ System.out.println("入力誤りです" ); } } という文を打ち込みました。しかし、エラーばかり出てきてしまい、 一向に解決できません。どこにどうやってfor文を打ち込めば解決 できるでしょうか?また、何故私が考えた文ではエラーが出てしまう のでしょうか? 基礎的な質問で申し訳ありませんが、ご指導をお願い致します。 もし参考になりそうなHP等がありましたら、そちらも教えて いただきたいです。

    • ベストアンサー
    • Java
  • java ファイル操作

    現在javaでファイル操作しファイルの文字列を検索したりファイルに文字列を追加したりする ものを作成しています。 現状のコードはこのような感じです。 class addresskensaku{ public static void main(String[] args)throws IOException{ System.out.println("数字を選択\n1.名前で検索\n2.年齢で検索\n3.出身地で検索\n4.追加"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); char res = str.charAt(0); //1が選択された場合 if(res == '1' || res == '1'){ System.out.println("名前を入力してください。"); BufferedReader fn = new BufferedReader(new InputStreamReader(System.in)); String str1 = fn.readLine(); try{ FileReader freader = new FileReader("addressdata.txt"); BufferedReader breader = new BufferedReader(freader); String tmp = null; //検索 System.out.println("検索結果 :"); while((tmp=breader.readLine())!=null){ String[] words = tmp.split(","); //部分一致 if(words[0].indexOf(str1) != -1){ System.out.println(tmp); } } breader.close(); }catch(IOException e){ System.out.println("e"); } } //2が入力された場合 if(res == '2' || res == '2'){ System.out.println("年齢を入力してください。"); BufferedReader o = new BufferedReader(new InputStreamReader(System.in)); String ol = o.readLine(); try{ FileReader freader = new FileReader("addressdata.txt"); BufferedReader breader = new BufferedReader(freader); String tmp =null; //検索 while((tmp=breader.readLine())!=null){ String[] words = tmp.split(","); //完全一致 if (ol.equals(words[1])){ // System.out.println("検索結果:"); System.out.println(tmp); } } breader.close(); }catch(IOException e){ System.out.println("e"); } } //3が入力された場合 if(res == '3' || res == '3'){ System.out.println("出身地を入力してください。"); BufferedReader p = new BufferedReader(new InputStreamReader(System.in)); String pref = p.readLine(); try{ FileReader freader = new FileReader("addressdata.txt"); BufferedReader breader = new BufferedReader(freader); String tmp = null; //検索 while((tmp=breader.readLine())!=null){ String[] words = tmp.split(","); //部分一致 if(words[2].indexOf(pref) != -1){ System.out.println(tmp); } } breader.close(); }catch(IOException e){ System.out.println("e"); } } //4が入力された場合 追加 if(res == '4' || res == '4'){ //氏名入力 System.out.println("氏名を入力してください。"); BufferedReader n = new BufferedReader(new InputStreamReader(System.in)); String str2 = n.readLine(); //年齢入力 System.out.println("年齢を入力してください。"); BufferedReader o = new BufferedReader(new InputStreamReader(System.in)); String str3 = o.readLine(); //住所入力 System.out.println("住所を入力してください。"); BufferedReader a = new BufferedReader(new InputStreamReader(System.in)); String str4 = a.readLine(); //ファイルに書き込み try{ File file = new File("addressdata.txt"); FileWriter filewriter = new FileWriter(file, true); filewriter.write(str2+","+str3+","+str4+"\r\n"); filewriter.close(); }catch(IOException e){ System.out.println("e"); } } } } これをカプセル化し 各機能ごとにメソッドを分けて作ろうかなと思っています。 結果の出力はmainでやる予定です。

  • ifを使った判断プログラムです(おそらく簡単)

    以下のプログラムをコンパイルしたいのですが、8行目のシンボル:変数readerが見つからないと表示されます。 いくら見直しても改善方法がわからないので、質問しました。 おそらく簡単な問題であると思うのですがわからなくて・・・ それともreader.readLine();がコマンドプロントンでは反応できないものなのでしょうか。 教えてください。よろしくお願いします。 import java.io.*; public class Kasa1{ public static void main(String[] args){ BufferedReader br = new BufferedReader(new InputStreamReader(System.in),1); try{ System.out.println("降水確率を入力してください。"); String line = reader.readLine(); int n = Integer.parseInt(line); System.out.println("降水確率は" + n + "%です。"); if(n >= 50){ System.out.println("傘を忘れずにね。"); } else { System.out.println("傘はいりません。"); } System.out.println("いってらっしゃい。"); } catch(IOException e){ System.out.println(e); } catch(NumberFormatException e){ System.out.println("数字の形式が正しくありません。"); } } }

    • ベストアンサー
    • Java
  • 10進数を2進数に変換するプログラムについて

    キーボードから入力された10進数を2進数に変換するプログラムで入力される数は1~1000の値までが入力できる数です。 配列を使うらしいのですがどのようにアルゴリズムをどのように表したらいいのかわかりません! import java.io.*; class Question7_3{ public static void main(String[] args){ BufferedReader r = new BufferedReader(new InputStreamReader(System.in)); try{ System.out.print("数字を入力してください:"); } System.out.print("入力されたデータを2進数に変換すると:"); }catch(NumberFormatException e){ System.out.println("整数以外が入力されました。"); }catch(IOException e){ System.out.println("例外発生:" + e); } } }

  • 何故ループがしてくれないんですか?

    口でいうよりもソースコード載せた方が早いので載せます import java.util.Scanner; class StudentsList2 { public static void main(String[] args){ System.out.println("学生番号(23,45,78,51,9)を入力してください>"); Scanner sc=new Scanner(System.in); StList list=new StList(); list.ID=new int[]{23,45,78,51,9}; list.name=new String[]{"荒川","神田","吉田","渡辺","木村"}; int key=Integer.parseInt(sc.next()); list.getName(key); } static class StList{ public String[] name; public int[] ID; void getName(int key){ for(int A=0; A<ID.length; A++){ if(key==ID[0]){ System.out.println(name[0]);break; }else{ if(key==ID[1]){ System.out.println(name[1]);break; }else{ if(key==ID[2]){ System.out.println(name[2]);break; }else{ if(key==ID[3]){ System.out.println(name[3]);break; }else{ if(key==ID[4]){ System.out.println(name[4]);break; } } } } } } } } } 例外処理もなくエラーもかえって来ないんですが一回しか学生名が出力しないです。 何故でしょうか? nameに入っている名前を出力しないといけないですよね。 「ここがおかしいよ」とかのアドバイスをお願いします

    • ベストアンサー
    • Java
  • 構文がエラーになる

    Exception in thread"main"java.lang.NoClassDefFoundError という文章でエラーになります。 import java.io.*; class Sample34 { public static void main (String args[])throws IOException { System.out.println("整数を入力してください。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int res = Integer.parseInt(str); if(res == 1){ System.out.println("1が入力されました。"); } else if(res == 2){ System.out.println("2が入力されました。"); } else{ System.out.println("1か2を入力してください。"); } } }

  • コマンドプロンプトでひらがなの入力が出来ません。

    普段グーグル日本語入力を使っています。 OS XPsp2 import java.io.*; class Mojiretuate { public static void main(String[] args) throws IOException { String str = "こんにちは"; String str2; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("文字列当てゲームです。"); System.out.println("答えは何かのあいさつです。"); for(;;){ System.out.println("\n入力"); str2 = br.readLine(); System.out.println("入力文字列の長さ:" + str2.length()); if(str.equals(str2)){ System.out.println("正解です"); break; } else if(str2.length() > str.length()){ System.out.println("長すぎます。"); } else if(str2.length() == str.length()){ System.out.println("長さはあっています。"); } else{ System.out.println("短すぎます。"); } } System.out.println("終了"); } }

    • ベストアンサー
    • Java
  • JAVAの初心者です.

    import java.io.*; class Sample3 { public static void main(String args[])throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int meny; int max = 0; int kingaku[]; kingaku = new int[5]; char ss[][]; ss = new char[5][80]; do{ String hako = br.readLine(); meny = Integer.parseInt(hako); System.out.println("1:入力とその長さ"); System.out.println("2:データ入力"); System.out.println("3:データ表示"); System.out.println("4:おしまい"); switch(meny){ case 1: System.out.println("文字を入力してください。"); String input = br.readLine(); System.out.println(input + "は" + input.length + "文字です。"); break; case 2: if (max == 0){ System.out.printin("登録をしてからお選びください。"); }else{ System.out.println("名前を入力してください。"); String ss[max] = br.readLine(); System.out.println("金額を入力してください。"); String kingaku[max] = br.readLine(); System.out.println(ss[max] + "さんで" + kingaku[max] + "を登録します。"); max++; } break; case 3: System.out.println("現在登録人数は" + max + "人です。"); for(int aa = 0;aa<max;aa++){ System.out.println(name[max] + kingaku[max]); } break; } }while(meny != 4); } } 上記のソースなのですが、コンパイルで今のところ2つエラーが出てしまうのです。 String ss[max] = br.readLine(); String kingaku[max] = br.readLine(); の所がエラーと表示されます。 javaは入力した文字を表示するだけでしたら    = Integer.paruseint()する必要ないですよね?? 初心者ならではの質問でごめんなさい。 ご教授宜しくお願いいたします。

    • ベストアンサー
    • Java
  • 2進数変換について教えてくださ。

    public class Class1 { public static void main (String[] args) throws Exception { System.out.println("任意の数値を入力してください:"); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in),1); try{ String line=reader.readLine(); int n = Integer.parseInt(line); for (int m=n ; m>0; m/=2) { int r =m % 2; System.out.print(r); } System.out.println("\n逆から見ると"+n+"の2進数になっています。"); System.in.read(); } catch (IOException e) { System.err.println("Error Message:"+e); System.in.read(); } catch (NumberFormatException e){ System.out.println("数字ではありません"); System.in.read(); } } } 上のプログラムを実行して例えば8という数字を入力するとすると、 任意の数値を入力してください。 8 0001 逆から見ると8の2進数になってます。 というような感じになるのですが、逆から見ないでも2進数になるように (0001)を(1000)のような感じで数値を逆に表示させるにはどのようにすればいいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • フローチャートが作れず、困っています

    下のjavaソースコードのフローチャートを作りたいのですがわかりません。誰か教えてください。 import java.io.*; public class Sosuu { public static void main(String[] args) throws IOException { BufferedReader buf = new BufferedReader(new InputStreamReader(System.in)); System.out.println("いくつまでの素数を表示するか入力してください"); try{ Prime prm = new Prime(Integer.parseInt(buf.readLine())); prm.calc(); }catch(NumberFormatException e){ System.out.println("数字を入力してください"); } } } class Prime { int endNum; public Prime(int endNum){ this.endNum = endNum; } public void calc(){ if(endNum <= 2){ System.out.println("2以上の数値を入力してください"); return; } for(int i = 2; i <= endNum; i++){ for(int k = 2; k <= i; k++){ if(k == i) System.out.println(Integer.toString(i)); else if((i % k) == 0) break; } } } }