尝试了几种方法从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的道路。
答案 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,它将始终保持不变。那可能是你的错误。 另一个编辑: 在参数的第二行中,您有两个以上的值,但您的函数始终只读取两个参数。