十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
import java.awt.GridLayout;
我們提供的服務(wù)有:成都做網(wǎng)站、成都網(wǎng)站建設(shè)、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、定安ssl等。為超過千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學管理、有技術(shù)的定安網(wǎng)站制作公司
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class test {
static String[] arr;
static boolean flag=true;
static ListString a;
static JTextField jtf;
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame frame=new JFrame();
frame.setLayout(new GridLayout(1,2));
JButton button = new JButton("抽獎");
jtf = new JTextField();
frame.add(jtf);
frame.add(button);
a = new ArrayListString();
arr = new String[]{"張三","李四","王五"};
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
int i=0;
fond:
while(true){
String str = arr[(int)(Math.random()*arr.length)];
for(String b:a){
if(b.equals(str)){
if(i=arr.length){
jtf.setText("沒有人了");
break fond;
}
continue fond;
}
i++;
}
a.add(str);
jtf.setText(str);
break;
}
}
});
frame.setSize(500, 500);
frame.setLocation(500, 500);
frame.setVisible(true);
}
}
import java.io.BufferedInputStream;import java.util.Scanner; public class test1 { public static void main(String[] args) { Scanner cin = new Scanner(new BufferedInputStream(System.in)); int n = cin.nextInt(); // 輸入n個數(shù) int[] a = new int[n]; for (int i = 0; i n; ++i) { a[i] = cin.nextInt(); } cin.close(); for (int i = a.length - 1; i = 0; --i) { // 逆序輸出 System.out.print(a[i] + " "); } }}
按照你第2點描述,你僅僅是想實現(xiàn)隨即順序點名而已,并不是隨即點名。
我給你個解決方案:
在每次點中一名學生后,將java0803_students.txt文件中做個標示,表示該學生已經(jīng)在本輪點名中被點過。
直到所有學生都點到后情況這個表示,準備下一輪點名做標記。
下面我給你一段偽代碼,包含了 random 的使用方法:
public class CallStudents(){
private static Random random = new Random();
public void call(){
// 重新設(shè)置學生被點名的標示(根據(jù)點名情況)
reset();
long value = -1;
while (true) {
value = random.nextInt(maxValue + 1); // maxValue 是你當前有學生的最大數(shù)目
//在這里讀取當前隨即號對應(yīng)的學生記錄
String student = getStudentByID(value);
//判斷該學生是否被點過名
if(!checkCalled(student)){
// 設(shè)置已經(jīng)點過名
setCalled(student);
// 在控制臺上顯示被點名的學生信息
system.out.println(student);
// 結(jié)束循環(huán)
break;
}
}
}
private String getStudentByID(long id){
// 這個是讀取文件,需要你自己實現(xiàn)的
// 返回 java0803_students.txt 文件中對應(yīng)的學生記錄
}
private boolean checkCalled(String student){
// 至于是什么樣的規(guī)則,有你自己定義
// 我這里給你舉個例子
// 如果這條學生記錄中包含 一個字符為 called 的話,表明這名學生被點過名
if(student.indexOf("called") != -1){
retrn true;
}
return false;
}
private void setCalled(String student){
// 至于是什么樣的規(guī)則,有你自己定義
// 我這里給你舉個例子
// 設(shè)置學生已被點名
student += "_called";
// 將這個值重新寫回到你的java0803_students.txt 文件中,覆蓋愿信息!
}
private void reset(){
// 判斷是否所有學生都被點過名,如果點過名,清空所有學生被點名的標記
// 這個實現(xiàn)有你自己定義,
// 這里我給你舉個例子
// 讀取文件,判斷每一個學生信息是否都標有 called
// 如果都有,執(zhí)行刪除所有 called 的操作,并保存文件。
// 如果只有部分沒有,則表明本輪點名沒有結(jié)束,不做任何操作。
}
public static void main(String[] args){
String con = // 接受控制臺信息
if(con.equals("y")){
CallStudents call = new CallStudents();
call.call();
}
if(con.equals("n")){
// 結(jié)束程序
}
}
}