日別アーカイブ: 2012-11-05

Androidアプリ第2弾

・初歩からスタートするAndroidアプリ開発

今回は、等差数列の和を求めるアプリを作ってみます。公差1でn項までの等差数列の和はn(n+1)/2で簡単に求めることができます。数式で表現すれば次のようになります。それでは早速、スタートします。


 

1)アルゴリズムは加算をn回繰り返して求めます。和をtとすればtをゼロに設定し、初項から順に加え新しいtとしてn項まで加算を繰り返します。n項の値が最初から分かっているので算出法は単純ですが、項数が増すほどn(n+1)/2で求めるよりも算出時間がかかり得策ではありません。

しかし、算出式のない大学共通学力試験の科目の合計点を求める場合などに応用できるので、敢えてこの方法を採用します。算出法が1つだけでない点に興味を抱いていただけるとありがたいです。

2)プロジェクトは前回と同様に、ECLIPSEプロジェクト新規作成画面で作成します。プロジェクト名とApplication NameにはSequenceを、ランチャーアイコンには星印を、Activity Nameにはcalculateを指定します。

 

 

3)srcフォルダのCalculate.javaに修正を加えます。

プロジェクト全ファイルは末尾に添付した圧縮を解凍して得られます。今回、プラグインツール[Syntax highlighter Evolved]をインストールしましたので、ソースコードに行番号が表示されて見やすくなりましたがコピー&ペーストしても行番号は付きません。

<SourceCode>

package com.sample.sequence; // 2012-11-12

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.graphics.*;
import android.os.Bundle;
import android.view.View;

// MainClass
public class Calculate extends Activity {
    /** Called when the activity is first created. **/
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // make instance of ViewClass.
    MyCircleView view = new MyCircleView(getApplication());
    // set View.
    setContentView(view);
    }
}

// display class
@SuppressLint("DrawAllocation")
class MyCircleView extends View {
    // initialize View
    public MyCircleView(Context context) {
    super(context);
    setFocusable(true);
}

    // actualy,method of display.
    protected void onDraw(Canvas canvas) {
        int t = 0; // 和をクリアする
        for(int i = 0; i             t += i; // 順次、項値を加え、新しい和にする
        }
        Paint paint = new Paint(); // make paint-object
        super.onDraw(canvas);
        // set back-color.
        canvas.drawColor(Color.WHITE);
        paint.setTextSize(20); // make display-object.
        // make display-object.
        canvas.drawText("等差数列の和=" + t, 40, 100, paint); // 算出した和を表示する

    }
}

4)ビルドするために、「実行」します。

錠を右のスピーカまでドラッグして実行に移します。

5)ファイル一覧

C:.
│  .classpath
│  .project
│  AndroidManifest.xml
│  ic_launcher-web.png
│  proguard-project.txt
│  project.properties
│  Tree.TXT
│  
├─assets
├─bin
│  │  AndroidManifest.xml
│  │  classes.dex
│  │  jarlist.cache
│  │  resources.ap_
│  │  Sequence.apk
│  │  
│  ├─classes
│  │  └─com
│  │      └─user
│  │          └─sequence
│  │                  BuildConfig.class
│  │                  Calculate.class
│  │                  MyCircleView.class
│  │                  R$attr.class
│  │                  R$drawable.class
│  │                  R$id.class
│  │                  R$layout.class
│  │                  R$menu.class
│  │                  R$string.class
│  │                  R$style.class
│  │                  R.class
│  │                  
│  └─res
│      ├─drawable-hdpi
│      │      ic_action_search.png
│      │      ic_launcher.png
│      │      
│      ├─drawable-ldpi
│      │      ic_launcher.png
│      │      
│      ├─drawable-mdpi
│      │      ic_action_search.png
│      │      ic_launcher.png
│      │      
│      └─drawable-xhdpi
│              ic_action_search.png
│              ic_launcher.png
│              
├─gen
│  └─com
│      └─user
│          └─sequence
│                  BuildConfig.java
│                  R.java
│                  
├─libs
│      android-support-v4.jar
│      
├─res
│  ├─drawable-hdpi
│  │      ic_action_search.png
│  │      ic_launcher.png
│  │      
│  ├─drawable-ldpi
│  │      ic_launcher.png
│  │      
│  ├─drawable-mdpi
│  │      ic_action_search.png
│  │      ic_launcher.png
│  │      
│  ├─drawable-xhdpi
│  │      ic_action_search.png
│  │      ic_launcher.png
│  │      
│  ├─layout
│  │      activity_calculate.xml
│  │      
│  ├─menu
│  │      activity_calculate.xml
│  │      
│  └─values
│          strings.xml
│          styles.xml
│          
└─src
    └─com
        └─user
            └─sequence
                    Calculate.java

6)Sequenceプロジェクト内の全ファイル(Sequence.zip)を添付します。エラーが発生することなく実行までこぎつけられましたが、開発環境が異なりエラーが発生することがあるかも知れません。エラーのガイドメッセージやネットのお助け情報により解決できそうです。

Sequence