我想生成随机数,但不希望它们来自exclude数组.这是我的代码.
public int generateRandom(int start, int end, ArrayList<Integer> exclude) {
Random rand = new Random();
int range = end - start +1 - exclude.size();
int random = rand.nextInt(range) + 1;
for(int i = 0; i < exclude.size(); i++) {
if(exclude.get(i) > random) {
return random;
}
random++;
}
return random;
}
Run Code Online (Sandbox Code Playgroud)
我在while循环中使用此函数,并在每次迭代期间添加一个新值exclude.有时会返回属于的数字exclude.有什么问题?
例如,我有一个带图形边的文本文件
1 2
1 3
2 5
等,并希望以某种方式表示我的图表.我试图使用hashmap,它是表示边缘的最佳方式吗?第二个问题,我如何访问我的hashmap中的第一个和第二个条目?我的代码在这里
DataInputStream dStream = new DataInputStream(new FileInputStream("C:/Programming/Java/test.txt"));
BufferedReader bReader = new BufferedReader(new InputStreamReader(dStream));
HashMap<Integer, Integer> graphEdges = new HashMap<Integer, Integer>();
String line;
while( (line = bReader.readLine()) != null) {
String[] firstSecond = line.split(" ");
int firstDigit = Integer.parseInt(firstSecond[0]);
int secondDigit = Integer.parseInt(firstSecond[1]);
graphEdges.put(firstDigit, secondDigit);
}
System.out.println(graphEdges);
bReader.close();
}
Run Code Online (Sandbox Code Playgroud) 我必须反转给定的有向图,以便顶点保持不变,但边是相反的方向.我的图表用Graph类表示,它包含一个顶点ArrayList,每个Vertex对象都有它的数字和它相邻顶点的ArrayList.我的代码给出了错误的答案,因为在循环的每次迭代中,顶点的相邻列表的大小都会发生变化.我该如何修复我的代码?
public void reverse() {
ArrayList < Vertex > adjacentOfi = new ArrayList < Vertex > ();
int k;
for (int i = 1; i < verticesSize; i++) {
adjacentOfi = vertices.get(i).getAdjacent();
for (int j = 0; j < adjacentOfi.size(); j++) {
k = adjacentOfi.get(j).getNumber();
adjacentOfi.remove(j);
vertices.get(k).getAdjacent().add(vertices.get(i));
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是Vertex类
public class Vertex {
private int number;
private boolean marked;
private int finishingTime;
private ArrayList<Vertex> adjacent;
public Vertex(int num) {
this.number = num;
this.marked = false;
this.finishingTime = 0; …Run Code Online (Sandbox Code Playgroud) 我遇到java的NullPointerException问题.我的函数获取Vertex的数字并返回一个Vertex(我已经有了这样的类).这是我的代码
public class Graph {
private Set<Vertex> vertices;
public Vertex getVertexByNumber(int number) {
Vertex answer = new Vertex(number);
for( Vertex v : vertices ) {
if(v.getNumber() == number) {
answer = v;
break;
}
}
answer = null;
return answer;
}
Run Code Online (Sandbox Code Playgroud)