首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Android 入門實作:輸入整數 n 計算級數和 S = 1 + 1/2! + ... + 1/n!

     編輯:程式設計疑難解答

這是經典的 Android 入門練習,涵蓋佈局 XML、Activity 邏輯、階乘計算與浮點數累加。以下提供完整可執行範例。

1. 佈局檔 res/layout/activity_main.xml

<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp"
    android:gravity="center">

    <EditText
        android:id="@+id/etInput"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="請輸入正整數 n"
        android:inputType="number"
        android:maxLength="5" />

    <Button
        android:id="@+id/btnCalc"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:text="計算" />

    <TextView
        android:id="@+id/tvResult"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="24dp"
        android:textSize="18sp"
        android:text="結果將顯示在這裡" />

</LinearLayout>

2. 主活動 MainActivity.java

package com.example.seriescalc;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    private EditText etInput;
    private TextView tvResult;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        etInput = findViewById(R.id.etInput);
        tvResult = findViewById(R.id.tvResult);
        Button btnCalc = findViewById(R.id.btnCalc);

        btnCalc.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String input = etInput.getText().toString().trim();
                if (input.isEmpty()) {
                    tvResult.setText("請輸入 n");
                    return;
                }
                int n = Integer.parseInt(input);
                if (n <= 0) {
                    tvResult.setText("n 必須為正整數");
                    return;
                }
                double sum = 0.0;
                long fact = 1;
                for (int i = 1; i <= n; i++) {
                    fact *= i; // 遞推計算階乘,避免重複
                    sum += 1.0 / fact;
                }
                tvResult.setText(String.format("S = %.10f", sum));
            }
        });
    }
}

關鍵點解析

  • 階乘遞推: fact *= i 利用上一輪結果,時間複雜度 O(n),避免巢狀迴圈 O(n²)。
  • 輸入驗證: 檢查空值、非數字、負數,提升健壯性。
  • 格式化輸出: String.format("%.10f", sum) 保留 10 位小數,觀察收斂趨勢 (趨近 e-1 ≈ 1.71828)。
  • 型別選擇: 階乘增長極快,long 最大支援 20!,超過需改用 BigInteger;題目 n 通常較小,long 足夠。

進階擴充

  • 使用 BigDecimal 進行高精度計算。
  • 加入進度條顯示大 n 計算進度。
  • 將計算移至子執行緒 (RxJava/Coroutine) 避免 ANR。

複製上述程式碼建立專案即可跑通,適合初學者理解 Android 基本元件互動與演算法實作。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved