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
相关产品推荐
相关产品推荐

