请帮我看看Java中的Counting Sort的以下实现.我是Java和调试新手,所以我不确定错误.下面的代码的问题是,虽然它编译,我没有在屏幕上得到任何输出.请仔细阅读代码并向我推荐一些内容.也许存在一些逻辑错误.谢谢
import java.io.*;
import java.lang.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Cnt {
public static void main(String[] args) throws java.lang.Exception {
BufferedReader R = new BufferedReader(new InputStreamReader(System.in));
int[] a ;
int[] b;
String inp = R.readLine();
int N = Integer.parseInt(inp);
a = new int[N];
b = new int[N];
for ( int i = 0; i< N; i++) {
a[i] = Integer.parseInt(R.readLine());
}
int key = findmax(a);
int k = key+1;
int c[] = new int[k];
for ( int i = 0; i < k; i++) {
c[i] = 0;
}
for ( int j = 0; j < a.length; j++){
c[a[j]] = c[a[j]] +1;
}
for ( int i = 1; i < key ; i++) {
c[i] = c[i] + c[i-1];
}
for ( int j = (a.length - 1); j >=0; j--) {
b[c[a[j]]] = a[j];
c[a[j]]= c[a[j]] -1;
}
//System.out.println(b[0]);
for ( int h = 0; h > b.length; h++) {
System.out.println(b[h]);
}
}
private static int findmax(int a[])
{
int r;
r = a[0];
for ( int i =0; i < a.length; i++ ) {
if (a[i] >= r) {
r = a[i];
}
}
return r;
}
}
Run Code Online (Sandbox Code Playgroud)
我得到一个ArrayOutofBoundsException.请仔细阅读代码并向我推荐一些内容.
这是错误的做法.你做的是:
查看异常的堆栈跟踪(您的IDE将向您显示)
查看代码中的行,其中堆栈跟踪表示引发了异常
阅读错误消息以找出索引值是什么
通过阅读前面的代码,弄清楚索引值是如何产生的
如果您无法通过阅读代码来解决问题,请使用IDE的调试器单步执行程序并观察变量/对象的值以及它们如何更改.
如果您发布了异常堆栈跟踪,我们可能会为您解决.事实上,如果有人准备花一些时间,他们可能会在没有堆栈跟踪的情况下弄明白.
但是,这对你来说是一次学习练习的目的.你需要自己学习如何做这种东西......自己动手做.
你问题的原始版本说:
根据我的IDE,我得到一个ArrayOutofBoundsException
我假设,因为您的IDE告诉您正在获得异常,它还会显示异常消息,并且(如果您单击它或其他内容)异常堆栈跟踪.当然,我的IDE能够做到这一点.
如果不是这种情况,那么简单的替代方法是在这样的整个主体周围放置一个try/catch块main
.
public static void main(String[] args) throws Exception {
try {
// existing main body
...
} catch (Exception ex) {
ex.printStackTrace();
throw ex; // or leave this out.
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3642 次 |
最近记录: |