• 締切済み

このクラスをもとに…。

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: 」を出力して、文字列を入力させ、その文字列をそのまま出力しつづけ、「end」と入力すると終わるプログラムを教えてください。

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

みんなの回答

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.3

> "abc"と入力したら"cba"と反転して文字列が返るようにとかできますかね??  ひょっとしたらもっと良い反転の仕方があるのかも知れませんが、わかりやすいようにシンプルなアルゴリズムで実現してみましたので掲載しておきます。回答が長くなるので前回は行いませんでしたが、今回は分けるべきルーチンを関数化しました。今回も若干のコメント付き。 import java.lang.*; import java.io.*; import java.util.*; class SimpleReader { public static String reverseString(String s) { // クラスメソッドreverseString int begin = 0; int end = s.length() - 1; char[] c = new char[end + 1]; // 文字列を格納できるchar[]を作成 s.getChars(begin, end + 1, c, begin); // Stringをchar[]にする while(begin < end) { // 先頭と最後をスワップ、次に先頭から2つ目と最後から2つ目を・・・・ c[begin] ^= c[end]; // ここから3行で2つの文字をスワップし、次の文字へ移る c[end] ^= c[begin]; c[begin++] ^= c[end--]; } return new String(c); } 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: "); while(!(s = br.readLine()).equals("end")) { System.out.println(SimpleReader.reverseString(s)); // 文字を反転して表示 System.out.print("Input: "); } } }

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.2

お礼にかかれてある要求仕様では若干複雑なプログラムになりますね。そこでVectorクラスを導入します。Vectorは線形リストを表現するクラスですが、可変長の配列として利用できます。今回はやや難解だと思いますのでコメントも掲載しています。 # 例によってエラーチェックは無いのでお気をつけて(tryすらしてないし)。 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; Vector v = new Vector(); // Vectorクラスのインスタンス作成、空の線形リストが作られる System.out.print("Input: "); while(!(s = br.readLine()).equals("end")) { if(s.equals("")) { // 入力文字列が空白なら if(v.isEmpty()) { // この時点で空なら System.out.println("no elements"); // 足す数字が無い } else { int sum = 0; String sep = ""; // 先頭の数字には+記号が要らないので空っぽ while(!v.isEmpty()) { // Vectorが空になるまで int i = ((Integer)v.get(0)).intValue(); // 先頭の数字を1個取り出す System.out.print(sep + i); // それを表示 sep = "+"; // 数字と数字を区切る+記号 sum += i; // 足し算 v.remove(0); // 先頭の数字を削除 } System.out.println("=" + sum); // 結果表示 } } else { // 入力文字列が空白でなければ v.addElement(new Integer(s)); // 数字のみの文字列と仮定してIntegerクラスを作成し、配列の一番最後に加える } System.out.print("Input: "); }; } }

hyokkorri
質問者

お礼

すごい・・詳しい説明までのっけていただいてありがとうございます!!

hyokkorri
質問者

補足

最後なんですけど Input: 3 Input: 4 Input: 5 Input: end 3+4+5=12 みたいに表示したいんですけどendまでで終わってしまいます。どうにかなりますか? あとJavaのParseIntなんですけど、前後に空白があるとエラーになるのをそうならないようなプログラムにすることはできますか?文字列中で見つかった最初の数字から連続する数字のみを処理できれば結構です。前後の空白、数字でない文字は無視して、もし数字と認識できない場合は、メッセージを出すとともに、数字0として読み込んでください。 課題なんですがあまりに難しいので悩んでいます。お願いします!!

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

はいどうぞ。 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(); while(!(s = br.readLine()).equals("end")); } }

hyokkorri
質問者

お礼

ありがとうございます!!実行できました☆! Input:1 Input:2 Input:(空白) 1+2=3 Input:6 Input:7 Input:8 Input:end 6+7+8=21 と表示(空白でそれまでの計算結果を出して、初期化してまた繰り返してendで終わらせる)させることは可能でしょうか?

hyokkorri
質問者

補足

何回もすいません。。この応用になると思うんですけど、"abc"と入力したら"cba"と反転して文字列が返るようにとかできますかね??

関連するQ&A

  • このクラスをもとに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
  • このクラスをもとに改。

    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: 」を出力して、文字列を入力させ、その文字列をそのまま出力しつづけ、「end」と入力すると終わるプログラムを教えてください。例えば Input: abc abc Input: def def Input: end みたいな感じで。。

    • ベストアンサー
    • Java
  • 標準入力 System.in について

    いつもお世話になっております。 標準入力についての質問です。 標準入力からデータを入力し、そのデータを表示させる以下のプログラムを作りました。 ------ import java.io.*; class InputTest{ public static void main(String args[]) throws IOException{ String moji; InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); System.out.print("文字列を入力してください。 文字 = "); moji = br.readLine(); System.out.println("\n入力した文字列は" + moji + "です。"); } } ------ 上記のソースの「System.in」なのですが、私が参考にしているテキストには 「InputStream クラスのオブジェクト」という説明になっていました。 これまで、オブジェクトは new 演算を使って生成しないと使えないと思っていたのですが… ここでは、事前に java.io を import しているから使えるのでしょうか? それとも、in は System クラスのフィールド(=定数?) なので、使えるのでしょうか? (java.lang のクラスである System クラスは、明示的に import しなくても使えるから) いずれにしても、「java.lang.System.in が、java.io.InputStream のオブジェクト」 ということが理解できません。 分かりにくい説明で申し訳ありませんが、ご教授お願い致します。

    • ベストアンサー
    • Java
  • CSV読み込み 文字化け

    失礼いたします。 以前のログを見てエンコードを設定してみたのですが、出力が文字化けします。ローカルファイルを読み込んでコンソール出力しているだけなのですが・・・。 分かる方、よろしくお願いします。 -------------------ソースはここから import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; // import java.io.FileReader; FileReaderからInputStreamReaderに変更済み import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class ReadCSV { public static void main(String[] args) { try { File csv = new File("C:\\AP.csv"); // BufferedReader br = new BufferedReader(new FileReader(csv)); BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(csv),"EUC_JP")); // BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(csv),"MS932")); while (br.ready()) { String line = br.readLine(); StringTokenizer st = new StringTokenizer(line, ","); while (st.hasMoreTokens()) { System.out.print(st.nextToken() + "\t"); } System.out.println(); } br.close(); } catch (FileNotFoundException e) { キャッチ処理 }

    • ベストアンサー
    • Java
  • BufferedReader.readline()で読み込んだ文字列の

    BufferedReader.readline()で読み込んだ文字列の長さがおかしい。 質問させてください。 BufferedReader.readline()を使用して入力した文字列の長さを表示させると、値が正しく表示されません。 例えば、「東京都千代田区」と入力した場合、長さは9と表示されます。 (東京都と入力すると長さは3と表示されます) どなたか原因をご存知ありませんでしょうか。 コードを以下に記載します。 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Question_1_1 { /* * メイン関数 * @param args 起動引数 */ static public void main(String[] args) throws IOException{ InputStreamReader input = new InputStreamReader(System.in); BufferedReader buff = new BufferedReader(input); String str = ""; System.out.println("文字列入力>"); str = buff.readLine(); System.out.println("文字列長さ : " + str.length()); // ストリームを閉じる input.close(); buff.close(); } }

    • ベストアンサー
    • Java
  • プログラムの組み合わせ方

    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のキーボード入力について質問

    javaのキーボード入力について質問です。 下記の如く、javaのソース"Sample4.java"や"Sample4.class"は存在します。 c:\Pleiades44\workspace\Input\src\Sample1\Sample4.java c:\Pleiades44\workspace\Input\bin\Sample1\Sample4.class そのソースの内容は下記です。 このプログラムはPleiades44では、Debugや実行が出来、コンソールに("input integer: ") と表示出来、次に数値を入力しますと、その内容が表示出来ます。 (注、最初のカーソル位置と文字入力位置が違いますが、其処は目をつむります) Q1)このプログラムをPCのコンソールで実行する方法をお教えください。 //======================== package Sample1; //Sample4.java import java.io.BufferedReader; import java.io.InputStreamReader; public class Sample4{ public static void main(String args[]){ int x=9; while(x!=0){ System.out.print("input integer: "); InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); try{ String buf = br.readLine(); x = Integer.parseInt(buf); }catch(Exception e){ x = 0; } System.out.println("Input Number = " + x); } //while System.out.println("end"); } } //=============================== 以上、宜しくお願いします。

    • ベストアンサー
    • 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
  • httpsサイトからのhtmlソース取得

    以下のようなコードを書いてみましたところ、httpサイト (1) からはhtmlソースが全行取得できたのですが、httpsサイト (2) からは途中約1/3以降からしか得られませんでした。 ところが、httpsサイトでも (3) を試したところ全部取得できます。何がいけないのか~何を調べればよいのか~が分からず困惑しております。ご教示いただけましたら幸いです。 import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; import java.net.URL; import java.net.HttpURLConnection; import javax.net.ssl.HttpsURLConnection; public class GetHtmlTest { public static void main(String[] args) { try { URL u = new URL("http://stocks.finance.yahoo.co.jp/stocks/detail/?code=2371.T"); // (1) HttpURLConnection con = (HttpURLConnection) u.openConnection(); // (1) InputStreamReader isr = new InputStreamReader(con.getInputStream(), "UTF-8"); // (1) // URL u = new URL("https://www.sbisec.co.jp/ETGate"); // (2) // HttpsURLConnection con = (HttpsURLConnection) u.openConnection(); // (2) // InputStreamReader isr = new InputStreamReader(con.getInputStream(), "SJIS"); // (2) // URL u = new URL("https://www.monex.co.jp/Login/00000000/login/ipan_web/hyoji"); // (3) // HttpsURLConnection con = (HttpsURLConnection) u.openConnection(); // (3) // InputStreamReader isr = new InputStreamReader(con.getInputStream(), "SJIS"); // (3) BufferedReader br = new BufferedReader(isr); String line; StringBuilder sb = new StringBuilder(); while ((line = br.readLine()) != null) { sb.append(line).append(System.getProperty("line.separator")); } System.out.println(sb.toString()); br.close(); isr.close(); } catch (IOException e) { e.printStackTrace(); } } }

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

専門家に質問してみよう