• ベストアンサー

java 電卓のプログラム

或る程度まで進みましたが、 ソースコードが分からず困っています;; こんな問題なのですが・・・ 課題1 以下の要件を満たす電卓のプログラム Calculatorクラスを作成し、ソースコードを 示せ。 1.最初に標準入力から文字を1文字入力し 計算の種類や動作を決定する。 必要な入力文字と動作の種類の対応を下記に示す。 入力文字  動作   +    数値a,bを受け取りa+bの結果を表示する   -    数値a,bを受け取りa-bの結果を表示する   *    数値a,bを受け取りa*bの結果を表示する   /   数値a,bを受け取りa/bの結果を表示する       ただし、b=0の時は「Infinity」と表示する   !    数値aを受け取りaの階乗を計算し表示する   q   終了する 2. 計算の種類が決定した後、標準入力から計算に必要な数字を入力する 3.計算が終了した後、再度、標準入力からの動作の 種類を受け付ける。 こんな感じです。 で、一応ここまで進んでいます。 import java.io.*; public class Calculator { public static void main(String[] args) throws IOException { BufferedReader buf = new BufferedReader( new InputStreamReader(System.in)); int i = 0; int answer = 1; System.out.println("+、-、*、/、!、qから選んで入力してください"); String s = buf.readLine(); System.out.println("数字を二つ入力してください"); int a = Integer.parseInt(buf.readLine()); int b = Integer.parseInt(buf.readLine()); if (s.equals("+")) { System.out.println(a + b); } if (s.equals("-")) { System.out.println(a - b); } if (s.equals("*")) { System.out.println(a * b); } if (s.equals("/")) { System.out.println(a / b); } if (s.equals("!")) { System.out.println("階乗の計算をします。数字を一つ入力してください"); while (i < a) { i++; answer = i * answer; System.out.println("a!=" + answer); } } if (s.equals("q")) { //終了する処理 } } } とりあえず、自分でなんとか・・・。 後、残ったのは割り算で bに0が入力された時にInfinityと表示するのと、 階乗と終了する処理・・・・。 そして、終了の命令があるまで計算を続ける ソースを書く・・・。 ここからどのようにすればいいのでしょうか・・・ 教えてください。お願いします!

noname#106047
noname#106047
  • Java
  • 回答数3
  • ありがとう数4

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

  • ベストアンサー
  • sh_hirose
  • ベストアンサー率66% (56/84)
回答No.3

まず標準入力から1文字取得します。 System.out.println("+、-、*、/、!、qから選んで入力してください"); String s = buf.readLine(); String answer = ""; 次に入力された種類によって必要な数だけ標準入力から数字を取得します。 if( s.equals("+") ) { int a = Integer.parseInt(buf.readLine()); int b = Integer.parseInt(buf.readLine()); answer = Integer.toString(a + b); } if( s.equals("-") ) { int a = Integer.parseInt(buf.readLine()); int b = Integer.parseInt(buf.readLine()); answer = Integer.toString(a - b); } // 省略 if( s.equals("/") ) { int a = Integer.parseInt(buf.readLine()); int b = Integer.parseInt(buf.readLine()); if( b == 0 ) { answer = "Infinity"; } else { answer = Integer.toString(a / b); } } if( s.equals("!") ) { int a = Integer.parseInt(buf.readLine()); int value = 0; for( int i = 0; i < a; i++ ) { value *= (i + 1); } answer = Integer.toString(value) } System.out.println(answer); answerをStringにすることで"Infinity"も出力することができます。 ただし全ての条件でInteger.toStringを行わないといけませんが。 qを入力されたときに終了する 例えば以下のメソッドでは return int; を必ず書きます。 public int sum(int a, int b) { return a + b; } ここで戻り値がvoidのメソッドのときに途中で終了したい場合は public void ave(int a, int b) throws Exception { if( b == 0 ) { return; //戻り値なし } System.out.println(a / b); } return;で処理を終了します。 つまり if( s.equals("q") ) { System.out.println("処理を終了します。"); return; } となります。 最後に終了の命令があるまで計算を続けるには"q"が入力されるまで無限ループさせればいいので while( true ) { System.out.println("+、-、*、/、!、qから選んで入力してください"); // 省略 System.out.println(answer); }

その他の回答 (2)

回答No.2

3.計算が終了した後、再度、標準入力からの動作の種類を受け付ける。 つまり、終了の命令があるまで計算を続けるソースを書くには、 whileループとbreak文を使いましょう。 while(条件){   繰り返したい処理a   繰り返したい処理b   ・・・・  if(条件){ break; }   繰り返したい処理1   繰り返したい処理2   ・・・・ }

  • edomin7777
  • ベストアンサー率40% (711/1750)
回答No.1

とりあえず気がついたところ。 ・「q」を入力したのに、数字を2個入力しなければいけない。 ・switchをなぜ使わないのか。 ・階乗の計算をするときは数字を3個入力しなければいけない。 で、割り算で「b」が0だったらは、 if (式) {  文 } else {  文 } で0の時と0じゃ無いときの処理を分けて書く。

関連するQ&A

  • javaプログラムについて

    */コマンドライン引数で2つの数字と1つの記号を受け取ります。 * //受け取った記号が『+』ならplusメソッドを呼び出し、 * //受け取った記号が『-』ならminusメソッドを呼び出し、 * //受け取った記号が『×』ならmultiplyメソッドを呼び出し、 * //受け取った記号が『÷』ならdivideメソッドを呼び出し、 * //それ以外が入力された場合は『計算できません。』と表示する * //プログラムを作成してください。 * */ public class MethodAdd9 { public static void main(String[] args) { int input1 = Integer.parseInt(args[0]); int input2 = Integer.parseInt(args[1]); String sign = args[2]; //ここにプログラムを追加してください if(sign.equals("+")){ plus(input1,input2);//プラスメソッドへ } if(sign.equals("-")){ minus(input1,input2);//マイナスメソッドへ } if(sign.equals("*")){ multiply(input1,input2);//掛算メソッドへ } if(sign.equals("/")){ divide(input1,input2);//割算メソッドへ } } // 四則演算を行うメソッドを追加 //プラスメソッド表示 public static void plus(int a,int b){ int c=a+b; System.out.println(a+b); } //マイナスメソッド表示 public static void minus(int d,int e){ int f=d-e; System.out.println(d-e); } //掛算メソッド表示 public static void multiply(int g, int h){ int i=g*h; System.out.println(g*h); } //割算メソッド表示 public static void divide(int j,int k){ int l=j/k; System.out.println(j/k); } } ここまで出来て、記号を認識してくれるようにはなったのですが、何故か"*"掛算の記号だけ読み込んでくれません。また、ここから「計算出来ません」と表示させるにはどうすれば良いでしょうか。知恵をお貸しください。

  • javaプログラムについて

    mainメソッド内の指定された部分の処理を、 別のメソッドに分けてください。 mainメソッド内から作成した別メソッドを呼び出して 実行できるようにしてください。 ※分ける前と分けた後で処理結果が変わらないこと (入力された文字が"A"の場合true, それ以外の場合falseを返すように) */ class MethodAdd1{ public static void main(String[] args){ /* // ★ここから if("A".equals(args[0])){ judge = true; }else{ judge = false; } // ★ここまで */ boolean judge; if("A".equals(args[0])){ System.out.println("true"); }else{ System.out.println("false"); } } /* **戻り値:boolean **引数:String */ //ここにメソッドを作成 public static boolean equals(String a){ String str="A"; if("A".equals(str)){ return true; }else{ return false; } } } これで一応trueかfalseと表示されるのですが、合っているのか分かりません。 お時間のある方で、手直しをして頂ける方お願い致します。

  • Javaの課題について質問です。パート(2)

    import java.io.Console; public class A23_exec { public static void main(String args[]){ try{ A23_StrArray list = new A23_StrArray(); System.out.println("-------------------------------処理メニュー-------------------------------"); System.out.println("| 01・・・要素を追加 02・・・指定のインデックスの要素を上書き|"); System.out.println("| 03・・・指定インデックスの要素を表示 04・・・全ての要素を削除 |"); System.out.println("| 05・・・全ての要素を表示 06・・・全てのインデックス数を表示 |"); System.out.println("| 07・・・全ての要素を昇順でソート 08・・・全ての要素を降順でソート |"); System.out.println("| 09・・・ファイルの読込み 10・・・ファイルを追記して読込み |"); System.out.println("| 11・・・ファイルを上書きして読込み 12・・・ファイルに書込み |"); System.out.println("| 13・・・ファイルに追記して書込み 14・・・ファイルに上書き書込み |"); System.out.println("| 99・・・処理を終了 |"); System.out.println("--------------------------------------------------------------------------"); System.out.println(" ※処理メニュー以外のNoを入力しても処理出来ませんので注意して下さい。"); System.out.println(" ※全て半角英数字で入力して下さい。"); System.out.println(" ↓処理Noを入力して下さい。↓"); while(true){ System.out.println("-----処理No-----"); String inputData = input(); if(inputData.equals("99")){ System.out.println("終了"); System.exit(0); break ; } else if(inputData.equals("01")){ System.out.println("要素追加"); inputData = input(); list.add(inputData); } else if(inputData.equals("02")){ System.out.println("指定インデックスの要素の上書き"); inputData = input(); list.set(0,inputData); System.out.println(list.toString()); } else if(inputData.equals("03")){ System.out.println("指定インデックスの要素を表示"); inputData = input(); System.out.println(list.get(0)); } else if(inputData.equals("04")){ System.out.println("全ての要素を削除"); list.clear(); } else if(inputData.equals("05")){ System.out.println("全ての要素を表示"); list.getAll(); System.out.println(list.getAll()); } else if(inputData.equals("06")){ System.out.println("全てのインデックス数を表示"); int item =list.getIndex(); System.out.println(item); } else if(inputData.equals("07")){ System.out.println("全ての要素を昇順でソート"); list.sort(list.ASC_SORT); for(int i = 0;i < list.getIndex(); i++){ System.out.println(list.get(i)); } } else if(inputData.equals("08")){ System.out.println("全ての要素を降順でソート"); inputData = input(); list.sort(list.DESC_SORT); for(int i = 0;i < list.getIndex(); i++){ System.out.println(list.get(i)); } } else if(inputData.equals("09")){ System.out.println("ファイルの読み込み"); inputData = input(); list.readFile(inputData); } else if(inputData.equals("10")){ System.out.println("ファイルを追記して読み込み"); inputData = input(); list.readFile(inputData,true); } else if(inputData.equals("11")){ System.out.println("ファイルを上書きして読み込み"); inputData = input(); list.readFile(inputData,false); } else if(inputData.equals("12")){ System.out.println("ファイルに書き込み"); inputData = input(); list.writeFile(inputData); } else if(inputData.equals("13")){ System.out.println("ファイルに追記して書き込み"); inputData = input(); list.writeFile(inputData,true); } else if(inputData.equals("14")){ System.out.println("ファイルに上書きして読み込み"); inputData = input(); list.writeFile(inputData,false); } else{ System.out.println("処理Noが違います。"); } } }catch(Exception e){ System.out.println(e); } } private static String input(){ try{ Console cns = System.console(); //String input= cns.readLine(); return cns.readLine(); } catch(Exception e){ System.out.println(e); return ""; } } } 宜しくお願い致します。

  • JAVAのプログラムについて

    独学でJAVAを勉強中なのですが、 import java.io.*; public class ExserciseD5L3_2{ public static void main(String args[]){ BufferedReader br = new BufferedReader(newInputStreamReader(System.in),1); try{ System.out.println("■■■計算クイズ■■■"); System.out.println("計算してください。"); String Que[] = {"10×50=?","21-7=?","360÷6=?"}; int Ans[] = {500,14,60}; int counter; for(counter = 0; counter <=2; counter++ ){ System.out.println(Que[counter]); System.out.println("答えは?"); String str = br.readLine(); int i = Integer.parseInt(str); if(i == Ans[counter]){ System.out.println("おめでとう!大当たりです。"); } else{ System.out.println("残念!答えは"+Ans[counter]+"です。"); } } } catch(IOException e){ System.out.println("IOエラーが発生しました。"); } catch(NumberFormatException ne){ System.out.println("入力された数値が正しくないようです。"); } } } これを実行すると ■■■計算クイズ■■■ 計算してください。 10×50=? 答えは? 500 おめでとう!大当たりです。 21-7=? 答えは? 14 おめでとう!大当たりです。 360÷6=? 答えは? 60 おめでとう!大当たりです。 となるのですが、これに おめでとう!正解数は3つです。とか正解数は2つですなどのように 正解数も出るようにするにはどのようにしたらいいのでしょうか?

    • ベストアンサー
    • Java
  • javaのプログラムの質問です。

    10件まで登録できる簡易メモリストを作成して下さい 実行例: > java MemoList > コマンドを入力して下さい:list 1:俺達がガンダムだ! 2:ザクとは違うのだよザクとは! 3:当たらなければどうという事はない! コマンド list メモリストを1~の番号と共に表示 add メモを追加 del メモ番号を入力して削除 upd メモ番号を入力して上書き save ファイルに保存 h コマンド一覧を表示 q 終了 注意点 ・プログラム起動時にファイルからメモリストを読み込んで下さい ・保存するファイルは任意の固定ファイルで構いません ・メモは1~の連番で10件まで登録可能として下さい ・終了のコマンドが入力されるまで何度でもコマンド入力可能として下さい ・JavaDoc/プログラムコメントはしっかり記述して下さい ・エラー発生時は適切なメッセージを標準出力に出力して下さい という問題なのですが、以下のソースでとりあえずは動くのですが。 import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; import java.util.ArrayList; class MemoList{ /** * メインメソッド **/ public static void main(String[] args) throws IOException { // Fileクラスのインスタンス化 File file1 = new File("C:\\WORK\\Memo.txt"); // FileReaderクラスのインスタンス化 FileReader filereader = new FileReader(file1); // FileWriterクラスのインスタンス化 FileWriter filewriter = new FileWriter(file1); // BufferedReader&InputStreamReaderクラスのインスタンス化 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); ArrayList <String> arraylist = new ArrayList<String>(); int num = 1; // while文ループを行う while(true){ System.out.println("> コマンドを入力して下さい:"); String str1 = br.readLine(); if("list".equals(str1)){    for(int i=0; i < arraylist.size(); i++){      System.out.println(i + 1 + ":" + arraylist.get(i));    } } else if("add".equals(str1)){ System.out.println("> メモを入力して下さい。"); if(arraylist.size() == 10){    System.out.println("> 10件登録されています。追加する場合は削除して下さい。");    delete(br,arraylist); }else{ String str2 = br.readLine(); arraylist.add(str2); } }else if("del".equals(str1)){ delete(br,arraylist); }else if("upd".equals(str1)){ System.out.println("> 上書きするメモ番号を入力して下さい。"); try{   String str4 = br.readLine();   int num2 = Integer.parseInt(str4);   System.out.println("> 上書きする内容を入力して下さい。");    String str5 = br.readLine();   arraylist.set(num2 - 1,str5); }catch(NumberFormatException e){ System.out.println("正しい番号を入力して下さい"); }catch(IndexOutOfBoundsException e){ System.out.println("正しい番号が入力されていないので上書き出来ません"); } (1)}else if("save".equals(str1)){ try{ for(int j=0; j < arraylist.size(); j++){ filewriter.write(arraylist.get(j) + "\r\n"); } System.out.println(">ファイルに保存しました。"); filewriter.close(); }catch(IOException e){ (2) System.out.println("ファイルに保存出来ません"); (3) } }else if("h".equals(str1)){ System.out.println("list:メモリストを1~の番号と共に表示"); System.out.println("add:メモを追加"); System.out.println("del:メモ番号を入力して削除"); System.out.println("upd:メモ番号を入力して上書き"); System.out.println("save:ファイルに保存"); }else if("q".equals(str1)){    System.out.println("> Terminated");    break; } } } // deleteメソッド public static void delete(BufferedReader br,ArrayList<String> arraylist) throws IOException { try{   System.out.println("削除するメモ番号を入力して下さい");   String str3 = br.readLine();   int num3 = Integer.parseInt(str3);   arraylist.remove(num3 - 1); }catch(IndexOutOfBoundsException e){     System.out.println("正しい番号を入力して下さい"); }catch(NumberFormatException e){    System.out.println("正しい番号以外は受け付けません"); } } } 読みにくいのはご容赦ください。 (1)と(3)の間の処理なのですが、現在のソースで実行した場合、適当に「add」でメモを書き、最初に「save」コマンドを入力するとちゃんとWORKフォルダ内に作成した「Memo.txt」に保存されます。しかし、2回目以降、コマンドを入力して処理を行い、saveコマンド入力すると、例外処理となり(2)が表示され、以降はどのコマンド処理をしても(2)が表示され続けるという具合になってしまいます。どなたか教えていただけないでしょうか?よろしくお願い致します。 通報する

    • ベストアンサー
    • Java
  • Javaの参照型変数の比較についての質問です。

    SUN教科書Javaアソシエイツ P209 問5-8より 出力結果を問う問題です。 class A{String s = ”ABC”;} class Sample{ public static void main(String[] args){ A a1 = new A(); A a2 = new A(); if(a1 == a2){ System.out.println("a1 == a2"); } if(a1.s == a2.s){ System.out.println("a1.s == a2.s"); } if(a1.equals(a2)){ System.println("a1 equals a2"); } if((a1.s).equals(a2.s)){ System.out.println("a1.s equals a2.s"); } } } 【解答】 a1.s == a2.s a1.s equals a2.s 「a1.s」と「a2.s」の記述、つまり表記が意味している内容が良く分かりません。 a1とa2が別のオブジェクトであることは理解出来ています。 ですから、(a1 == a2)と(a1.equals(a2))がfalseとなるのも分かります。 ですが、「a1.s」の「.s」とは何なのでしょうか。 解説には「a1.sとa2.sはAクラスのオブジェクトが保持する同一のStringオブジェクトを 参照しています。」とあります。Aクラスを生成した時にその中にString型クラスsが 作れているということでしょうか。 アドバイスをよろしくお願い致します。

    • ベストアンサー
    • Java
  • java 会員登録プログラム

    2番目の参照で困ってます。Member.java といったクラスファイルを使ってます。コンストラクタやゲッター、セッター等が入ってます。省略箇所有りですがどうぞ宜しくお願いします。 public class MemberSystem { public static void main(String[] args) { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); try{ //loopを使い随時メニュー表示 boolean loop = true; while(loop){ System.out.println(""); System.out.println("ご希望のオプション番号を選択してください"); System.out.println("1>>登録 2>>参照 3>>検索 4>>削除 5>>保存 6>>読込 7>>終了"); String line = reader.readLine(); int n = Integer.parseInt(line); //ArrayList<Member>型のインスタンスを作成し、ArrayList<Member>型の変数rに代入 ArrayList<Member> r = new ArrayList<Member>(); switch (n) { case 1: System.out.println("登録>> 各情報を入力すると登録できます"); System.out.println("氏名"); String inputName = reader.readLine(); //エラーチェック 空入力 if(inputName.length() == 0){ System.out.println("空入力のため終了"); System.exit(0); } System.out.println("生年月日 例)2013/01/01"); String inputBirth = reader.readLine(); //エラーチェック 空入力 if(inputBirth.length() == 0){ System.out.println("空入力のため終了"); System.exit(0); } System.out.println("電話番号 例) 0901234567"); String inputTel = reader.readLine(); //エラーチェック 空入力 if(inputTel.length() == 0){ System.out.println("空入力のため終了"); System.exit(0); } //reader.redLineで取得したString型の情報を代入 r.add(new Member(inputName, inputBirth, inputTel)); System.out.println("下記、入力情報をストアし、会員ID番号を付加しました"); //入力情報と会員ID番号を表示 for(Member inputResult:r){ System.out.print(inputResult); } break; case 2: System.out.println("参照>> ご希望の会員情報を表示します"); System.out.println("会員ID番号を入力してください 例)0001"); //キーボード入力からデータを呼び込む String inputMemberID = reader.readLine(); //ここがうまくいきません。 for(Member inputResult :r) { if(inputMemberID.equals(inputResult.getID())){ //データ取得  System.out.println(inputResult); //エラーチェック 空入力 }else if(inputMemberID.length() == 0){ System.out.println("空入力のため終了"); System.exit(0); //エラーチェック 番号がない時や一致していない時 }else{ System.out.println("あなたの会員ID番号は該当しません"); System.exit(0); } } break; case 3: System.out.println("検索>> ご希望の会員を検索します 検索方法を番号で選択してください"); System.out.println("1>>氏名 2>>生年月日 3>>電話番号"); //switchを使い、検索選択肢を表示 String search = reader.readLine(); int x = Integer.parseInt(search); switch (x) { case 1: System.out.println("氏名"); String searchName = reader.readLine(); for(Member inName : r) { if (searchName.equals(inName.getName())){ System.out.print(inName); } } break; case 2: System.out.println("生年月日"); String searchBirth = reader.readLine(); break; default: System.out.println("電話番号"); String searchTel = reader.readLine(); break; } break; case 4: System.out.println("削除>> ご希望の会員を削除します"); System.out.println("会員ID番号を入力してください 例)0001"); String deleteMemeb

  • 環境でeval()が利用できません

    3×3の簡易エクセルをjavaで作っているところです。 各セルにキーボードから入力された数値を表示するところまではできました。しかし、Data: と表示するところで、A1+A2などを入力すると、 エラーが出ます。 Row:A Line:1 Data:2 Row:A Line:2 Data:4 と入力しているとき Row:A Line:3 Data:A1+A2 と入力された際、 2 4 6 と表示させたいです。どう改良すればいいでしょうか? for(roop=0;roop<=8;roop++) { System.out.print("Row:"); try { Row_before = br.readLine(); } catch(IOException e) { System.err.println(e); } if(Row_before.equals("A")||Row_before.equals("B")||Row_before.equals("C")) { Row[roop] = Row_before;Row_before=""; } else {Row_before="";} System.out.print("Line:"); try { Line_before = br.readLine(); } catch(IOException e) { System.err.println(e); } if(Line_before.equals("1")||Line_before.equals("2")||Line_before.equals("3")) {Line[roop] = Line_before;Line_before="";} else {Line_before="";} System.out.println("Data:"); //A1に数値を入力 if(Row[roop].equals("A")&&Line[roop].equals("1")) { try { A1_string = br.readLine(); } catch(IOException e) { System.err.println(e); } A1 = Integer.parseInt(A1_string); System.out.println(""+A1_string); } //以下同様の動き if(Row[roop].equals("A")&&Line[roop].equals("2")) {try{A2_string = br.readLine();}catch(IOException e){System.err.println(e);}A2 = Integer.parseInt(A2_string);} if(Row[roop].equals("A")&&Line[roop].equals("3")) {try{A3_string = br.readLine();}catch(IOException e){System.err.println(e);}A3 = Integer.parseInt(A3_string);} if(Row[roop].equals("B")&&Line[roop].equals("1")) {try{B1_string = br.readLine();}catch(IOException e){System.err.println(e);}B1 = Integer.parseInt(B1_string);} if(Row[roop].equals("B")&&Line[roop].equals("2")) {try{B2_string = br.readLine();}catch(IOException e){System.err.println(e);}B2 = Integer.parseInt(B2_string);} if(Row[roop].equals("B")&&Line[roop].equals("3")) {try{B3_string = br.readLine();}catch(IOException e){System.err.println(e);}B3 = Integer.parseInt(B3_string);} if(Row[roop].equals("C")&&Line[roop].equals("1")) {try{C1_string = br.readLine();}catch(IOException e){System.err.println(e);}C1 = Integer.parseInt(C1_string);} if(Row[roop].equals("C")&&Line[roop].equals("2")) {try{C2_string = br.readLine();}catch(IOException e){System.err.println(e);}C2 = Integer.parseInt(C2_string);} if(Row[roop].equals("C")&&Line[roop].equals("3")) {try{C3_string = br.readLine();}catch(IOException e){System.err.println(e);}C3 = Integer.parseInt(C3_string);} System.out.println(""); }

  • java プログラム

    javaで下記のプログラムをコンパイルすると複数のシンボルが存在しませんとういう文が出てきます。 どのようにどこを書きなおせばコンパイル出来るのしょうか? public class Email { public static void main(String[] argv) throws Exception { String input = "fileContainingEmails.txt"; String output = "copyPasteMyEmails.txt"; BufferedReader cin; cin = new BufferedReader(new InputStreamReader(System.in)); String userInput; System.out.println("Enter input file name [default name: fileContainingEmails.txt]"); userInput = cin.readLine(); if (userInput.equals("")) userInput = input; String name; if (userInput.equals(input)) name = output; else name = userInput; String userOutput; System.out.println("Enter output file name [default name: " + name + " ]"); userOutput = cin.readLine(); if (userOutput.equals("")) userOutput = name; System.out.println("Input : " + userInput); System.out.println("Output: " + userOutput); BufferedReader fin; fin = new BufferedReader(new FileReader(userInput)); PrintWriter fout; fout = new PrintWriter(new FileWriter(userOutput, true)); String lineFromFile = ""; List listOfMail = new ArrayList(); int indexOfAt = 0; int s,e = 0; while (fin.ready()) { lineFromFile = fin.readLine(); indexOfAt = lineFromFile.indexOf('@',indexOfAt); while(indexOfAt > 0) { for(int i = 0;lineFromFile.charAt(indexOfAt-i) != ' ';i++) s = indexOfAt - i; for(int i = 0;lineFromFile.charAt(indexOfAt+i) != ' ';i++) e = indexOfAt + i; if(listOfMail.indexOf(lineFromFile.substring(s,e).toLowerCase) < 0); { listOfMail.Add(lineFromFile.substring(s,e).toLowerCase); fout.println(lineFromFile.substring(s,e).toLowerCase); System.out.println(lineFromFile.substring(s,e).toLowerCase); } indexOfAt = lineFromFile.indexOf('@',indexOfAt + 1); } } fin.close(); fout.close(); int count = 0; count = listOfMail.size(); if (count == 0) System.out.println("Sorry, no email addresses were found in the file " + userInput); else System.out.println(count + "email addresses "); 補足 またこのままだと読み込んだアドレス全て小文字になってしまうのですがそうではなく読み込んだメールアドレスAAA@BBBとaaa@bbbは同じメールアドレスとして扱い片方だけをコンソールに載せるというかたちにするにはどうすればよいのでしょうか?

  • 足し算するプログラム

    タイトルの通りですが足し算をするプログラムを書いてみました。 第一引数を第二引数を足し算するのですが引数に「001」や「002」などの数字が入力された時に足し算した結果として素直に「00*」と足し算が出来ません。何かいい方法は無いでしょうか?教えてください。 import java.text.*; class Tashizan { public static void main(String[] args) { try { if(args.length == 0) { System.out.println("引数を整数値で入力して下さい。"); } else if(args.length == 1) { System.out.println("引数を整数値で2つ入力して下さい。"); } else if(args.length == 2) { int a = Integer.parseInt(args[0]); int b = Integer.parseInt(args[1]); if(a <= 999999999 && b <= 999999999) { int wa = a + b; System.out.println(a + "+" + b + "の和は" + wa + "です。"); } else { System.out.println("入力した桁数を9桁以下か確認してください。"); } } else { System.out.println("引数は整数値で2つ入力して下さい。"); } } catch(NumberFormatException nfe) { System.out.println("整数値を2つ入力して下さい。"); } catch(Exception e) { System.out.println(e + "エラー発生!処理を終了します。"); } } }

    • ベストアンサー
    • Java