2025.3.13
学习内容:
-
重新搭建了一下环境
安装JDK 2·1,配置环境变量(JAVA_HOME、PATH)
安装IntelliJ IDEA,创建第一个Java项目 -
Java基础语法复习
- 变量与数据类型(基本类型、引用类型)
- 运算符与表达式(算术、逻辑、比较运算符)
- 流程控制语句(if-else、for、while)
我的收获:
成功配置Java开发环境,能独立创建并运行Java程序
复习了Java基本语法,熟悉了变量定义、条件判断和循环结构的使用
遇到的问题
环境变量配置错误,导致java -version命令无法执行
for循环嵌套逻辑混乱
地铁查询源代码
MainActivity类实现功能
package com.example.testdemo;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MainActivity extends AppCompatActivity {
private Spinner startSpinner, endSpinner;
private EditText quantityInput;
private TextView resultText;
private Map<String, List<String>> lineStations = new HashMap<>(); // 各线路站点数据
private Map<String, List<String>> stationLines = new HashMap<>(); // 站点所属线路
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化UI组件
startSpinner = findViewById(R.id.spinner_start);
endSpinner = findViewById(R.id.spinner_end);
quantityInput = findViewById(R.id.et_quantity);
Button buyButton = findViewById(R.id.btn_buy);
resultText = findViewById(R.id.tv_result);
// 初始化地铁线路数据
initMetroData();
// 获取所有站点名称(去重)
List<String> allStations = new ArrayList<>(stationLines.keySet());
Collections.sort(allStations); // 按字母排序
// 设置Spinner适配器
ArrayAdapter<String> adapter = new ArrayAdapter<>(
this, android.R.layout.simple_spinner_item, allStations
);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
startSpinner.setAdapter(adapter);
endSpinner.setAdapter(adapter);
// 购票按钮点击事件
buyButton.setOnClickListener(v -> calculateTicketPrice());
}
// 初始化地铁线路和站点数据
private void initMetroData() {
// 地铁1号线
List<String> line1 = Arrays.asList(
"西王", "时光街", "长城桥", "和平医院", "烈士陵园", "新百广场", "解放广场",
"平安大街", "北国商城", "博物院", "北宋", "谈固", "朝晖桥", "白佛", "火炬广场",
"石家庄东站", "南村", "洨河大道", "西庄", "东庄", "会展中心", "商务中心", "园博园", "福泽"
);
lineStations.put("1号线", line1);
// 地铁2号线
List<String> line2 = Arrays.asList(
"柳辛庄站", "庄窠铁道大学站", "义堂站", "建和桥站", "长安公园站", "北国商城",
"裕华路站", "槐中路站", "欧韵公园站", "元村站", "石家庄站", "塔坛站",
"仓丰路留村站", "南位站", "嘉华路站"
);
lineStations.put("2号线", line2);
// 地铁3号线
List<String> line3 = Arrays.asList(
"西三庄", "高柱", "柏林庄", "市庄", "市二中", "新百广场", "东里", "槐安桥",
"西三教", "石家庄站", "汇通路", "孙村", "塔冢", "东王", "南王", "位同",
"东二环南路", "西仰陵", "中仰陵", "南豆", "太行南大街", "乐乡"
);
lineStations.put("3号线", line3);
// 构建站点-线路映射关系
for (Map.Entry<String, List<String>> entry : lineStations.entrySet()) {
String line = entry.getKey();
for (String station : entry.getValue()) {
if (!stationLines.containsKey(station)) {
stationLines.put(station, new ArrayList<>());
}
stationLines.get(station).add(line);
}
}
}
// 计算票价
private void calculateTicketPrice() {
String start = startSpinner.getSelectedItem().toString();
String end = endSpinner.getSelectedItem().toString();
String quantityStr = quantityInput.getText().toString();
if (quantityStr.isEmpty()) {
showResult("请输入购票数量");
return;
}
int quantity = Integer.parseInt(quantityStr);
if (quantity <= 0) {
showResult("购票数量必须大于0");
return;
}
// 获取站点所属线路
List<String> startLines = stationLines.get(start);
List<String> endLines = stationLines.get(end);
if (startLines == null || endLines == null) {
showResult("无效站点");
return;
}
// 检查是否同一线路
List<String> commonLines = new ArrayList<>(startLines);
commonLines.retainAll(endLines);
int totalStations = 0;
if (!commonLines.isEmpty()) {
// 同一线路直接计算
totalStations = getStationsSameLine(start, end, commonLines.get(0));
} else {
// 跨线路换乘计算
totalStations = getStationsWithTransfer(start, end, startLines, endLines);
if (totalStations == -1) {
showResult("无法换乘");
return;
}
}
// 计算费用(每3站1元,向上取整)
int price = (int) Math.ceil(totalStations / 3.0) * quantity;
showResult("购票成功!总金额:" + price + "元");
}
// 同一线路计算站数
private int getStationsSameLine(String start, String end, String line) {
List<String> stations = lineStations.get(line);
int startIdx = stations.indexOf(start);
int endIdx = stations.indexOf(end);
return Math.abs(endIdx - startIdx); // 直接返回站数差
}
// 跨线路换乘计算
private int getStationsWithTransfer(String start, String end,
List<String> startLines, List<String> endLines) {
int minStations = Integer.MAX_VALUE;
// 遍历所有可能的换乘站
for (String sLine : startLines) {
for (String eLine : endLines) {
List<String> sStations = lineStations.get(sLine);
List<String> eStations = lineStations.get(eLine);
// 查找换乘站
for (String station : sStations) {
if (eStations.contains(station)) {
int st1 = getStationsSameLine(start, station, sLine);
int st2 = getStationsSameLine(station, end, eLine);
int total = st1 + st2;
if (total < minStations) {
minStations = total;
}
}
}
}
}
return minStations == Integer.MAX_VALUE ? -1 : minStations;
}
private void showResult(String msg) {
resultText.setText(msg);
}
}
activity_main.xml前端页面
<!-- 起点站 -->
<TextView
android:text="起点站"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Spinner
android:id="@+id/spinner_start"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<!-- 终点站 -->
<TextView
android:text="终点站"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"/>
<Spinner
android:id="@+id/spinner_end"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<!-- 购票数量 -->
<TextView
android:text="购票数量"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"/>
<EditText
android:id="@+id/et_quantity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number"/>
<!-- 购票按钮 -->
<Button
android:id="@+id/btn_buy"
android:text="立即购票"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"/>
<!-- 结果显示 -->
<TextView
android:id="@+id/tv_result"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:textSize="18sp"/>

浙公网安备 33010602011771号