You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio点击提交按钮应用崩溃问题求助

Android 绩点计算应用代码整理

我帮你把这个绩点计算应用的布局和逻辑代码整理成规范的格式,方便你调试和使用:

布局文件(activity_main.xml)

这里按照你的需求,包含了16个EditText(8组分数+绩点)、1个结果展示TextView和1个计算按钮:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp"
    android:gap="8dp">

    <!-- 科目1 分数+绩点 -->
    <EditText
        android:id="@+id/et_score1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="输入科目1分数"
        android:inputType="numberDecimal"/>
    <EditText
        android:id="@+id/et_gpa1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="输入科目1绩点"
        android:inputType="numberDecimal"/>

    <!-- 科目2 分数+绩点 -->
    <EditText
        android:id="@+id/et_score2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="输入科目2分数"
        android:inputType="numberDecimal"/>
    <EditText
        android:id="@+id/et_gpa2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="输入科目2绩点"
        android:inputType="numberDecimal"/>

    <!-- 科目3 分数+绩点 -->
    <EditText
        android:id="@+id/et_score3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="输入科目3分数"
        android:inputType="numberDecimal"/>
    <EditText
        android:id="@+id/et_gpa3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="输入科目3绩点"
        android:inputType="numberDecimal"/>

    <!-- 科目4 分数+绩点 -->
    <EditText
        android:id="@+id/et_score4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="输入科目4分数"
        android:inputType="numberDecimal"/>
    <EditText
        android:id="@+id/et_gpa4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="输入科目4绩点"
        android:inputType="numberDecimal"/>

    <!-- 科目5 分数+绩点 -->
    <EditText
        android:id="@+id/et_score5"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="输入科目5分数"
        android:inputType="numberDecimal"/>
    <EditText
        android:id="@+id/et_gpa5"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="输入科目5绩点"
        android:inputType="numberDecimal"/>

    <!-- 科目6 分数+绩点 -->
    <EditText
        android:id="@+id/et_score6"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="输入科目6分数"
        android:inputType="numberDecimal"/>
    <EditText
        android:id="@+id/et_gpa6"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="输入科目6绩点"
        android:inputType="numberDecimal"/>

    <!-- 科目7 分数+绩点 -->
    <EditText
        android:id="@+id/et_score7"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="输入科目7分数"
        android:inputType="numberDecimal"/>
    <EditText
        android:id="@+id/et_gpa7"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="输入科目7绩点"
        android:inputType="numberDecimal"/>

    <!-- 科目8 分数+绩点 -->
    <EditText
        android:id="@+id/et_score8"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="输入科目8分数"
        android:inputType="numberDecimal"/>
    <EditText
        android:id="@+id/et_gpa8"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="输入科目8绩点"
        android:inputType="numberDecimal"/>

    <!-- 结果展示TextView -->
    <TextView
        android:id="@+id/tv_result"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="计算结果将显示在这里"
        android:textSize="18sp"
        android:padding="8dp"
        android:background="#f0f0f0"/>

    <!-- 计算按钮 -->
    <Button
        android:id="@+id/btn_calculate"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="计算总绩点"/>

</LinearLayout>

Java逻辑代码(MainActivity.java)

我把你提供的代码补全,添加了完整的控件初始化、点击事件处理和绩点计算逻辑(默认按加权平均绩点计算,即分数作为权重):

package com.workingbros.ak.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    // 声明控件变量
    EditText s1, s2, s3, s4, s5, s6, s7, s8;
    EditText g1, g2, g3, g4, g5, g6, g7, g8;
    TextView resultTv;
    Button calculateBtn;

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

        // 初始化所有控件
        initViews();

        // 设置按钮点击事件
        calculateBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                calculateGPA();
            }
        });
    }

    // 初始化控件的方法
    private void initViews() {
        s1 = findViewById(R.id.et_score1);
        s2 = findViewById(R.id.et_score2);
        s3 = findViewById(R.id.et_score3);
        s4 = findViewById(R.id.et_score4);
        s5 = findViewById(R.id.et_score5);
        s6 = findViewById(R.id.et_score6);
        s7 = findViewById(R.id.et_score7);
        s8 = findViewById(R.id.et_score8);

        g1 = findViewById(R.id.et_gpa1);
        g2 = findViewById(R.id.et_gpa2);
        g3 = findViewById(R.id.et_gpa3);
        g4 = findViewById(R.id.et_gpa4);
        g5 = findViewById(R.id.et_gpa5);
        g6 = findViewById(R.id.et_gpa6);
        g7 = findViewById(R.id.et_gpa7);
        g8 = findViewById(R.id.et_gpa8);

        resultTv = findViewById(R.id.tv_result);
        calculateBtn = findViewById(R.id.btn_calculate);
    }

    // 计算绩点的方法
    private void calculateGPA() {
        try {
            // 获取所有分数和绩点的输入值
            double score1 = Double.parseDouble(s1.getText().toString().trim());
            double score2 = Double.parseDouble(s2.getText().toString().trim());
            double score3 = Double.parseDouble(s3.getText().toString().trim());
            double score4 = Double.parseDouble(s4.getText().toString().trim());
            double score5 = Double.parseDouble(s5.getText().toString().trim());
            double score6 = Double.parseDouble(s6.getText().toString().trim());
            double score7 = Double.parseDouble(s7.getText().toString().trim());
            double score8 = Double.parseDouble(s8.getText().toString().trim());

            double gpa1 = Double.parseDouble(g1.getText().toString().trim());
            double gpa2 = Double.parseDouble(g2.getText().toString().trim());
            double gpa3 = Double.parseDouble(g3.getText().toString().trim());
            double gpa4 = Double.parseDouble(g4.getText().toString().trim());
            double gpa5 = Double.parseDouble(g5.getText().toString().trim());
            double gpa6 = Double.parseDouble(g6.getText().toString().trim());
            double gpa7 = Double.parseDouble(g7.getText().toString().trim());
            double gpa8 = Double.parseDouble(g8.getText().toString().trim());

            // 计算加权平均绩点:(Σ(分数*绩点)) / Σ分数
            double totalWeighted = score1*gpa1 + score2*gpa2 + score3*gpa3 + score4*gpa4
                    + score5*gpa5 + score6*gpa6 + score7*gpa7 + score8*gpa8;
            double totalScore = score1 + score2 + score3 + score4 + score5 + score6 + score7 + score8;

            double finalGPA = totalWeighted / totalScore;

            // 显示结果,保留两位小数
            resultTv.setText(String.format("你的加权平均绩点为:%.2f", finalGPA));

        } catch (NumberFormatException e) {
            // 处理输入为空或非数字的情况
            resultTv.setText("请输入有效的数字!");
        }
    }
}

小提示

  • 我给布局加了android:inputType="numberDecimal",限制输入为数字,避免用户输入无效内容
  • 添加了异常处理,防止空输入或非数字输入导致崩溃
  • 结果显示保留两位小数,更符合绩点的展示习惯

内容的提问来源于stack exchange,提问作者Abhishek Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:03:39