public class sampleCode {
public static void main( String[] moe ) {
int[] larry = new int[moe.length];
for( int i=0; i<moe.length; i++ ) {
larry[i] = Integer.parseInt( moe[i] );
}
int[] curly = null;
if( larry.length <= 10 ) {
curly = path1( larry );
} else
curly = path2( larry );
// PRINT RESULTS
System.out.println( curly[0]+", "+curly[1] );
}
public static int[] path1( int[] foo ) {
for( int i=0; i<foo.length; i++ ) {
for(int j=0; j<foo.length-1; j++) {
if( foo[j] > foo[j+1] ) {
int bar = foo[j];
foo[j] = foo[j+1];
foo[j+1] = bar;
}
}
}
return foo;
}
public static int[] path2( int[] foo ) {
int[] z = null;
if( foo.length > 1 ) {
int bar = foo.length / 2;
int[] a = new int[bar];
int[] b = new int[foo.length - bar];
for( int x=0; x<foo.length; x++ ) {
if( x<bar ) a[x] = foo[x];
else b[x-bar] = foo[x];
}
z = path2b( path2( a ), path2( b ) );
} else {
z = foo;
}
return z;
}
protected static int[] path2b( int[] foo, int[] bar ) {
int i=0;
int j=0;
int x=0;
int[] z = new int[foo.length+bar.length];
while( i<foo.length || j<bar.length ) {
if( i < foo.length && j == bar.length ) {
z[x] = foo[i++];
} else
if( j < bar.length && i == foo.length ) {
z[x] = bar[j++];
} else
if( foo[i] < bar[j] ) {
z[x] = bar[j++];
} else {
z[x] = foo[i++];
}
x++;
}
return z;
}
}
在Eclipse中运行此代码时,我不断获得
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at sampleCode.sampleCode.main(sampleCode.java:18)
当我尝试System.out.println()
时似乎
我理解这个异常意味着什么,但我无法弄清楚我需要修复哪些代码才能使其正常运行
答案 0 :(得分:1)
您的代码按预期运行。你得到了ArrayOutOfBounds异常,因为你没有将任何内容传递给Main
例如,运行带有参数3和2的程序,输出为“2,3”。
仅供参考:您可以使用“运行配置”选项向Eclipse中使用的参数添加参数。
答案 1 :(得分:0)
moe.length = 0;
由于这种情况,你的初始for循环永远不会执行,因为i = 0不能小于零。由于larry.length = 0,你也会调用path1,但不会调用循环,所以path1(...)只会返回你的输入。
但是,这就是我反应的原因。调试器是你的朋友。
看看: http://help.eclipse.org/luna/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2Ftasks%2Ftask-stepping.htm
如果你在第6行放置一个断点并运行调试器,它会让你更好地查看问题。
这应该让您开始从Eclipse中调试代码。
答案 2 :(得分:0)
这意味着卷曲的长度为0而不是2.因此,当您尝试访问卷曲[1]时,您将超出界限。你期待卷曲的问题。长度&gt; 1而事实并非如此。您可以通过使用断言来验证您认为真实的内容,从而更好地解决这些问题。例如:
// PRINT RESULTS
assert curly.length > 1 : "curly.length < 2";
System.out.println( curly[0]+", "+curly[1] );
为了使其正常工作,您需要将-ea选项传递给JVM。我不使用Eclipse,因此我不确定如何在Eclipse中执行此操作,但在Intellij中,您编辑运行配置并将-ea放在VM选项行中。
您需要开始验证输入的第二件事。您遇到此问题的原因是因为您在String [] moe中的初始输入不是您所期望的。
public static void main( String[] moe ) {
if (moe.length < 2){
System.out.println("Usage: java -jar moe.jar # # ... #");
System.out.println("where # is a integer and has at least two integers separated by a space.");
System.exit(0);
}
您可能还有其他问题,但根据您给我们的内容,我可以告诉您。