黑马程序员技术交流社区
标题:
一道测试题,求指导。
[打印本页]
作者:
梁清平
时间:
2012-6-13 21:06
标题:
一道测试题,求指导。
请在一个类中编写一个方法,这个方法搜索一个字符数组中是否存在某个字符,如果存在,则返回这个字符在字符数组中第一次出现的位置(序号从
0
开始计算),否则,返回
-1
。要搜索的字符数组和字符都以参数形式传递传递给该方法,如果传入的数组为
null
,应抛出
IllegalArgumentException
异常。在类的
main
方法中以各种可能出现的情况测试验证该方法编写得是否正确,例如,字符不存在,字符存在,传入的数组为
null
等。
这个测试题我是这样做的。。可总觉得有什么地方不对劲求高手指点哪些地方需要改进。。
public class SearchIndex
{
public static void main(String[] args)
{
char[] arr = {'f','s','j','y'};
//arr =null;
int index = getIndex(arr,'a');
System.out.print(index);
}
public static int getIndex(char[] arr,char ch)
{
if(arr==null)
throw new IllegalArgumentException("数组参数不能为null");
else
{
for(int i=0;i<arr.length;i++)
{
if(arr
==ch)
return i;
}
return -1;
}
}
}
作者:
王明明
时间:
2012-6-13 21:19
本帖最后由 王明明 于 2012-6-13 21:21 编辑
public class Demo { // 因为主函数定义了Public 所以文件名跟类名必须一样才能通过 编译 你编译的时候注意一下
public static void main(String[] args) {
char[] strs={'d','s','g','s','i','y'};
int index=searchCharIndex(strs, 'y');
if(index==-1){
System.out.println("字符不存在");
}else{
System.out.println("字符的位置为:"+index);
}
}
public static int searchCharIndex(char[] chars,char c){
int index=-1;//要查找的字符在数组中的位置
//如果数组为null,则抛出IllegalArgumentException
//如果不为null,则开始查找字符在数组中的位置
if(chars==null){
new IllegalArgumentException().printStackTrace();
}else{
for (int i = 0; i < chars.length; i++) {
if(c==chars[i]){
index=i;
}
}
}
return index;
}
}
复制代码
作者:
赵倩倩
时间:
2012-6-13 21:58
你的这段程序有两个问题 一、没有判断出参数是否存在这个漏掉了 二、在判断数组中元素和所给参数相等时的等式书写不对的 应该是 if(arr[i]==ch) 而不是arr==ch 这是两个不可比较的类型 至于第一个应该加一个判断条件 if(index=-1)System.out.println("该元素不存在");
作者:
王晓新
时间:
2012-6-13 22:01
要验证各种情况,我在你的基础上加了一个传入空数组,代码如下
public class SearchIndex
{
public static void main(String[] args)
{
char[] arr = {'f','s','j','y'};
char[] arr1=null;
int index = getIndex(arr,'f');
int index1=getIndex(arr1,'f');
System.out.print(index);
}
public static int getIndex(char[] arr,char ch)
{
if(arr==null)
throw new IllegalArgumentException("数组参数不能为null");
else
{
for(int i=0;i<arr.length;i++)
{
if(arr[i]==ch)
return i;
}
return -1;
}
}
}
复制代码
作者:
李盼
时间:
2012-6-13 22:18
你的 if(arr[i] == ch)少了下角标!其次我觉得为空时抛异常,会让程序停止,这样有几个数组调用这个方法时候,都不会显示结果。我改为返回值为Integer,当为空时候返回null,这样其他的结果也能显示,为空的数组你也明白是什么意思。
public class Test
{
public static void main(String[] args)
{
char[] arr = {'f','s','j','y'};
char[] arr1=null;
Integer index = getIndex(arr,'a');
Integer index1=getIndex(arr,'f');
Integer index2=getIndex(arr1,'f');
System.out.println(index);
System.out.println(index1);
System.out.println(index2);
}
public static Integer getIndex(char[] arr,char ch)
{
if(arr==null)
return null;
else
{
for(int i=0;i<arr.length;i++)
{
if(arr[i] == ch)
return i;
}
return -1;
}
}
}
作者:
郑传庆
时间:
2012-6-13 22:24
static List<Integer> lst=null;//这个用来存储查找字符出现的位置
public static void main(String[] args) {
lst = new ArrayList<Integer>();
char[] arr = { 'f', 's', 'j', 'y', 'j', 'y' };
int index =getIndex(arr, 'j');
System.out.print(index);
// System.out.print(lst);
}
public static int getIndex(char[] arr, char ch) {
if (arr == null)
throw new IllegalArgumentException("数组参数不能为null");
else if(ch==0) throw new IllegalArgumentException("查找的数不能为null");
else {
for (int i = 0; i < arr.length; i++) {
if (arr[i] == ch)//你这里要写成arr[i]
// lst.add(i);
return i;
}
return -1;
}
}
作者:
晏文根
时间:
2012-6-13 22:42
public class SearchIndex
{
public static void main(String[] args)
{
char[] arr = {};
//arr =null;
int index = getIndex(arr,'j');
System.out.print(index);
}
public static int getIndex(char[] arr,char ch)
{
if(arr.length==0)
throw new IllegalArgumentException("数组参数不能为null");
else
{
for(int i=0;i<arr.length;i++)
{
if(arr[i]==ch)//你的是if(arr==ch)这是一个细节错误,要注意
return i;
}
return -1;
}
}
}
我在你那代码上改动了一下,将if(arr==null)改为了 if(arr.length==0),这样就能达到你的预期结果。你的构思真的还不错,以后好好发挥。
另外我分析了你的错误,char的默认值是:“/u0000”,你可以将char先用头totring转为字符串,在与null比较,最好用equals而不是“==”。
作者:
雨后的温暖
时间:
2012-7-11 11:55
王明明 发表于 2012-6-13 21:19
很清晰的思路和代码格式,学习了。
作者:
天琴座
时间:
2012-9-18 20:45
不小心看到这里的,,,学习学习。
作者:
香港
时间:
2014-6-9 11:52
我也刚学,同上吧
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2