当前位置: 首页 > news >正文

还是标题

  • 导入ArrayList和Scanner
    import java.util.ArrayList;
    import java.util.Scanner;

    public class Main {
    // 静态集合:存放所有注册的用户对象
    static ArrayList userList = new ArrayList<>();
    // 静态集合:存放所有新闻对象
    static ArrayList newsList = new ArrayList<>();
    // 当前登录的用户对象,未登录时为null
    static User currentUser = null;
    // 扫描器,用于接收键盘输入
    static Scanner scanner = new Scanner(System.in);

    // 程序入口
    public static void main(String[] args) {
    while (true) {
    System.out.println("\n====== 微头条主菜单 ======");
    System.out.println("1. 注册");
    System.out.println("2. 登录");
    System.out.println("3. 查看新闻列表");
    System.out.println("4. 发布新闻");
    System.out.println("5. 退出");
    System.out.print("请选择:");
    int choice = scanner.nextInt();
    scanner.nextLine(); // 吃掉换行符

    switch (choice) {
    case 1:
    register();
    break;
    case 2:
    login();
    break;
    case 3:
    showNewsList();
    break;
    case 4:
    publishNews();
    break;
    case 5:
    System.out.println("再见!");
    scanner.close();
    return;
    default:
    System.out.println("无效选择!");
    }
    }
    }

    // 注册方法
    static void register() {
    System.out.print("用户名:");
    String name = scanner.nextLine();

    for (User u : userList) {
    if (u.getUsername().equals(name)) {
    System.out.println("用户名已存在!");
    return;
    }
    }

    System.out.print("密码:");
    String pwd = scanner.nextLine();

    userList.add(new User(name, pwd));
    System.out.println("注册成功!");
    }

    // 登录方法
    static void login() {
    System.out.print("用户名:");
    String name = scanner.nextLine();
    System.out.print("密码:");
    String pwd = scanner.nextLine();

    for (User u : userList) {
    if (u.getUsername().equals(name) && u.getPassword().equals(pwd)) {
    currentUser = u;
    System.out.println("登录成功!");
    return;
    }
    }
    System.out.println("用户名或密码错误!");
    }

    // 发布新闻方法
    static void publishNews() {
    if (currentUser == null) {
    System.out.println("请先登录!");
    return;
    }

    System.out.print("标题:");
    String title = scanner.nextLine();
    System.out.print("内容:");
    String content = scanner.nextLine();

    newsList.add(new News(title, content));
    System.out.println("发布成功!");
    }

    // 查看新闻列表方法
    static void showNewsList() {
    System.out.println("\n====== 新闻列表 ======");
    for (int i = 0; i < newsList.size(); i++) {
    News n = newsList.get(i);
    System.out.println((i+1) + ". " + n.getTitle() + " (" + n.getPublishTime() + ")");
    }
    }
    }

1. 包导入
import java.util.ArrayList;
import java.util.Scanner;
· import 用于引入 Java 内置的工具类
· ArrayList:动态数组,可自动扩容
· Scanner:接收键盘输入
2. 静态变量(类变量)
static ArrayList<User> userList = new ArrayList<>();
static User currentUser = null;

· 用 static 修饰,属于类本身,所有方法可直接访问
· 不需要创建 Main 对象就能使用
· 在整个程序运行期间保持数据
3. ArrayList 集合操作
操作 代码 说明
添加元素 userList.add(new User(...)) 追加到末尾
获取元素 newsList.get(i) 根据索引获取
获取大小 newsList.size() 返回元素个数
遍历 for (User u : userList) 增强for循环
4. 增强 for 循环(foreach)
for (User u : userList) {
// 直接使用 u
}
· 语法:for (元素类型 变量名 : 数组或集合)
· 不需要索引,代码更简洁
· 只能读取,不能修改集合结构
5. Scanner 输入细节
int choice = scanner.nextInt();
scanner.nextLine(); // 吃掉换行符

· nextInt() 只读取整数,不读取后面的换行符
· 不调用 nextLine() 吃掉换行符,后续 nextLine() 会读到空字符串
6. 字符串比较
u.getUsername().equals(name)

· 字符串比较必须用 .equals(),不能用 ==
· == 比较的是对象地址(是否同一个对象)
7. 方法定义与调用
static void register() { ... }

· static:静态方法,可直接被 main 调用
· void:无返回值
· 方法之间可以相互调用
8. 控制流语句
语句 作用 示例
while(true) 无限循环,配合 break/return 退出 主菜单循环
switch-case 多分支选择 根据 choice 执行不同操作
return 结束当前方法 注册失败时返回
break 跳出 switch 或循环 case 末尾
9. 对象引用
currentUser = u;  // 记录当前登录的用户

· currentUser 指向 userList 中的同一个 User 对象
· 不是复制,是共享同一块内存

  1. 类之间的协作

· Main 类依赖 User 类和 News 类
· 使用 new User(name, pwd) 创建对象
· 调用对象的 getter 方法获取属性/ 导入ArrayList和Scanner
import java.util.ArrayList;
import java.util.Scanner;

public class Main {
// 静态集合:存放所有注册的用户对象
static ArrayList userList = new ArrayList<>();//动态增删元素的容器
// 静态集合:存放所有新闻对象
static ArrayList newsList = new ArrayList<>();
// 当前登录的用户对象,未登录时为null
static User currentUser = null;
// 扫描器,用于接收键盘输入
static Scanner scanner = new Scanner(System.in);
//程序入口
public static void main(String[] args) {

while (true) {// 无限循环,一直显示主菜单除非用户主动退出
System.out.println("\n====== 微头条主菜单 ======");
System.out.println("1. 注册");
System.out.println("2. 登录");
System.out.println("3. 查看新闻列表");
System.out.println("4. 发布新闻");
System.out.println("5. 退出");
System.out.print("请选择:");
int choice = scanner.nextInt();//输入整数,创建scanner同时导入包
scanner.nextLine(); // 吃掉换行符,否则会读到空字符,跳过输入

switch (choice) {
case 1:
register(); // 调用注册方法
break;//回到while
case 2:
login(); // 调用登录方法
break;
case 3:
showNewsList(); // 显示新闻列表
break;
case 4:
publishNews(); // 发布新闻
break;
case 5:
System.out.println("再见!");
scanner.close();
return; // 结束main方法,程序退出
default:
System.out.println("无效选择!");
}
}
}

// 注册方法
static void register() {
System.out.print("用户名:");
String name = scanner.nextLine();

// 遍历userList,检查用户名是否已存在
for (User u : userList) {//增强型for循环:依次取出userList中每一个User赋值给u,循环体是对u的操作
if (u.getUsername().equals(name)) { // 用equals比较字符串
System.out.println("用户名已存在!");
return; // 结束方法,不再往下执行,回到调用点
}
}
//对比后发现不存在就可以设置密码了
System.out.print("密码:");
String pwd = scanner.nextLine();

// 创建User对象并添加到userList集合中
userList.add(new User(name, pwd));//创建了一个新的User对象,需要看User定义
System.out.println("注册成功!");
}

// 登录方法
static void login() {
System.out.print("用户名:");
String name = scanner.nextLine();
System.out.print("密码:");
String pwd = scanner.nextLine();

// 遍历userList,查找匹配的用户名和密码
for (User u : userList) {
if (u.getUsername().equals(name) && u.getPassword().equals(pwd)) {
currentUser = u; // 记录当前登录的用户对象,为什么?
System.out.println("登录成功!");
return; // 登录成功,结束方法
}
}
// 未找到匹配的用户
System.out.println("用户名或密码错误!");
}

// 发布新闻方法
static void publishNews() {
// 检查是否已登录
if (currentUser == null) {
System.out.println("请先登录!");
return;
}

System.out.print("标题:");
String title = scanner.nextLine();
System.out.print("内容:");
String content = scanner.nextLine();

// 创建News对象,自动生成发布时间,并添加到newsList集合中
newsList.add(new News(title, content));
System.out.println("发布成功!");
}

// 查看新闻列表方法
static void showNewsList() {
System.out.println("\n====== 新闻列表 ======");
// 遍历newsList,按顺序显示每条新闻的标题和发布时间
for (int i = 0; i < newsList.size(); i++) {
News n = newsList.get(i);
// 编号从1开始,所以用(i+1)
System.out.println((i+1) + ". " + n.getTitle() + " (" + n.getPublishTime() + ")");
}

http://www.rkmt.cn/news/1455654.html

相关文章:

  • AI英语口语助手APP的开发
  • 保姆级教程:在Linux服务器上从零部署CARD耐药基因分析工具RGI(含数据库配置避坑指南)
  • 流动的奢享:长春 沈阳万象城美陈设计叙事 肆墨设计
  • AI Agent要进企业当“数字员工”,老板:先定岗再授权!你准备好了吗?
  • 大模型行业风向突变:从涨价潮到降价战,小米、DeepSeek谁能笑到最后?
  • PVE-VDIClient:企业级虚拟桌面基础设施的终极开源解决方案
  • 2026 工程塑料实力厂家推荐:改性尼龙、PEEK、LCP 选材必看 TOP4 优选靠谱工厂清单 - 变量人生001
  • 18 小凌派 rk2206 鸿蒙 liteos 如何通过修改配置文件,编译不通的案例
  • 网络连接遇阻,揭秘这款游戏的玩法与获胜条件!
  • 游戏闪退?可能是Vulkan的锅!手把手教你排查Windows双显卡(独显+核显)的Vulkan支持与切换问题
  • css基础知识点,底层逻辑与布局,从零开始学前端网站开发
  • 淘汰老式玩具赛车!沙盘赛车才是场地长效创收密码
  • Lambda表达式与新的Streams API相结合
  • 用MATLAB/Simulink从零搭建汽车悬架模型:从二自由度到七自由度的保姆级仿真指南
  • 如何高效清理重复图片:AntiDupl智能去重工具实用指南
  • 普通小车彻底过时!沙盘赛车才是游乐创收王者
  • 浙江铜排厂家实力排行:5家头部企业核心资质盘点 - 奔跑123
  • 告别命令行恐惧:AriaNg让你3分钟拥有现代化的aria2下载管理界面
  • 免费开源AMD Ryzen调试工具SMUDebugTool:掌握硬件性能的终极指南
  • 【Claude Code】SSL certificate verification 证书验证失败排查与自定义 CA 配置指南
  • 【仅限首批200名技术负责人】AI工具统一纳管配置模板(含Ansible+Terraform双版本)
  • 19 基于 ComfyUI 工作流学习 AnimateDiff:单图生成视频的入门实践与问题分析
  • Scarab空洞骑士模组管理器:三步实现无忧模组安装与管理
  • 别再死磕传统LOD了!用UE5的Nanite导入千万面模型,性能不降反升?
  • 在macOS上实现完美歌词同步:LyricsX完整配置指南
  • Illustrator智能填充终极指南:Fillinger插件让你的设计效率提升20倍
  • 第1篇:K8s 核心概念精讲:Pod、Deployment、Service 与 Namespace——Java 开发者快速上手指南
  • 信息全面的招投标信息网站综合排行及选型指南 - 互联网科技品牌测评
  • Joy-Con Toolkit:解决Switch手柄专业配置难题的完整方案
  • 从零到精通:AI大模型学习路线图,新手必备!