Java 随机化数组列表的顺序

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

本项目的目标是接受一系列具有先决条件的课程,并打印出一份没有预需求冲突的时间表。 我已经将课程添加到ArrayList of courses并将其全部打印出来,但是,我在随机重新启动ArrayList时遇到了问题。我尝试过交换数组中项目的索引(尽管我不知道是否正确),还尝试过在ArrayList上执行collections.sort()

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
您可以随机化列表的顺序