我完成了大部分的学校作业,但是我无法弄清楚如何从文本文件中读取,并且我对代码有一定的问题,我给出的任务是:
&#34;编写程序以读取名为“input.txt”的输入文件。文件 由几个图组成。每个图表都以包含的行开头 顶点数n,其中1 < n&lt; 200.每个顶点都标有 从0到n-1的数字。第二行包含边数 湖在此之后,每行包含两个顶点数的l行 代表边缘。 n = 0的输入标记输入的结束 并且不被处理。
您必须选择适当的数据结构来表示 图形。指示其完成/是否具有自循环/具有隔离 顶点&#34; 样本输入:
4
5
0 1
2 0
0 3
1 2
2 3
3
3
0 1
1 2
2 0
0
示例输出:
未完成/无自循环/无孤立顶点
完成/无自循环/无孤立顶点
我使用了邻接矩阵,我编写了读取边的代码,判断它是否有自循环以及是否存在孤立的顶点。
1-我写了一个代码,用于查明它是否完整,但它没有按照我想要的方式运行,它总是显示它不完整。
2-我不熟悉从文本文件中读取输入的方法,所以我需要帮助。
我必须让它读取任何数量的矩阵的部分,有点容易(但总是欢迎hehe),但我只是想确保在我之前知道如何执行上述两个步骤做到这一点,我真的很感激留下评论,所以我可以学到你帮助我的任何一步,无论如何,这是该计划:
package phase1project;
import java.util.Scanner;
public class Phase1Project {
public static void main(String[] args) {
int max = 2000; //declare the max element for the array
int[][] adj= new int[max][max]; //declare the array
int n; //nodes
int l; // to determine the max number of edges
int loopChecker = 0;//To check whether there's a loop or not
int isolatedCounter = 0;
int completeCounter = 0;
int subCounter = 0;
int origin; //to determine where the edge starts
int destination; //to detemine where the edge stops
int i,j; //for the loop
Scanner input = new Scanner(System.in); //to scan inputs
System.out.println("Enter the number of vertices: ");
n=input.nextInt();
while(n<1 || n>200){ //nodes/vertices should be between 1 and 200
System.out.println("\nWrong input! Insert a numbe between 1 and 200\n");
n=input.nextInt();
}
System.out.println("Enter the number of edges: ");
l=input.nextInt();
System.out.println("Enter the begining of the edge then press enter then enter the end side of the edge to input it correctly.\n");
for(i=0;i<=(l-1);i++){ //a loop that populates the adjacency matrix
System.out.println("Enter edge "+i+": >> (0 0) to quit: ");
origin = input.nextInt();
destination = input.nextInt();
adj[origin][destination]=1;
}
System.out.println("\n\n\nThis is how your graph looks like:\n");
for(i=0;i<=(n-1);i++){
for(j=0;j<=(n-1);j++)
System.out.printf("%4d",adj[i][j]);
System.out.printf("\n");
}
//////////////////////////////////////////////////////////////
//Loop Checker starts from here
for(i=0;i<=(n-1);i++){
if(adj[i][i]==1){//If there's a 1 in the same place
loopChecker=1;
break;
}
}
if(loopChecker==1){
System.out.println("Self Loop");
}
else{
System.out.println("No Self Loop");
}
//Loop Checker ends here
///////////////////////////////////////////////////////////////
//checks whether the graph is complete
for(i=0;i<=(n-1);i++){
subCounter=0;//reset
for(j=0;j<=(n-1);j++){
if(adj[i][j]==1){
subCounter+=1;//buffer variable
}
if(subCounter==(n-1)){
completeCounter+=1;//this counter incriments if the whole line has 1s that equal n-1
}
}
}
if(completeCounter == n){
System.out.println("Complete");
}
else
System.out.println("Not Complete");
//end of complete or not check
/////////////////////////////////////////////////////////////////////
subCounter =0;//reset
//checks whether the graph has an isolated vertex or not
for(i=0;i<=(n-1);i++){
for(j=0;j<=(n-1);j++){
if(adj[i][j]==0){
subCounter+=1;//buffer variable
}
if(subCounter==n){
isolatedCounter=1;
break;
}
}
subCounter=0;//reset
}
if(isolatedCounter==1){
System.out.println("There's an isolated vertex");
}
else
System.out.println("There's no isolated vertex");
//end of isolated check
///////////////////////////////////////////////////////////////////
}
}
我希望我没有通过发布这个来破坏任何规则,如果我这样做,请告诉我。
提前致谢;)