-
- natoi
- 829ポイント
- 投稿時間:2008/10/15 23:21
今回も初歩的なプログラムですみません。 何となく書いて見ました。
本文
みなさんこんばんは。 前回は沢山の色んな言語で書いた ソースコードをコメントして頂き嬉しかったです。 今回も参考書を片手にちょっと書いて見ました。入力した数までの繰り返し処理を行ってる様ですが その行った繰り返し処理の合計はどう言う事なのかよく分からないです。 それにしてもお腹空きました…今晩は冷凍庫にあるスパゲッティーでも食べよう。コピペする ブログに貼るimport java.io.*; class Sample3 { public static void main(String args[])throws IOException { System.out.println("いくつまでの合計を求めますか?"); BufferedReader br =new BufferedReader(new InputStreamReader(System.in)); String str =br.readLine(); int num = Integer.parseInt(str); int sum = 0; for(int i=1; i<=num; i++){ sum +=i; } System.out.print("1から" + num + "までの合計は" + sum + "です。"); } }
- コメント数 (3)
- クリップ数 (1)
- アクセス数 (2030)
- コメント
-
- fujiyoshisyouta
- 13366ポイント
- 2008/10/15 23:36
10 BufferedReader br =new BufferedReader(new InputStreamReader(System.in));何時も疑問だったんですが、この手のプログラムで BufferedReaderをかませる理由ってなんですかね 教えてください 詳しい方BufferedReaderをかませないやり方を考えてみました
めんどくさいですコピペする ブログに貼るclass Sample3 { public static void main(String args[])throws IOException { System.out.println("いくつまでの合計を求めますか?"); InputStreamReader ir = new InputStreamReader(System.in); double num = 0.0; int buf = 0; int i = 0; // 10は改行コードの文字コード // 改行されるまで入力を受け付ける for( i = 0 ; 10 != (buf = ir.read()) ; i--){ // 1の文字コードが49なので48を引けば数字になる // 入力された文字の先頭から1/10のi乗ををかけていく num += (buf - 48) * Math.pow(10,i); } //123と入力すると //1.23となるので最後の桁が0以上となるまで10のn乗する num *= Math.pow(10,Math.abs(i)-1); int sum = 0; for( i=1; i<=num; i++){ sum +=i; } System.out.print("1から" + num + "までの合計は" + sum + "です。"); } }![]()
-
- fujiyoshisyouta
- 13366ポイント
- 2008/10/16 12:09
試しに、素直なC#で書き直してみました。これだとメインロジック(Main()メソッド)が長すぎるので、ちょっといじってみました。コピペする ブログに貼る// サンプル1 using System; namespace sum { class Program { static void Main(string[] args) { string str; // コンソールからの入力を受け取る int num = 0; // コンソールから入力された内容を、値に変換後ここに保存する int sum = 0; // 合計値を保存する変数 // プロンプトを表示し、ユーザー入力を促す Console.WriteLine("いくつまでの合計を求めますか?"); str=Console.ReadLine(); if (!int.TryParse(str, out num)) { // 入力が不正な場合は例外をスローする throw new ApplicationException(string.Format("入力された値(\"{0}\")が数値に変換できませんでした。",str)); } // 1から入力された値(=num)までを加算する for (int idx = 1; idx <= num; idx++) { sum += idx; } // 最後に画面印書する Console.WriteLine("1から{0}までの合計は{1}です。", num, sum); } } }入力エラーについては、コピペする ブログに貼る// サンプル2 using System; namespace sum { class Program { // アクセッサ static string SUM { set { // valueは、アクセッサSUMに入力された値(=Console.ReadLine())を指す。 if (!int.TryParse(value, out num)) { // 入力が不正な場合は例外をスローする throw new ApplicationException(string.Format("入力された値(\"{0}\")が数値に変換できませんでした。", value)); } // 1から入力された値(=num)までを加算する for (int idx = 1; idx <= num; idx++) { sum += idx; } } get { return string.Format("1から{0}までの合計は{1}です。", num, sum); } } // クラスのメンバ変数 static int num = 0; // コンソールから入力された内容を、値に変換後ここに保存する static int sum = 0; // 合計値を保存する変数 // Main()関数 static void Main(string[] args) { // プロンプトを表示し、ユーザー入力を促す Console.WriteLine("いくつまでの合計を求めますか?"); SUM = Console.ReadLine(); // 最後に画面印書する Console.WriteLine(SUM); } } }例外をApplicationExceptionにしているのは、わざとです。 ふつう、文字列を数値に変換するだけならint.Parse()メソッドで十分ですが、たとえば入力が"a"など数字以外の場合、システム例外(System.FormatExceptionが発生してしまいます。 ユーザーからの入力エラー程度のことで、システム例外を発生させるというのは、仕様の詰めが甘いと思われます。 入出力をきちんと把握できてないと思われてしまいます。 まあ、私のサンプルで使っている例外も、普通に考えればApplicationExceptionを継承した、たとえば「InvalidUserInputParameterException」みたいなクラスを作ると思いますけどね。。。
- 入力文字を変換するとき、int.TryParse()メソッドを使用。
- 入力が不正な場合、ApplicationExceptionをスローさせている。
0
コメント
(2009/01/16 10:08)
by prylin
- 0クリップ
- 1155アクセス
- プログラミング / 開発言語 / JavaScript
0
コメント
0
コメント
0
コメント
1
コメント
0
コメント

