程序既不会执行也不会终止

时间:2017-01-22 15:16:05

标签: java output

尝试了几种方法从arrayindexoutofbound异常修复我的代码后,有一种方法它不会产生异常,但是程序不会输出任何类似的东西,它不会抛出异常或错误,它表明程序没有终止。这是代码:

import java.util.*;

public class treez {

final Scanner in;
 public treez()
 {
     in=new Scanner(System.in);
     run();
     in.close();

 }
 public void run()
 {
     System.out.println("Enter normal restaurant numbers and pho restaurant numbers");
     final String input=in.nextLine();
     final int[] rest=createarray(input);
     final int normal=rest[0];
     final int pho=rest[1];
     final String input1=in.nextLine();
     final int[] phoresspecific=createarray(input1);
     Arrays.sort(phoresspecific);
     boolean[][] matrix;
     matrix=new boolean[normal][normal];
     for(int i=0;i<normal;i++)
     {
         for(int j=0;j<normal;j++)
         {
             matrix[i][j]=false;
         }
     }
     int[] total=new int[normal];

     for(int i=0;i<matrix.length;i++) matrix[i]=new boolean[normal];
     for(int i=0;i<normal;i++)
     {
         total[i]=i;
         total[i]=Arrays.binarySearch(total, i);
     }
     Arrays.sort(total);
     for(int i=0 ; i < normal - 1; i++) {
         int x = 0;
         int y = 0;
         String ans = in.nextLine();
         int[] arraya = createaarray(ans);
         x = arraya[0];
         y = arraya[1];
         matrix[x][y]= true;
         matrix[y][x]=true;
     }
     in.close();
     int answer=decisions(pho,matrix,phoresspecific,normal);
     System.out.println(answer);
 }
 private int decisions(int pho, boolean matrix[][],int[] phoresspecific,int normal)
 {
     int steps=0;
     if(pho==2)
     {
         for(int j=0;j<normal-1;j++)
         {
             for(int i=phoresspecific[0];i<normal-1;i++)
             {
                 if(matrix[j][i]==true)
                 {
                     j++;
                     steps++;
                     if(j==phoresspecific[1]) break;
                 }
             }
             if(j==phoresspecific[1]) break;
         }
     }
     else
     {
         int counter=0;
         int[] step=new int[pho-1];
         for(int j=0;j<pho-1;j++)
         {
             counter=0;
             for(int i=0;i<normal-1;i++)
             {
                 for(int l=phoresspecific[j];l<normal-1;l+=0)
                 {
                     if(matrix[i][l]==true)
                     {
                         i++;
                         step[j]++;
                         if(i==j)
                         {
                             counter++;
                         }

                     }
                 }
                 if(counter==pho) break;
             }
         }
         Arrays.sort(step);
         steps=step[0];
     }
     steps--;
     return(steps);
 }
 private int[] createarray(final String input)
 {
     final String[] args=input.trim().split("\\s+");
     final int[] list=new int[2];
     for(int i=0;i<2;i++)
         list[i]=Integer.parseInt(args[i]);

     return list;
 }
 private int[] createaarray(final String ans)
 {
     final String[] args=ans.trim().split("\\s+");
     final int[] list=new int[2];
     for(int i=0;i<2;i++)
         list[i]=Integer.parseInt(args[i]);

     return list;
 }

 public static void main(String args[])
 {

    new treez();
 }
}

从以前的错误中,我认为错误是在第83行或第85行,即:

 for(int l=phoresspecific[j];l<normal-1;l+=0)
                 {
                     if(matrix[i][l]==true)

in

 for(int l=phoresspecific[j];l<normal-1;l+=0)
                 {
                     if(matrix[i][l]==true)
                     {
                         i++;
                         step[j]++;
                         if(i==j)
                         {
                             counter++;
                         }

                     }
                 }

输入:

8 5
0 6 4 3 7
0 1
0 2
2 3
4 3
6 1
1 5
7 3

该程序既不会产生输出也不会终止。帮助将不胜感激。 编辑:例外:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8
at treez.decisions(treez.java:85)
at treez.run(treez.java:52)
at treez.<init>(treez.java:9)
at treez.main(treez.java:127)

Edit2:此程序用于确定一个人到达输入行2中写入的所有位置的最短时间。没有边缘权重,因为从一个地方到另一个地方需要一分钟。第二行之后的所有行都表示有一条连接地点a和b的道路。

1 个答案:

答案 0 :(得分:0)

您检查过构建配置吗? 如果您没有提供有关您的计划的大量信息,那么它很难找到可能的错误。 编辑:我设法让它运行,并确认你的程序(你的输入不返回任何东西,我没有通过每一段代码) 但你总是使用&#34; createarray&#34;函数,你有两次实现它的功能相同(你传递的值的名称exept)。 然后你在这段代码中有一个无限循环:

   for(int i=0;i<normal-1;i++){
       for(int l=phoresspecific[j];l<normal-1;l+=0){
           if(matrix[i][l]==true){
              i++;
              step[j]++;
              if(i==j) counter++;
           }
       }
     if(counter==pho) break;
   }

内部for循环不会增加其值,并且总是试图评估if条件,由于从不改变索引l,它将始终保持不变。那可能是你的错误。 另一个编辑: 在参数的第二行中,您有两个以上的值,但您的函数始终只读取两个参数。