【发布时间】:2015-03-21 16:16:11
【问题描述】:
我正在尝试解决这个问题 https://www.hackerrank.com/challenges/pangrams 这是我的代码
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class Pangram {
public static String alltrim(String s)
{ String s1="";
int i,j,k=0;
for(i=0;i<s.length();i++)
{
char ch=s.charAt(i);
if(ch!=' ')
break;
}
for(j=s.length()-1;j>=0;j--)
{
char ch=s.charAt(j);
if(ch!=' ')
break;
}
for(k=i;k<j+1;k++)
s1 = s1 + s.charAt(k);
return s1;
}
public static void main(String[] args)
{
Scanner reader = new Scanner(System.in);
String input = reader.nextLine();String s,s1;
s = input.toLowerCase();
s1 = alltrim(s);
if( check(s1) )
System.out.println("pangram");
else
System.out.println("not pangram");
}
public static boolean check(String input)
{
int [] count = new int[26];
for( int i = 0; i < input.length(); i++ )
{
char ch = input.charAt(i);
count[ch-'a']++;
}
for( int cnt:count )
{
if( cnt ==0 )
return false;
}
return true;
}
}
我总是收到这个错误
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -65
at Pangram.check(Pangram.java:46)
at Pangram.main(Pangram.java:35)
我正试图找出问题出在哪里,但我无法...谁能帮助我?
【问题讨论】:
-
那么您是否查看过 Pangram.java 第 46 行并找出您尝试访问无效值的原因?你试过调试吗?提示:您的
alltrim方法实际上并没有删除所有空间。你可能想使用s1 = s.replace(" ", "");... -
@JonSkeet 感谢该替换功能,即使在使用替换功能后它也显示出类似的问题线程“主”中的异常 java.lang.ArrayIndexOutOfBoundsException: -43 at Pangram.check(Pangram.java:26 ) 在 Pangram.main(Pangram.java:15) ------> 第 26 行:count[ch-'a']++; -------> 第 15 行: if( check(s1) ) 他们有什么问题吗?
-
了解您输入的哪个值会遇到越界异常也会有所帮助。
-
int i,j,k=0;不必要。不需要在循环之外声明它们,因为您已经在每个 for 循环的开头声明了所需的变量。
-
@coder101:又一次,你试过调试吗?了解如何自己诊断问题至关重要。
标签: java arrays exception pangram