Java 随机化数组列表的顺序
本项目的目标是接受一系列具有先决条件的课程,并打印出一份没有预需求冲突的时间表。 我已经将课程添加到ArrayList of courses并将其全部打印出来,但是,我在随机重新启动ArrayList时遇到了问题。我尝试过交换数组中项目的索引(尽管我不知道是否正确),还尝试过在ArrayList上执行collections.sort()Java 随机化数组列表的顺序,java,arraylist,random,Java,Arraylist,Random,本项目的目标是接受一系列具有先决条件的课程,并打印出一份没有预需求冲突的时间表。 我已经将课程添加到ArrayList of courses并将其全部打印出来,但是,我在随机重新启动ArrayList时遇到了问题。我尝试过交换数组中项目的索引(尽管我不知道是否正确),还尝试过在ArrayList上执行collections.sort() import java.io.File; import java.io.PrintWriter; import java.util.ArrayList; imp
import java.io.File;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;
// Class DelivC does the work for deliverable DelivC of the Prog340
public class DelivC {
File inputFile;
File outputFile;
PrintWriter output;
Graph g;
Node n;
Edge e;
int conflicts = -1;
int counter = 0;
int minConflicts = Integer.MAX_VALUE;
String sem1 = "20203: ";
String sem2 = "20205: ";
String sem3 = "20211: ";
String sem4 = "20213: ";
String sem5 = "20215: ";
String sem6 = "20221: ";
String sem7 = "20223: ";
ArrayList<Node> courseArray = new ArrayList<Node>();
public DelivC(File in, Graph gr) {
inputFile = in;
g = gr;
// Get output file name.
String inputFileName = inputFile.toString();
String baseFileName = inputFileName.substring(0, inputFileName.length() - 4); // Strip off ".txt"
String outputFileName = baseFileName.concat("_out.txt");
outputFile = new File(outputFileName);
if (outputFile.exists()) { // For retests
outputFile.delete();
}
try {
output = new PrintWriter(outputFile);
} catch (Exception x) {
System.err.format("Exception: %s%n", x);
System.exit(0);
}
/**
* DELIVERABLE C.
*/
// ADDING COURSES TO COURSEARRAY
for (int i = 0; i < g.nodeList.size(); i++) {
courseArray.add(g.nodeList.get(i));
}
while (counter < 10) {// conflicts != 0) {
conflicts = 0;
// SETTING SEMNUM AND SEM STRING
for (int i = 0; i < g.nodeList.size(); i++) {
if (i < 3) {
g.nodeList.get(i).setSemNum(1);
;
sem1 += g.nodeList.get(i).getName() + " ".toString();
} else if (i < 6) {
g.nodeList.get(i).setSemNum(2);
;
sem2 += g.nodeList.get(i).getName() + " ".toString();
} else if (i < 9) {
g.nodeList.get(i).setSemNum(3);
;
sem3 += g.nodeList.get(i).getName() + " ".toString();
} else if (i < 12) {
g.nodeList.get(i).setSemNum(4);
;
sem4 += g.nodeList.get(i).getName() + " ".toString();
} else if (i < 15) {
g.nodeList.get(i).setSemNum(5);
;
sem5 += g.nodeList.get(i).getName() + " ".toString();
} else if (i < 18) {
g.nodeList.get(i).setSemNum(6);
;
sem6 += g.nodeList.get(i).getName() + " ".toString();
} else if (i < 21) {
g.nodeList.get(i).setSemNum(7);
;
sem7 += g.nodeList.get(i).getName() + " ".toString();
}
}
// CHECKING FOR CONFLICTS IN EDGE
for (int k = 0; k < g.edgeList.size(); k++) {
String edgeLabel = g.getEdgeList().get(k).getLabel();
if (edgeLabel == ">") {
if (g.getEdgeList().get(k).getHead().getSemNum() >= g.getEdgeList().get(k).getTail().getSemNum()) {
conflicts++;
}
} else if (edgeLabel == ">=") {
if (g.getEdgeList().get(k).getHead().getSemNum() > g.getEdgeList().get(k).getTail().getSemNum()) {
conflicts++;
}
}
}
// PRINTING OUT SCHEDULE
// if (minConflicts > conflicts) {
System.out.println(courseArray);
System.out.println(" ");
System.out.println("There are currently " + conflicts + " conflicts.");
System.out.println(sem1);
System.out.println(sem2);
System.out.println(sem3);
System.out.println(sem4);
System.out.println(sem5);
System.out.println(sem6);
System.out.println(sem7);
System.out.println(" ");
System.out.println(" ");
// minConflicts = conflicts;
// }
// RESETS THE SEMESTER STRINGS
sem1 = "20203: ";
sem2 = "20205: ";
sem3 = "20211: ";
sem4 = "20213: ";
sem5 = "20215: ";
sem6 = "20221: ";
sem7 = "20223: ";
// RESETS THE CONFLICTS
if (conflicts == 0) {
conflicts = 0;
} else {
conflicts = -1;
}
counter++;
// conflicts = 0;
// RANDOMLY ASSIGNS NEW SEMESTERS TO EACH COURSE
// randomRestart();
Collections.sort(courseArray);
}
}
public void randomRestart() {
Random r = new Random();
for (int i = 0; i < courseArray.size(); i++) {
int nodeIndex = courseArray.indexOf(i);
int swapIndex = r.nextInt(courseArray.size());
Node currentNode = courseArray.get(i);
Node swapNode = courseArray.get(swapIndex);
Node tempNode = currentNode;
currentNode = courseArray.get(swapIndex);
swapNode = tempNode;
}
}
}
导入java.io.File;
导入java.io.PrintWriter;
导入java.util.ArrayList;
导入java.util.Collections;
导入java.util.Random;
//C类可交付成果负责项目340的可交付成果
公开课{
文件输入文件;
文件输出文件;
打印机输出;
图g;
节点n;
边e;
int冲突=-1;
int计数器=0;
int minConflicts=Integer.MAX_值;
字符串sem1=“20203:”;
字符串sem2=“20205:”;
字符串sem3=“20211:”;
字符串sem4=“20213:”;
字符串sem5=“20215:”;
字符串sem6=“20221:”;
字符串sem7=“20223:”;
ArrayList Coursarray=新的ArrayList();
公共交付(文件中,图形gr){
inputFile=in;
g=gr;
//获取输出文件名。
字符串inputFileName=inputFile.toString();
String baseFileName=inputFileName.substring(0,inputFileName.length()-4);//剥离“.txt”
字符串outputFileName=baseFileName.concat(“_out.txt”);
outputFile=新文件(outputFileName);
如果(outputFile.exists()){//用于重新测试
outputFile.delete();
}
试一试{
输出=新的PrintWriter(输出文件);
}捕获(异常x){
系统错误格式(“异常:%s%n”,x);
系统出口(0);
}
/**
*可交付的。
*/
//向Courserray添加课程
对于(int i=0;i”){
如果(g.getEdgeList().get(k).getHead().getSemNum()>=g.getEdgeList().get(k).getTail().getSemNum()){
冲突++;
}
}否则如果(edgeLabel==“>=”){
如果(g.getEdgeList().get(k).getHead().getSemNum()>g.getEdgeList().get(k).getTail().getSemNum()){
冲突++;
}
}
}
//打印时间表
//如果(最小冲突>冲突){
系统输出打印LN(Coursarray);
System.out.println(“”);
System.out.println(“当前存在”+冲突+“冲突”);
系统输出打印LN(sem1);
系统输出打印LN(sem2);
系统输出打印LN(sem3);
系统输出打印LN(sem4);
系统输出打印LN(sem5);
系统输出打印LN(sem6);
系统输出打印LN(sem7);
System.out.println(“”);
System.out.println(“”);
//冲突=冲突;
// }
//重置学期字符串
sem1=“20203:”;
sem2=“20205:”;
sem3=“20211:”;
sem4=“20213:”;
sem5=“20215:”;
sem6=“20221:”;
sem7=“20223:”;
//重置冲突
如果(冲突==0){
冲突=0;
}否则{
冲突=-1;
}
计数器++;
//冲突=0;
//随机为每门课程分配新学期
//随机重启();
集合。排序(Coursarray);
}
}
public-void-randomRestart(){
随机r=新随机();
对于(int i=0;i
您可以随机化列表的顺序