黑马程序员技术交流社区
标题:
java的一道笔试题,谁能说出错误的原因
[打印本页]
作者:
朱秀梅
时间:
2012-6-10 16:50
标题:
java的一道笔试题,谁能说出错误的原因
import java.util.ArrayList;
/**
* 请在一个类中编写一个方法,这个方法搜索一个字符数组中是否存在某个字符,
* 如果存在,则返回这个字符在字符数组中第一次出现的位置(序号从0开始计算),
* 否则,返回-1。要搜索的字符数组和字符都以参数形式传递传递给该方法,如果传入的数组为null,
* 应抛出IllegalArgumentException异常。
* 在类的main方法中以各种可能出现的情况测试验证该方法编写得是否正确,例如,字符不存在,字符存在,
* 传入的数组为null等。
* @author zhuxiumei
*
*/
public class Test2
{
public static void main(String args[])
{
char chs[]=new char[]{'3','b','a','c','f','5'};
char ch='b';
try
{
System.out.print(check(chs,ch));
} catch (Exception e)
{
e.printStackTrace();
}
}
public static int check(char[]chs,char ch) throws Exception
{ //ArrayList<Integer> list=new ArrayList<Integer>();
int position[] =new int[]{};
int times=0;
if(chs==null)
{
throw new Exception("IllegalArgumentException");
}
for(int i=0;i<chs.length;i++)
{
if(ch==chs)
{
//list.add(i);
position[times]=i;
times++;
}
}
if(position.length==0)
{
return -1;
}
//return (Integer) list.get(0);
return position[0];
}
}
刚开始我是这样子做的使用ArrayList 来存储接收到的出现的位置 然后通过list.get(0);就可以获字符取第一次出现的位置,后来我就想用一个数组来存储接收字符出现的位置 就有了以上的代码运行的时候就出现了,我是这样想的存储字符第一次出现的位置后将times++ 第二次存到position[times++]里面,结果总是和想的有差别于是就出现了java.lang.ArrayIndexOutOfBoundsException: 0异常
自己调试了一段时间找不到解决的方法
作者:
江南
时间:
2012-6-10 17:00
int position[] =new int[]{};[/code]这个定义错了!你即没有动态的为它指定默认大小,也没有静态的为它指定元素
一般定义数组有两种方式;[code=java]int position[] =new int[chs.length];//动态初始化 每个数组元素值为 0
int position[] =new int[]{1 , 2 , 3 , 4};//静态[/code]改成这样试试
int position[] =new int[chs.length];
就是这样子[code=java]public class Test2
{
public static void main(String args[])
{
char chs[]=new char[]{'3','b','a','c','f','5'};
char ch='b';
try
{
System.out.print(check(chs,ch));
} catch (Exception e)
{
e.printStackTrace();
}
}
public static int check(char[]chs,char ch) throws Exception
{ //ArrayList<Integer> list=new ArrayList<Integer>();
//int position[] =new int[]{}; 这是你原来的
int position[] =new int[chs.length];
int times=0;
if(chs==null)
{
throw new Exception("IllegalArgumentException");
}
for(int i=0;i<chs.length;i++)
{
if(ch==chs)
{
//list.add(i);
position[times]=i;
times++;
}
}
if(position.length==0)
{
return -1;
}
//return (Integer) list.get(0);
return position[0];
}
}
作者:
葛奎
时间:
2012-6-10 17:07
//改好了,参考下
class Test7
{
public static void main(String args[])
{
char chs[]=new char[]{'3','b','a','c','f','5'};
char ch='f';
try
{
System.out.print(check(chs,ch));
} catch (Exception e)
{
e.printStackTrace();
}
}
public static int check(char[]chs,char ch) throws Exception
{ //ArrayList<Integer> list=new ArrayList<Integer>();
int position=0;
int times=0;
if(chs==null)
{
throw new Exception("IllegalArgumentException");
}
for(int i=0;i<chs.length;i++,position++)
{
if(ch==chs[position])
{
//list.add(i);
return position;
}
}
return -1;
/*if(position.length==0)
{
return -1;
}*/
//return (Integer) list.get(0);
// return position[0];
}
}
作者:
赵兵锋
时间:
2012-6-10 18:14
怎么感觉楼主写的有点复杂啊,题目没要求很多啊,下面是我写的
public static void main(String[] args) {
char[] arr = new char[] { '3', 'b', 'a', 'c', 'f', '5' };
char ch = 'b';
try{
System.out.println(getPosition(arr, ch));
}catch(IllegalArgumentException e){
e.printStackTrace();
}
}
public static int getPosition(char[] arr,char ch){
if(arr==null){
throw new IllegalArgumentException("数组arr为null");
}
int pos = -1;
for(int i=0;i<arr.length;i++){
if(arr[i]==ch){
pos=i;
break;
}
}
return pos;
}
复制代码
作者:
Lillian
时间:
2013-12-14 22:21
我写了一个这个方法,代码如下:
/**
* Check if a char in a array, if yes return the index, else return -1
* @param chrs The char array which we will find from.
* @param ch The char which we want to find.
* @return return the index if find the expected char, otherwise return -1.
*/
public static int CheckChar(char[] chrs, char ch){
if(null == chrs)
throw new IllegalArgumentException("Please input the array you want to find in.");
int index = -1;
for(int i=1; i< chrs.length; i++){
if(chrs[i]==ch){
index =i;
break;
}
}
return index;
}
复制代码
IllegalArgumentException异常是RuntimeException 的子类,无需声明 throws。
RuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。
可能在执行方法期间抛出但未被捕获的 RuntimeException 的任何子类都无需在 throws 子句中进行声明。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2