大脑一片空白 不知道怎么写出来的 求各位同志帮忙整理一下思路
package com.itheima.test;
import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
public class RandomName4 {
public static void main(String[] args) throws IOException {
/*
* 随机点名程序,第一轮结束后自动开启第二轮
* 写了一个自动销毁模式,只能运行两次
* 我也不知道怎么写出来的,求大神帮我整理整理代码思路
* */
BufferedReader br = new BufferedReader(new FileReader("count.txt"));
int count = Integer.parseInt(br.readLine());
br.close();
finalGetName(count);
}
private static void finalGetName(int count) throws IOException {
if (count == 1) {
int size = randomName();
if (size == 0) {
writerFile("E:\\Java\\basic-code-next\\myiotest\\out\\production\\myiotest\\myiotest\\name.txt", "name.txt");
BufferedWriter bw = new BufferedWriter(new FileWriter("count.txt"));
count++;
bw.write(count + "");
bw.close();
System.out.println("第一次点名结束");
}
} else if (count == 2) {
System.out.println("开启第二轮");
int size = randomName();
if (size == 0) {
File file1 = new File("name.txt");
file1.delete();
File file2 = new File("count.txt");
file2.delete();
System.out.println("第二次点名完成,结束程序,删除备份文件");
System.exit(0);
}
}
}
private static int getCount() throws IOException {
//计数文本
BufferedReader br = new BufferedReader(new FileReader("count.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("count.txt"));
bw.write("1");
bw.close();
int count = Integer.parseInt(br.readLine());
br.close();
return count;
}
private static void writerFile(String oldFile, String newFile) throws IOException {
BufferedReader br = new BufferedReader(new FileReader(oldFile));
BufferedWriter bw = new BufferedWriter(new FileWriter(newFile));
String str;
while ((str = br.readLine()) != null) {
bw.write(str);
bw.newLine();
}
bw.close();
br.close();
}
private static int randomName() throws IOException {
BufferedReader br = new BufferedReader(new FileReader("name.txt"));
String str;
ArrayList<String> list = new ArrayList<>();
while ((str = br.readLine()) != null) {
list.add(str);
}
br.close();
Collections.shuffle(list);
if (list.size() != 0) {
System.out.println(list.get(0));
list.remove(0);
}
BufferedWriter bw = new BufferedWriter(new FileWriter("name.txt"));
for (String s : list) {
bw.write(s);
bw.newLine();
}
bw.close();
return list.size();
}
}
名字在文件里是一行一个吗,然后每轮随机点名的个数是多少?
可以先查询总共有多少行,然后通过random.nextint 随机出来点名的行
private static int whatParentheses(char ch) {
switch (ch) {
case '(':
return -1;
case '[':
return -2;
case '{':
return -3;
case ')':
return 1;
case ']':
return 2;
case '}':
return 3;
}
return 0;
}
private static boolean isParenthesesValid(String s) {
// 字符串为空
if (s == null) {
return false;
}
int length = s.length();
Stack<Character> stack = new Stack<>();
// 存储遍历的字符
char ch;
// 存储字符转换后的数字
int parentNum;
// 记录下括号出现的次数
int count = 0;
for (int i = 0; i < length; i++) {
ch = s.charAt(i);
parentNum = whatParentheses(ch);
if (parentNum < 0) {
count++;
// <0表示这是个左括号
stack.push(ch);
} else if (parentNum > 0) {
count++;
// >0表示这是个右括号
if (stack.isEmpty()) {
// 右括号左边没有左括号的特殊情况
return false;
}
if (parentNum + whatParentheses(stack.peek()) == 0) {
// 栈顶是对应的左括号
stack.pop();
} else {
return false;
}
} else {
// =0 这不是一个括号,不管
}
}
// 字符串中有括号且栈最后被清空了,表示括号成对出现且有效
if (count > 0 && stack.isEmpty()) {
return true;
}
return false;
}
对比学习后,还是觉得大牛的思路解析更好,还是得活学活用,做到能举一反三才算是真正的掌握,好了文章就分享到这里,希望能与大家共勉,并能看到文章的各位有一些帮助,我只是一个“知识的搬运工”。
以下是个人的技术交流群,有兴趣一起学习交流的可以加入
我将为您提供一种Java文本随机点名器的解决方案。
思路:
1.创建存储学生姓名的列表。
2.将学生姓名放入列表中。
3.创建一个随机数生成器来随机选择姓名。
4.创建一个方法来实现不重复的选择,用一个计数器来保证每个人都只被选中一次。
5.输入选择操作,按下回车键来选择一个名字。
6.如果选择完成,结束程序。
代码实现:
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class StudentNamePicker {
public static void main(String[] args) {
//创建一个存储学生姓名的列表
ArrayList<String> students = new ArrayList<String>();
//将学生姓名放入列表中
students.add("Tom");
students.add("Jack");
students.add("Lucy");
students.add("Mike");
students.add("Alan");
students.add("Kelly");
//创建随机数生成器
Random random = new Random();
//定义一个计数器,用于保证每个人都只被选中一次
int count = 0;
System.out.println("按回车键选取一个名字,输入exit退出程序");
Scanner scanner = new Scanner(System.in);
while(scanner.nextLine().isEmpty()){
//生成随机数
int index = random.nextInt(students.size());
//保证每个人都只被选中一次
count++;
if(count > students.size()){
System.out.println("所有人都已被点名,程序退出");
break;
}
//获取选中的名字,并从列表中删除
String student = students.remove(index);
//输出选中的名字
System.out.println("选中的名字是:"+student);
}
}
}
技术说明:
1.ArrayList是Java集合框架中的一种实现,用于动态存储对象(可变数组)。
2.如果输入的字符串为空,那么scanner.nextLine()方法会阻塞等待用户输入,并且将用户输入转换为字符串类型返回。
3.Random类是Java中的内置类,用于生成伪随机数。
4.计数器用于保证每个人都只被选中一次。
5.从列表中删除元素以确保不重复选择。
6.如果所有姓名都被选中,则退出程序。
运行说明:
1.使用JDK编译代码,生成StudentNamePicker.class文件。
2.在控制台中运行以下命令:
java StudentNamePicker
3.按下回车键以选择一个名字,程序将随机选择一个姓名并输出到控制台上。
4.如果所有姓名都被选中,程序将结束。