• ベストアンサー

標準入力をするメソッドを作り例外処理をそのメソッド内で行います

以下のソースでエラーが発生します return文は書いているのですが エラー内容は 「return 文が指定されていません」 と出ます。 return文はどこに置けばいいのでしょうか。 よろしくお願いします。 public static int getStdin(){  try{   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));   return (Integer.parseInt(br.readLine()));  }catch(IOException e){   System.out.println("標準入出力でのエラー");  }catch(NumberFormatException e){   System.out.println("不正な入力が行われました");  }finally{   System.out.println("例外処理が無事終了");  } }

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

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

  • ベストアンサー
  • osumitan
  • ベストアンサー率33% (102/307)
回答No.1

例外をcatchした場合にreturnが実行されないからです。 たとえば、エラーなら-1を返すとか決めて、 returnを記述する必要があります。

その他の回答 (1)

  • jch
  • ベストアンサー率38% (7/18)
回答No.2

public static int getStdin(){ boolean bret = false; int ret = 0; try{ boolean ret = false; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); ret = Integer.parseInt(br.readLine()); bret = true; }catch(IOException e){ System.out.println("標準入出力でのエラー"); }catch(NumberFormatException e){ System.out.println("不正な入力が行われました"); }finally{ System.out.println("例外処理が無事終了"); if(bret) return ret; else return -1; }

関連するQ&A

  • 例外処理throws

    例外処理ではthrowsかtry~catchを使いますよね。 で、ほとんどの場合はtry~catchを使うようで、ほとんどthrowsを使った例しかなく(まあ、throwsでの例外処理はプログラムが停止してしまうので推奨できないでしょうが)よくわから中区なってしまったので教えてほしいです class Input{ int set(String Toi)throws IOException{ System.out.println(Toi); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int a = Integer.parseInt(str); return a; } } のようにInputクラスを用いて外部からこれを使うために Input input = new Input(); x1 = input.set("x座標を入力"); とすると、「キャッチかスロー宣言をしろ」と怒られてしまいました。(コンパイルエラー) この場合どうすればいいでしょうか?

    • ベストアンサー
    • Java
  • 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
  • 例外処理の有無ついて

    import java.io.*; class A{ public static void main(String args[]){ System.out.println("文字を入力"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); String stru = str.toUpperCase(); System.out.println("大文字変換すると" + stru); } } このまま実行すると例外処理をしなくてはいけません。 とエラーになり、 public static void main(String args[])throws IOException{ とすれば正常に動作するのですが、 ではどういうときに例外処理は必要になってくるのでしょうか? なにか決まりがあるのでしょうか?

    • ベストアンサー
    • Java
  • 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で。わからないことがあります。

    import java.io.*; class Ireru { public static void main(String args[]) throws IOException{ System.out.println("あなたは何歳ですか?"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str1 = br.readLine(); int num =Integer.parseInt(str1); System.out.println("あなたは" + num +"歳です。"); } } ------------------------------- import java.io.*; class Ireru { public static void main(String args[]) throws IOException{ System.out.println("あなたは何歳ですか?"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str1 = br.readLine(); System.out.println("あなたは" + str1 +"歳です。"); } } なぜ下では悪いのですか?なぜnum をつかないといけないかがわかりません。正確には str1とnumの違いがわからなくて困っています。何が混乱の原因ですか?

    • ベストアンサー
    • 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); } } }

  • プログラムの組み合わせ方

    java初心者です。 2つのプログラムを組み合わせて1つのプログラムにしたいんですが、イマイチ分かりません。 このプログラムと、 import java.io.*; class Hello2 {  public static void main(String[] args) throws IOException {   System.out.println("名前を入力してください");   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));   String str = br.readLine();   System.out.println(str + "さん、こんにちは!");  } } このプログラムを、 import java.io.*; class Sanbai{  public static void main(String[] args) throws IOException {   System.out.println("好きな数を入力してください");   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));   String str = br.readLine();   int x;   x = Integer.parseInt(str);   System.out.println("あなたの入力した数:" + x);   System.out.println("その3倍の数:" + (x*3));  } } 組み合わせて1つのプログラムにするにはどうしたらいいですか?(>_<)

    • ベストアンサー
    • Java
  • メソッドの分割(リファクタリング?)

    指導教官からプログラム自体には問題はないが長すぎるのでメソッドを分割したほうがよいといわれました。以下に書きます(一部改変) try{ System.out.println("1. 2. どちらかを選択してください"); InputStreamReader reader = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(reader); String str = br.readLine(); int res = Integer.parseInt(str); if(!str.matches("[1-2]+")){ System.out.println("1、2から選択してください。"); continue;} if(res == 1){ System.out.println("キーワードを入力"); reader = new InputStreamReader(System.in); br = new BufferedReader(reader); str = br.readLine(); String sql = "SQL文"; ResultSet result = stmt.executeQuery(sql); //vectorにデータを格納 Vector vector1 = new Vector(); String[] array1 = new String[2]; while(result.next()){ array1[0] = result.getString("Res1"); array1[1] = result.getString("Res2"); vector1.addElement(array1); array1 = new String[2];} for(int i = 0;i < vector1.size();i++ ){ String Res1 = null;  String Res2 = null; String[] str1 = (String[])vector1.get(i); Res1 = str1[0]; Res2 = str1[1]; System.out.println("Res1,Res2は" + Res1 + "\t" + Res2);}} if(res == 2){1と同様なので省略・・}} catch(IOException e){ System.out.println(e + "例外が発生しました");} }} メソッドの分割のコツはあるのでしょうか?お勧めの本はございますか? 長くてすいません。

    • ベストアンサー
    • Java
  • 例外、null

    Cinクラスでは,BufferedReaderクラスで定義されたreadLineメソッドを使って, 一行ずつ入力を行っている。 class Cin { private static BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); public static String getLine() { String s = ""; try { s = in.readLine(); } catch (IOException e) { System.out.println("IO error!"); System.exit(1); } return s; } } このreadLineメソッドは,入力の終わりに到達するとnullを返し, それ以外の入力エラーがあるとIOException(Exceptionクラスのサブクラス)を投げる。 また入力の終わりに到達したことを,例外を用いて通知することも可能である。 readLineメソッドが,入力に関する状態を示すのに,「例外」、「nullを返す」 という二つの方法を使っているのにはどういう理由があるのか教えて下さい。

  • 例外処理

    import java.io.*; class janken { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int k=0,m=0,h=0,z=0; while(true){ System.out.print("あなたの手を入力して下さい。(1:グー、2:チョキ、3:パー、0:終了)?\n"); String str = br.readLine(); int a = Integer.parseInt(str); if(a == 0){ break; } z++; switch(a){ case 1: System.out.println("あなたの手はグーです。"); break; case 2: System.out.println("あなたの手はチョキです。"); break; case 3: System.out.println("あなたの手はパーです。"); break; default: System.out.println("1~3を入力してください。"); break; } { int ran = ((int)(Math.random()*3)+1); int b=ran; switch(b){ case 1: System.out.println("コンピュータの手はグーです。"); break; case 2: System.out.println("コンピュータの手はチョキです。"); break; case 3: System.out.println("コンピュータの手はパーです。"); break; } int c; c=a-b; if(c == 2){ System.out.println("あなたの勝ちです。"); k++; } else if(c== -1){ System.out.println("あなたの勝ちです。"); k++; } else if(c==0){ System.out.println("あいこです。"); h++; } else if(c==1){ System.out.println("コンピュータの勝ちです。"); m++; } else { System.out.println("コンピュータの勝ちです。"); m++; } } } System.out.println("じゃんけん終了。"); System.out.println("あなたは"+z+"試合中、"+k+"勝"+m+"敗"+h+"分けです"); } } このようにじゃんけんのプログラムを作りました。 しかし0~3以外の数字が入力されても、じゃんけんの勝敗を勝手に判定してしまいます・・・ try文でやってみたのですがいまいちうまくいきませんでした。 0~3を入力したら入力エラーと表示して、ふたたびユーザーの手を聞くようにしたいです。 どうすればよいかアドバイスお願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう