• 締切済み

値出力の条件

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(); //ここに条件 } }

みんなの回答

  • ssr-y6
  • ベストアンサー率71% (5/7)
回答No.5

 まず、入力した文字列の最初から調べていって"-"が含まれていること ("-"の位置が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)
回答No.4

補足読みました。 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; } } }

参考URL:
http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/index.html
全文を見る
すると、全ての回答が全文表示されます。
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

検索対象を"文字列"にしたときのことを考えて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)
回答No.2

質問がよく分からないのですが。 こういう事でしょうか? 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; } } } }

camp-fanks
質問者

補足

ご回答ありがとうございます。 質問のの説明がわかりづらくご迷惑を おかけしました。 もう一度、簡単に記述します 。 入力条件の1つに必ず「ハイフン」を 記入しなければなりません。 入力した値を読み込んだ変数「s」に 「ハイフン」が複数、もしくは 無い場合は"もう一度お願いします。" と出力をさせたいのですが、if文での 判定の記述がわからなくて困っています。 よろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

色々方法はありますけど、たとえば… 参考URLをみるとStringクラスが備えているメソッドがありますが その中に IndexOf というメソッドがあります。 これを使えば、まず "-" が存在するか否かは簡単に判定できますよね。 二つ以上あるかどうかは、二つ見つかれば条件として十分ですから、 一つ見つかった場合に、さらにその後ろにも"-"があるかどうかを調べれば 判定することができます。 まずはあるかないかの判定だけでもやってみてください。

参考URL:
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/String.html
camp-fanks
質問者

補足

ご回答ありがとうございます。 IndexOfメソッドはint型を返す 記述してありました。 if(s.indexOf(" "))  //?? このif文の判定ではIndexOfメソッド はつかえるのでしょうか? ここがよくわかりません。 よろしくお願いします。

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

関連するQ&A

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

    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
  • 今勉強中の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
  • JavaでString型をChar型に変換するプログラムが分かりません

    JavaでString型をChar型に変換するプログラムが分かりません;; どなかた助けて下さい。 下のプログラムの何がいけないんでしょうか?? いろいろ間違ってるところはあると思うんですが、教えて下さい! import java.io.*; class { public static void main(String args[]) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str1 = br.readLine(); StringBuffer moji = new StringBuffer(str1); char nyuu=moji;

  • スタックトレースについて

    スタックトレースを出力して、例外をそのままスローする。 と、仕様の最後に書かれていたのですが、どうやればいいのかわかりません。 たとえば下記のソースだったらどう加えればいいのでしょうか? import java.io.*; class Test { public static void main(String args[]) throws IOException { System.out.println( args[0] + "の起動"); System.out.println("入力してください"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String PP; PP = br.readLine(); System.out.println( PP + "が入力されました"); } }

    • ベストアンサー
    • Java
  • Java int sum = 0は必要ですか?

    やさしいJavaという本を買ったのですが、良くわからない箇所がありました。 --------------省略----------------- class Sample6 { public static void main(String[] args) throws IOException { System.out.println("整数を3つ入力してください。") ; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)) ; String str1 = br.readLine() ; String str2 = br.readLine() ; String str3 = br.readLine() ; int sum = 0 ; sum += Integer.parseInt(str1) ; -------------------略----------------- int sum = 0 ; とありますが、0と設定しておく必要はありますか? 無いとまずいですか? いきなりこのコードが出てきたと思うのですが どこかに書いてましたっけ?

    • ベストアンサー
    • Java
  • 簡単な入力出力のプログラムの間違いがわかりません

    こんにちは、さんたと申します。 よろしくお願い致します。 次のプログラムは、本に載っていたものを写したものです。何回も見直すのですが、エラーが出て止まってしまいます。もし、お分かりになられましたら、教えて下さいましたら幸いです。 よろしくお願い致します。 簡単な入力出力のプログラム(キーボードからの入力を読み込んで、画面に出力する) ********************************* c:\java_study>javac p2.java p2.java:7: ';' がありません。 While((line = in.readLine()) != null) { ^ エラー 1 個 ******************************* import java.io.*; public class p2 { public static void main(String[] args) throws IOException { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); String line; While((line = in.readLine()) != null) { System.out.println(line); } } }

    • ベストアンサー
    • Java
  • Ctrl+Zが入力されると終了するプログラム

    入力された文字をそのまま表示し、[Ctrl]+Zが入力されると終了するプログラムを組んでいるんですがどのように記述すればよいか困っています。アドバイスお願いします。 public static void main(String args[])throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str; do{ str = br.readLine(); System.out.println(str); }while(str == null); }

    • ベストアンサー
    • 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
  • キーボードから文字列を入力する際の質問です。

    キーボードから文字列を入力する際の質問です。 どうしてもカタカナでしか日本語の入力が出来ません。 ローマ字入力です。 import java.io.*; class Sample4 { 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 + "が入力されました。"); } }

    • ベストアンサー
    • Java
  • このクラスをもとに2

    import java.lang.*; import java.io.*; import java.util.*; class SimpleReader{ public static void main(String[] argv) throws IOException{ InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); String s; System.out.print("Input: "); System.out.flush(); s = br.readLine(); } } このクラスをもとにプロンプト「Input: 」を出力して、文字列を入力させ、その文字列を反転(例えば"abc"→"cba")させて出力しつづけ、「end」と入力すると終わるプログラムを教えてください。

    • ベストアンサー
    • Java