這是我的代碼來生成一個隨機圖形,其中每個頂點連接到其他6個頂點。問題是,當我運行它幾次(或有時第一次運行)時,似乎Random對象的函數無法找到一個隨機數來強制執行我所提出的限制。對於某些頂點編號,它適用於某些不...我不知道發生了什麼......我也可能會使用HashMap的方式有問題。任何想法出了什麼問題?隨機圖形發生器Java代碼錯誤
import java.util.List;
import java.util.Random;
import java.util.Scanner;
public class Graph_Generator {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
for (int i=0;i<3; i++){
System.out.println("Enter the number of vertex: ");
int number_vertex = sc.nextInt();
GenerateG1(number_vertex);
}
sc.close();
}
public static void GenerateG1(int num_vertex){
try {
Random random = new Random();
Random_Graph g6 = new Random_Graph(num_vertex);
int num_edges = 6, to, from;
for (int v = 0; v < num_vertex; v++) {
from = v;
System.out.println("v is : "+ v);
while (g6.getEdge(from).size() < num_edges) {
to = Math.abs(random.nextInt(num_vertex));
while (to == from || (g6.isEdge(from, to)) || (g6.isEdge(to, from)) || (g6.getEdge(to).size() > (num_edges-1))) {
to = Math.abs(random.nextInt(num_vertex));
}
g6.setEdge(to, from);
}
}
System.out
.println("THe Adjacency List Representation of the random graph is: ");
for (int i = 0; i < num_vertex; i++) {
System.out.print(i + " -> ");
List<Integer> edgeList = g6.getEdge(i);
if (edgeList.size() == 0)
System.out.print("null");
else {
for (int j = 0;; j++) {
if (j != edgeList.size() - 1)
System.out.print(edgeList.get(j) + " -> ");
else {
System.out.print(edgeList.get(j));
break;
}
}
}
System.out.println();
}
} catch (Exception E) {
System.out.println("Something went wrong");
}
}
}
public class Random_Graph
{
private Map<Integer, List<Integer>> adjacencyList;
public Random_Graph(int v)
{
adjacencyList = new HashMap<Integer, List<Integer>>();
for (int i = 0; i < v; i++)
adjacencyList.put(i, new LinkedList<Integer>());
}
public void setEdge(int to, int from)
{
if (to >= adjacencyList.size() || from >= adjacencyList.size())
System.out.println("The vertices does not exists");
adjacencyList.get(to).add(from);
adjacencyList.get(from).add(to);
}
public List<Integer> getEdge(int to)
{
if (to > adjacencyList.size())
{
System.out.println("The vertices does not exists");
return null;
}
return adjacencyList.get(to);
}
public boolean isEdge(int from , int to)
{
return (adjacencyList.get(from).contains(to) || adjacencyList.get(to).contains(from));
}
}
真的是真的!但我想不出任何其他的方式... – samira
我只是明白,我面臨的是什麼樣的問題......我怎麼能保證呢? – samira
我腦子裏有一個解決方案,如果你還需要它,我可以描述它,但它可能有點複雜。 – user3707125