每日总结开发简单app
| 学习的技能/知识 | 运动 | 提升 | 不足 |
|---|---|---|---|
| 学会了用Android Studio开发简单app | 20分钟运动 | 抵住了手机的诱惑,写了3个小时的作业 | 因为一些情感原因,一上午的课都在走神,收获很少 |
使用Android Studio开发app流程
1.下载Android Studio开发工具,并完成相关配置的下载
2.完成了课堂测试任务:做一个建议的地铁计价app
实现代码如下:
activity_main.xml文件的配置,用来对手机界面布局
<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">
<!-- 起点站选择 -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="起点站:" />
<Spinner
android:id="@+id/spinner_start"
android:layout_width="match_parent"
android:layout_height="56dp"
android:minHeight="48dp" />
<!-- 终点站选择 -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="终点站:" />
<Spinner
android:id="@+id/spinner_end"
android:layout_width="match_parent"
android:layout_height="56dp"
android:minHeight="48dp" />
<!-- 购票数量输入 -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="购票数量:" />
<EditText
android:id="@+id/editText_quantity"
android:layout_width="match_parent"
android:layout_height="56dp"
android:minHeight="48dp"
android:inputType="number"
android:hint="请输入购票数量"
android:autofillHints="quantity" />
<!-- 收费规则 -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="收费规则:每3站收费1元,不足3站按1元收费,起点站不算。" />
<!-- 立即购票按钮 -->
<Button
android:id="@+id/button_buy"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="立即购票"
android:minHeight="48dp" />
<!-- 购票结果 -->
<TextView
android:id="@+id/textView_result"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:textSize="18sp"
android:textColor="#0000FF" />
</LinearLayout>
MainActivity代码实现
package com.example.myapplication;
import android.os.Bundle;
import android.view.View;
import androidx.appcompat.app.AppCompatActivity;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import java.util.*;
public class MainActivity extends AppCompatActivity {
private Spinner spinnerStart, spinnerEnd;
private EditText editTextQuantity;
private TextView textViewResult;
// 地铁站点图
private Map<String, Map<String, Integer>> metroGraph;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化组件
spinnerStart = findViewById(R.id.spinner_start);
spinnerEnd = findViewById(R.id.spinner_end);
editTextQuantity = findViewById(R.id.editText_quantity);
textViewResult = findViewById(R.id.textView_result);
Button buttonBuy = findViewById(R.id.button_buy);
// 初始化地铁站点图
initializeMetroGraph();
// 获取所有站点名称
List<String> stations = new ArrayList<>(metroGraph.keySet());
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, stations);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerStart.setAdapter(adapter);
spinnerEnd.setAdapter(adapter);
// 立即购票按钮点击事件
buttonBuy.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
calculateAndDisplayResult();
}
});
}
// 初始化地铁站点图
private void initializeMetroGraph() {
metroGraph = new HashMap<>();
// 添加所有站点
addStation("西王");
addStation("时光街");
addStation("长城桥");
addStation("和平医院");
addStation("烈士陵园");
addStation("新百广场");
addStation("解放广场");
addStation("平安大街");
addStation("北国商城");
addStation("博物院");
addStation("体育场");
addStation("北宋");
addStation("谈固");
addStation("朝晖桥");
addStation("白佛");
addStation("留村");
addStation("火炬广场");
addStation("南村");
addStation("石家庄东站");
addStation("洨河大道");
addStation("西庄");
addStation("东庄");
addStation("会展中心");
addStation("园博园");
addStation("福泽");
addStation("柳辛庄");
addStation("庄窠-铁道大学");
addStation("义堂");
addStation("建和桥");
addStation("长安公园");
addStation("东里");
addStation("槐安桥");
addStation("欧韵公园");
addStation("元村");
addStation("西三教");
addStation("石家庄站");
addStation("塔坛");
addStation("汇通路");
addStation("孙村");
addStation("塔冢");
addStation("东王");
addStation("南王");
addStation("位同");
addStation("东二环南路");
addStation("南位");
addStation("仓丰路留村");
addStation("嘉华路");
addStation("西三庄");
addStation("高柱");
addStation("柏林庄");
addStation("市庄");
addStation("市二中");
addStation("东里");
addStation("槐安桥");
addStation("西三教");
addStation("石家庄站");
addStation("汇通路");
addStation("孙村");
addStation("塔冢");
addStation("东王");
addStation("南王");
addStation("位同");
addStation("东二环南路");
addStation("西仰陵");
addStation("中仰陵");
addStation("南豆");
addStation("太行南大街");
addStation("乐乡");
// 添加连接关系(1号线)
addConnection("西王", "时光街", 1);
addConnection("时光街", "长城桥", 1);
addConnection("长城桥", "和平医院", 1);
addConnection("和平医院", "烈士陵园", 1);
addConnection("烈士陵园", "新百广场", 1);
addConnection("新百广场", "解放广场", 1);
addConnection("解放广场", "平安大街", 1);
addConnection("平安大街", "北国商城", 1);
addConnection("北国商城", "博物院", 1);
addConnection("博物院", "体育场", 1);
addConnection("体育场", "北宋", 1);
addConnection("北宋", "谈固", 1);
addConnection("谈固", "朝晖桥", 1);
addConnection("朝晖桥", "白佛", 1);
addConnection("白佛", "留村", 1);
addConnection("留村", "火炬广场", 1);
addConnection("火炬广场", "南村", 1);
addConnection("南村", "石家庄东站", 1);
addConnection("石家庄东站", "洨河大道", 1);
addConnection("洨河大道", "西庄", 1);
addConnection("西庄", "东庄", 1);
addConnection("东庄", "会展中心", 1);
addConnection("会展中心", "园博园", 1);
addConnection("园博园", "福泽", 1);
// 添加连接关系(2号线)
addConnection("柳辛庄", "庄窠-铁道大学", 1);
addConnection("庄窠-铁道大学", "义堂", 1);
addConnection("义堂", "建和桥", 1);
addConnection("建和桥", "长安公园", 1);
addConnection("长安公园", "北国商城", 1);
addConnection("北国商城", "博物院", 1);
addConnection("博物院", "平安大街", 1);
addConnection("平安大街", "解放广场", 1);
addConnection("解放广场", "新百广场", 1);
addConnection("新百广场", "东里", 1);
addConnection("东里", "槐安桥", 1);
addConnection("槐安桥", "欧韵公园", 1);
addConnection("欧韵公园", "元村", 1);
addConnection("元村", "西三教", 1);
addConnection("西三教", "石家庄站", 1);
addConnection("石家庄站", "塔坛", 1);
addConnection("塔坛", "汇通路", 1);
addConnection("汇通路", "孙村", 1);
addConnection("孙村", "塔冢", 1);
addConnection("塔冢", "东王", 1);
addConnection("东王", "南王", 1);
addConnection("南王", "位同", 1);
addConnection("位同", "东二环南路", 1);
addConnection("东二环南路", "南位", 1);
addConnection("南位", "仓丰路留村", 1);
addConnection("仓丰路留村", "嘉华路", 1);
// 添加连接关系(3号线)
addConnection("西三庄", "高柱", 1);
addConnection("高柱", "柏林庄", 1);
addConnection("柏林庄", "市庄", 1);
addConnection("市庄", "市二中", 1);
addConnection("市二中", "新百广场", 1);
addConnection("新百广场", "东里", 1);
addConnection("东里", "槐安桥", 1);
addConnection("槐安桥", "西三教", 1);
addConnection("西三教", "石家庄站", 1);
addConnection("石家庄站", "汇通路", 1);
addConnection("汇通路", "孙村", 1);
addConnection("孙村", "塔冢", 1);
addConnection("塔冢", "东王", 1);
addConnection("东王", "南王", 1);
addConnection("南王", "位同", 1);
addConnection("位同", "东二环南路", 1);
addConnection("东二环南路", "西仰陵", 1);
addConnection("西仰陵", "中仰陵", 1);
addConnection("中仰陵", "南豆", 1);
addConnection("南豆", "太行南大街", 1);
addConnection("太行南大街", "乐乡", 1);
}
// 添加站点
private void addStation(String station) {
metroGraph.put(station, new HashMap<>());
}
// 添加连接关系
private void addConnection(String station1, String station2, int distance) {
metroGraph.get(station1).put(station2, distance);
metroGraph.get(station2).put(station1, distance);
}
// 计算票价并显示结果
private void calculateAndDisplayResult() {
String startStation = spinnerStart.getSelectedItem().toString();
String endStation = spinnerEnd.getSelectedItem().toString();
if (startStation.equals(endStation)) {
textViewResult.setText("请选择不同的起点站和终点站!");
return;
}
// 计算最短路径
int shortestDistance = findShortestPath(startStation, endStation);
if (shortestDistance == -1) {
textViewResult.setText("无法找到路径!");
return;
}
// 计算票价
int pricePerTicket = (shortestDistance / 3) + (shortestDistance % 3 == 0 ? 0 : 1);
if (pricePerTicket < 1) {
pricePerTicket = 1; // 至少1元
}
// 获取购票数量
int quantity = 1;
try {
quantity = Integer.parseInt(editTextQuantity.getText().toString());
if (quantity <= 0) {
textViewResult.setText("购票数量必须大于0!");
return;
}
} catch (NumberFormatException e) {
e.printStackTrace();
textViewResult.setText("请输入有效的购票数量!");
return;
}
// 计算总金额
int totalPrice = pricePerTicket * quantity;
// 显示结果
textViewResult.setText("购票成功!最短路径:" + shortestDistance + "站,总金额:" + totalPrice + "元");
}
// Dijkstra算法计算最短路径
private int findShortestPath(String start, String end) {
Map<String, Integer> distances = new HashMap<>();
for (String station : metroGraph.keySet()) {
distances.put(station, Integer.MAX_VALUE);
}
distances.put(start, 0);
PriorityQueue<String> queue = new PriorityQueue<>(Comparator.comparingInt(distances::get));
queue.add(start);
while (!queue.isEmpty()) {
String current = queue.poll();
if (current.equals(end)) {
return distances.get(current);
}
for (Map.Entry<String, Integer> neighbor : metroGraph.get(current).entrySet()) {
String nextStation = neighbor.getKey();
int newDistance = distances.get(current) + neighbor.getValue();
if (newDistance < distances.get(nextStation)) {
distances.put(nextStation, newDistance);
queue.add(nextStation);
}
}
}
return -1; // 无法到达
}
}
效果展示

app下载链接
下载安装包

浙公网安备 33010602011771号