しむしむてるるの日記&雑談 同人誌の進捗やら仕事のあれこれやら書いています。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
[ --/--/-- --:-- ] スポンサー広告 | TB(-) | CM(-)

プログラムの練習問題1-画面に*を三角形に表示させる-

今日は、初心者的プログラムのコードを載せてみます。
プログラムの初心者は命令文の使い方は分かっても、アルゴリズムや考え方で躓く事が多いように思います。
なので、このblogでは簡単なコードと考え方も少しずつ載せていこうと思います。

さて、今回のお題は...
「*(アスタリスク)を三角形に表示させるプログラムを組む」です。
表示結果としては下のようになります。
*
**
***
****
*****
******
*******

さて、どんなプログラムになるでしょう?

まず始めに考えられるのはこんなコードでしょう。
public class PrintTest{
public static void main( String[] args){
System.out.println("*"); // 1行目の表示
System.out.println("**"); // 2行目の表示
System.out.println("***"); // 3行目の表示
System.out.println("****");
System.out.println("*****");
System.out.println("******");
System.out.println("*******");// 7行目の表示
}
}

単純明快ですね。何も考える必要がありません。
表示結果そのものを1行ずつ表示しているだけです。

ここで、もう少し考えてみます。
表示結果をみると...1行目は*が1つ、2行目は*が2つ......7行目は*が7つとなっている事が分かります。
つまり、行数と*の数が同じなのです。
1行目は*を1つ表示して改行。
2行目は*を2つ表示して改行。
...
7行目は*を7つ表示して改行。
となるコードを考えます。
その考え方でコードを組むと...
public class PrintTest2{
public static void main( String[] args){
for( int i=1; i<=7; i++){ // 行数ループ(iは何行目かを示す)
// i個の*を表示するfor文
for( int j=1; j<=i; j++){ // 文字数ループ(i回ループ)
System.out.print("*"); // *を表示(改行なし)
}
System.out.println(""); // *を表示し終わったら改行
}
}
}

となります。

そして、もう1つ...
行が1つ進むと*の数が1つ増えていると考える事も出来ます。
public class PrintTest3{
public static void main( String[] args){
String str=""; // 文字列の初期化
for( int i=1; i<=7; i++){ // 行数ループ(iは何行目かを示す)
str = str + "*"; // 保持している文字列に*を1つ追加
System.out.println(str); // 文字列を表示&改行
}
}
}

こんなコードも書けます。
これは、Stringクラスを用いて、保持している文字列に*を1つずつ追加して表示させています。
コードとしてはこれが一番短くなりますね。
そして、2つめのfor文の入れ子より読み易い気がします。

プログラムとしては、変更に強そうな2つめが良い気がしますが、
今回の問題の最適解は3つめでしょうか?
このあたりは人それぞれ、コードを書く人のセンスになりますが。

と言ったところで1回目のプログラム練習を終わります。
次回は、
     *     
***
*****
*******
*********
***********

と画面に表示するプログラムを考えたいと思います。

<次回:プログラムの練習問題2-画面に*を三角形に表示させる2-
関連記事
スポンサーサイト
[ 2012/03/04 07:46 ] プログラム | TB(0) | CM(0)
コメントの投稿












管理者にだけ表示を許可する
トラックバック:
この記事のトラックバック URL

FC2カウンター
カレンダー
09 | 2017/10 | 11
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
Twitter@sweetsblast
過去ログ

2017年 08月 【1件】
2017年 06月 【3件】
2017年 05月 【3件】
2017年 04月 【3件】
2017年 03月 【5件】
2017年 01月 【1件】
2016年 09月 【2件】
2016年 04月 【2件】
2016年 03月 【2件】
2016年 01月 【5件】
2015年 12月 【3件】
2014年 05月 【1件】
2014年 04月 【1件】
2013年 12月 【1件】
2013年 03月 【4件】
2013年 02月 【3件】
2013年 01月 【1件】
2012年 12月 【3件】
2012年 11月 【4件】
2012年 10月 【2件】
2012年 09月 【4件】
2012年 08月 【2件】
2012年 07月 【3件】
2012年 06月 【11件】
2012年 05月 【11件】
2012年 04月 【9件】
2012年 03月 【15件】
2012年 02月 【17件】
2012年 01月 【5件】
2011年 12月 【14件】
2011年 11月 【11件】
2011年 10月 【19件】
2011年 09月 【10件】
2011年 08月 【4件】
2011年 07月 【11件】
2011年 06月 【4件】
2011年 05月 【1件】
2011年 04月 【17件】
2011年 03月 【29件】
2011年 02月 【24件】
2011年 01月 【30件】
2010年 12月 【30件】
2010年 11月 【22件】
2010年 10月 【26件】
2010年 09月 【27件】
2010年 08月 【30件】
2010年 07月 【27件】
2010年 06月 【24件】
2010年 05月 【7件】
2010年 04月 【6件】
2010年 03月 【3件】
2010年 02月 【6件】
2010年 01月 【8件】
2009年 12月 【8件】
2009年 11月 【5件】
2009年 10月 【7件】
2009年 09月 【18件】
2009年 08月 【22件】
2009年 07月 【14件】
2009年 06月 【16件】
2009年 05月 【28件】
2009年 04月 【25件】
2009年 03月 【5件】
2009年 01月 【2件】
2008年 12月 【1件】
2008年 11月 【2件】
2008年 10月 【3件】
2008年 09月 【6件】
2008年 08月 【3件】
2008年 07月 【2件】
2008年 06月 【2件】
2008年 05月 【3件】
2008年 04月 【4件】
2008年 03月 【11件】
2008年 02月 【12件】
2008年 01月 【7件】
2007年 12月 【8件】
2007年 11月 【5件】
2007年 10月 【8件】
2007年 09月 【6件】
2007年 08月 【15件】
2007年 07月 【10件】
2007年 06月 【14件】
2007年 05月 【12件】
2007年 04月 【10件】
2007年 03月 【7件】
2007年 02月 【19件】
2007年 01月 【18件】
2006年 12月 【25件】
2006年 11月 【27件】
2006年 10月 【19件】
2006年 09月 【26件】
2006年 08月 【12件】
2006年 07月 【5件】



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。