入力した数までの合計を求める ノウハウ(Tips)  

こんにちは ゲスト さん | ログイン | ヘルプ | okyuu.com Feed Feed

総合トップ / ノウハウ / プログラミング ノウハウ / 開発言語 ノウハウ / Java ノウハウ / 入力した数までの合計を求める

今回も初歩的なプログラムですみません。
何となく書いて見ました。
本文
みなさんこんばんは。
前回は沢山の色んな言語で書いた
ソースコードをコメントして頂き嬉しかったです。
今回も参考書を片手にちょっと書いて見ました。
コピペする ブログに貼る
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)

  • コメント

その行った繰り返し処理の合計はどう言う事なのかよく分からないです。
コピペする ブログに貼る
	sum +=i;
 のことでしょうかね?  これは
コピペする ブログに貼る
	sum =sum+i;
 と同じ意味です。  ズレてたらごめんなさいase02

10 BufferedReader br =new BufferedReader(new InputStreamReader(System.in));
何時も疑問だったんですが、この手のプログラムで BufferedReaderをかませる理由ってなんですかね 教えてください 詳しい方kirakira 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 + "です。");
        }
}
めんどくさいですmischievous

 試しに、素直なC#で書き直してみました。
コピペする ブログに貼る
//	サンプル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);
		}
	}
}
 これだとメインロジック(Main()メソッド)が長すぎるので、ちょっといじってみました。
コピペする ブログに貼る
//	サンプル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);
		}
	}
}
 入力エラーについては、
  1. 入力文字を変換するとき、int.TryParse()メソッドを使用。
  2. 入力が不正な場合、ApplicationExceptionをスローさせている。
 例外をApplicationExceptionにしているのは、わざとです。  ふつう、文字列を数値に変換するだけならint.Parse()メソッドで十分ですが、たとえば入力が"a"など数字以外の場合、システム例外(System.FormatExceptionが発生してしまいます。  ユーザーからの入力エラー程度のことで、システム例外を発生させるというのは、仕様の詰めが甘いと思われます。  入出力をきちんと把握できてないと思われてしまいます。  まあ、私のサンプルで使っている例外も、普通に考えればApplicationExceptionを継承した、たとえば「InvalidUserInputParameterException」みたいなクラスを作ると思いますけどね。。。

9
9
コメント
(2008/10/09 00:53) by natoi
1
0
コメント
(2008/10/18 02:27) by natoi
0
0
コメント
0
0
コメント
1
0
コメント
(2008/11/22 22:55) by natoi
4
4
コメント
(2008/10/20 23:38) by natoi
あなたの問題は解決しましたか?

okyuu.comはITエンジニアのための質問サイトです。あなたの質問に答えてくれるエンジニアがいるかもしれません。なんと回答率は89

はじめての方へ

バッヂ取得者一覧
yusuke akabone

カテゴリ

特集

okyuu.comポイント獲得を競って、話題の賞品をゲットしよう! okyuu.comポイント獲得を競って、話題の賞品をゲットしよう!
新しい評価指標「okyuu.comポイント」を多く獲得して、話題の賞品を手に入れよう!
ソフトウェアを公開するのが楽しい 岡野真也さん ソフトウェアを公開するのが楽しい 岡野真也さん
ソフトウェアを公開するのが面白くてたまらない。作っては公開というのが彼のやり方だが、若きエンジニアにとってはそれくらいがちょうどいいのかもしれない。
コンピュータは世界を広げる実験道具 西尾泰和さん コンピュータは世界を広げる実験道具 西尾泰和さん
プログラミング、サイエンス、デザイン マルチな彼にとって、コンピュータは未知の世界を広げるための道具であることに変わりはない。今後の展開が楽しみだ。
理想のOS開発に人生を賭ける 川合秀実さん 理想のOS開発に人生を賭ける 川合秀実さん
OSASK計画代表の川合さんは、人生の1秒を惜しみながら独自OSの開発にいそしむ。
「楽しむ」それが豊かなエンジニアになるコツ 坂井恵さん 「楽しむ」それが豊かなエンジニアになるコツ 坂井恵さん
日本MySQLユーザ会の副代表を務める坂井恵さん。技術の現場で会社運営に興味を持ち、独立起業の道を選んだエンジニアだ。
夢はエンジニアに強い影響を与える本を書くこと 松信嘉範さん 夢はエンジニアに強い影響を与える本を書くこと 松信嘉範さん
ソニーの情報シスから日本を代表するMySQLのコンサルタントに。彼が魅せられたオープンソースの世界とは?
お友達紹介機能をつかってポイントGET! お友達紹介機能をつかってポイントGET!
お友達を招待してみんなでokyuuポイントをGETしよう!
オープンソースの活動「すごく、いい」 前坂徹さん オープンソースの活動「すごく、いい」 前坂徹さん
オープンソースプロジェクトで活躍する若き新鋭。コミュニティ活動の感想を尋ねると「すごく、いい」と満面の笑み。
コンピュータは創造力を刺激する 奥一穂さん コンピュータは創造力を刺激する 奥一穂さん
天才エンジニアとしての国際的な評価も高い奥一穂さん。世間からのスマートだとの評価には「自分は広く浅くだから」とさらり。
25歳からプログラミング「泣きながら覚えた」 庄司嘉織さん 25歳からプログラミング「泣きながら覚えた」 庄司嘉織さん
25歳でプログラマーに転向した。いまやjava-jaを立ち上げるなど精力的なエンジニアだ。
Rails勉強会@東京は“キャスト”の気持ちで 諸橋恭介さん Rails勉強会@東京は“キャスト”の気持ちで 諸橋恭介さん
大学時代、偶然手にしたMacが諸橋さんにITエンジニアの道を開いた。
"シャイモード"機能を活用しよう! "シャイモード"機能を活用しよう!
こんな質問してもいいのかな?そんなときは"シャイモード"で投稿!
RX-7とサーバ運用の意外な共通点 並河祐貴さん RX-7とサーバ運用の意外な共通点 並河祐貴さん
Amazon EC2を巧みに使いこなすTIS/SonicGardenの並河さん。「腕一本で食べていきたい」とITエンジニアを目指した。
「ブラックボックスは不安でしょ」 ひろせまさあきさん 「ブラックボックスは不安でしょ」 ひろせまさあきさん
エンジニアが楽しくて仕方がない。オープンソースを組み合わせてシステムを作り上げるのが彼の矜持のようだ。
Perlの地位向上を胸に 牧大輔さん Perlの地位向上を胸に 牧大輔さん
endeworksの牧大輔さんは社団法人JPAを立ち上げ、Perlの企業利用を促進したいという。
偶然からCTOへ ライブドアCTO池邉智洋さん 偶然からCTOへ ライブドアCTO池邉智洋さん
池邉智洋さんはライブドアCTOの技術メンバーを先頭で率いる。「まずはやって見せることも大事」と語る。