- 締切済み
値出力の条件
Java勉強中の初心者です。 入力した値を出力するときに 必ず、"-"(ハイフン)を入力しなければ ならないのですが、 条件に、"-"(ハイフン)がない場合か 複数入力された場合、は"もう一度お願いします。" と出力をしたいのですが、if文の 条件の記述がわかりません。 なにかいいメソッドがあるのでしょうか? よろしければご教授お願いいたします。 (ハイフンが1つ入力されたらそのまま 出力します。) import java.io.*; public class Test1 { public static void main(String args[]) throws IOException{ BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); String s = br.readLine(); //ここに条件 } }
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- ssr-y6
- ベストアンサー率71% (5/7)
まず、入力した文字列の最初から調べていって"-"が含まれていること ("-"の位置が0以上として検出できること)を確認する。 続けてその検出した位置の次の文字から調べていって"-"が含まれていないこと ("-"の位置が検出できない(-1)であること)を確認する。 これで、入力された文字列の中に"-"がひとつだけ含まれていることが確認できます。 以下がその例です。 import java.io.*; public class Test1 { public static void main(String args[]) throws IOException{ int i; String s; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); s = br.readLine(); for (;;) { if ((i = s.indexOf("-", 0)) >= 0) if (s.indexOf("-", i + 1) == -1) break; System.out.println("NG.. Retry, Please"); s = br.readLine(); }; System.out.println("OK.. Input String : " + s); br.close(); }; }
- nicepeace
- ベストアンサー率58% (7/12)
補足読みました。 sakusaker7さんのでも私のでも条件を満たした物は作れると思いますが 質問者様はどうおもいますか? こういう問題は答えが複数あると思いますので回答者様の分かりやすい方で自分で考えて作ると勉強になりますよ。 できれば私のを一度実行してみてください。 それともif文だけでやらないといけないのでしょうか? それならメソッドなりクラスを作ってその中で判定してboolean型を返してはどうでしょうか? import java.io.*; public class Test1 { public static void main(String args[]) throws IOException{ BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); String s = br.readLine(); if(check(s)){ System.out.println(s); }else{ System.out.println("もう一度入力してください"); } } private static boolean check(String s){ char[] c = s.toCharArray(); int count = 0; for(int i = 0;i<c.length;i++){ if(c[i] == '-'){ count++; } } if(count == 1){ return true; }else{ return false; } } }
- sakusaker7
- ベストアンサー率62% (800/1280)
検索対象を"文字列"にしたときのことを考えてindexOfを提案したのですが かえってわかりづらかったでしょうか? if (str.indexOf("-")) と書けないのはご想像の通りです。 indexOfは検索対象が見つからないときは -1 を返すので、 if (str.indexOf("-") != -1) { "-"が少なくとも一つある } という具合に判定できます。 でまあ探すのが必ず一文字でいいということなら、 import java.lang.*; public class SearchHyphen { static int count(String arg) { int rc = 0; for (int i=0; i<arg.length(); i++) { if (arg.charAt(i) == '-') rc++; } return rc; } public static void main(String args[]) { String[] strings = { "hello", "euc-jp", "this-string-has-many-hyphens"}; for (int i=0; i<strings.length; i++) { if (strings[i].indexOf("-") == -1) { System.out.println(strings[i] + "には'-'がありません"); } else { System.out.println(strings[i] + "には'-'があります"); } if (count(strings[i]) != 1) { System.out.println(strings[i] + "には'-'がないか2個以上あります"); } } } } こんな具合に数を数えるメソッドを作っておいて、 その数が0なのか1なのか2以上なのか(例では1かどうかしかみていませんが) で判定するのがいいんじゃないでしょうか。 細かくメソッドにしていくようにすると後々楽ですよ。
- nicepeace
- ベストアンサー率58% (7/12)
質問がよく分からないのですが。 こういう事でしょうか? import java.io.*; public class Test1 { public static void main(String args[]) throws IOException{ BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); //trueで何度も入力出来るように回す while(true){ System.out.println("文字を入力してください。endで終了です。"); String s = br.readLine(); //入力された値がendの場合はbreakで終了。 if(s.equals("end")){ System.out.println("終了します"); break; } //入力された値を一文字づつに分ける char[] c = s.toCharArray(); //「-」の数をカウント int count = 0; //入力文字数分回す for(int i = 0;i<c.length;i++){ //「-」がある場合はcountをインクリメント if(c[i] == '-'){ count++; } } //countが1の場合のみ表示、それ以外の場合はcontinueでまた最初から if(count == 1){ System.out.println("入力された値は:"+s); }else{ System.out.println("もう一度入力してください"); continue; } } } }
- sakusaker7
- ベストアンサー率62% (800/1280)
色々方法はありますけど、たとえば… 参考URLをみるとStringクラスが備えているメソッドがありますが その中に IndexOf というメソッドがあります。 これを使えば、まず "-" が存在するか否かは簡単に判定できますよね。 二つ以上あるかどうかは、二つ見つかれば条件として十分ですから、 一つ見つかった場合に、さらにその後ろにも"-"があるかどうかを調べれば 判定することができます。 まずはあるかないかの判定だけでもやってみてください。
補足
ご回答ありがとうございます。 IndexOfメソッドはint型を返す 記述してありました。 if(s.indexOf(" ")) //?? このif文の判定ではIndexOfメソッド はつかえるのでしょうか? ここがよくわかりません。 よろしくお願いします。
補足
ご回答ありがとうございます。 質問のの説明がわかりづらくご迷惑を おかけしました。 もう一度、簡単に記述します 。 入力条件の1つに必ず「ハイフン」を 記入しなければなりません。 入力した値を読み込んだ変数「s」に 「ハイフン」が複数、もしくは 無い場合は"もう一度お願いします。" と出力をさせたいのですが、if文での 判定の記述がわからなくて困っています。 よろしくお願いいたします。