优化:01-搜索一个字符数组中是否存在某个字符

zzzzzzzzzzzw___ 2020-01-10 02:34:45
需求:
1.代码运行无问题,现在就是想优化。
2.如起名注释加的不对的地方,请指出。
3.处女座,追求完美,如果瑕疵的地方一律指出。
4.2020年先定一个小目标,以后这样的题每天来一道。
题目:
请在一个类中编写一个方法,这个方法搜索一个字符数组中是否存在某个字符,如果存在,则返回这个字符在字符数组中第一次出现的位置(序号从0开始计算),否则,返回-1。要搜索的字符数组和字符都以参数形式传递传递给该方法,如果传入的数组为null,应抛出IllegalArgumentException异常。在类的main方法中以各种可能出现的情况测试验证该方法编写得是否正确,例如,字符不存在,字符存在,传入的数组为null等。
代码:
public class OneDay {

public static void main(String[] args) {
// 创建一个字符数组
char[] str = { 'a', 'a', 'c', '-', 'a' };
// 搜索该字符是否存在字符数组中
int index = search(str,'-');
// 判断字符数组中是否存在该字符
if (index == -1) { // index为-1时,表示字符不存在
System.out.println("该字符不存在");
} else {
System.out.println("字符在字符数组中第一次出现的位置" + index);
}
}

// search方法
private static int search(char[] aStr, char aIndex) {
int index = -1; // 将index的值初始化为-1
if (aStr == null) { // 如果str值为null,则抛出非法数据异常
new IllegalArgumentException().printStackTrace(); // IllegalArgumentException非法数据异常
} else {
for (int i = 0; i < aStr.length; i++) {
if (aIndex == aStr[i]) { // 如果字符数组里面的字符和要搜索的字符一致
index = i; // 就将i的值赋值给index
break; // 满足条件,退出循环
}
}
}
return index; // 打印index的值
}
}
...全文
467 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2020-01-13
  • 打赏
  • 举报
回复
String就是一个final修饰的char数组 indexof返回的就是数组下标,大可不必这样写
zzzzzzzzzzzw___ 2020-01-11
  • 打赏
  • 举报
回复
引用 21 楼 Nonoas 的回复:
[quote=引用 20 楼 伊莱文要变强啊的回复:][quote=引用 18 楼 Nonoas 的回复:]
比如递归求斐波那契数和非递归求,
前者写起来简单,但效率很低的
斐波那契数列在我这个程序中应该用不上吧[/quote] 我是补充前面那条评论的[/quote]那有没有类似这样的题呢,我练习学习下
Nonoas 2020-01-11
  • 打赏
  • 举报
回复
引用 20 楼 伊莱文要变强啊的回复:
[quote=引用 18 楼 Nonoas 的回复:]
比如递归求斐波那契数和非递归求,
前者写起来简单,但效率很低的
斐波那契数列在我这个程序中应该用不上吧[/quote] 我是补充前面那条评论的
zzzzzzzzzzzw___ 2020-01-11
  • 打赏
  • 举报
回复
引用 18 楼 Nonoas 的回复:
比如递归求斐波那契数和非递归求,
前者写起来简单,但效率很低的
斐波那契数列在我这个程序中应该用不上吧
zzzzzzzzzzzw___ 2020-01-10
  • 打赏
  • 举报
回复
引用 18 楼 Nonoas 的回复:
比如递归求斐波那契数和非递归求, 前者写起来简单,但效率很低的
好的,我查一下
Nonoas 2020-01-10
  • 打赏
  • 举报
回复
比如递归求斐波那契数和非递归求, 前者写起来简单,但效率很低的
Nonoas 2020-01-10
  • 打赏
  • 举报
回复
引用 8 楼 还没秃顶的景初的回复:
[quote=引用 6 楼 伊莱文要变强啊 的回复:] [quote=引用 5 楼 亦夜 的回复:] 简便方法可以这样写
char[] str = { 'a', 'a', 'c', '-', 'a' };

        if (str == null)throw  new IllegalArgumentException();
        String s = String.valueOf(str);
        System.out.println(s.indexOf('-'));
刚试了下,确实是可以。[/quote] 只是看起来简单了,其实运行方面的速度都差不多的,这个函数的本质也是一个下标一个下标找的[/quote] 有时候看起来简洁的代码,其执行效率不一定高
zzzzzzzzzzzw___ 2020-01-10
  • 打赏
  • 举报
回复
明天同一时间结贴,写的不对的地方,后来的同学还可以继续帮忙批评指正哈。
zzzzzzzzzzzw___ 2020-01-10
  • 打赏
  • 举报
回复
已编写博客: 01-搜索一个字符数组中是否存在某个字符 https://blog.csdn.net/qq_41293896/article/details/103928926
zzzzzzzzzzzw___ 2020-01-10
  • 打赏
  • 举报
回复
引用 13 楼 guishuanglin 的回复:
java相对来说, 目前生态完整, API文档, 中文说明书, 完完整整的, 不象其它的语言, 找个帮助都难.
是的,尤其是在国内,资源实在是太多了,而且Java培训相当成熟,路线很清晰,我们其实缺的就是一个踏实学习的心。
guishuanglin 2020-01-10
  • 打赏
  • 举报
回复
java相对来说, 目前生态完整, API文档, 中文说明书, 完完整整的, 不象其它的语言, 找个帮助都难.
zzzzzzzzzzzw___ 2020-01-10
  • 打赏
  • 举报
回复
引用 11 楼 guishuanglin 的回复:
来晚了, 这个很简单的问题, 确实在java的API中有现在的方法, 因此, 楼主, 搞开发最少天天看api, 看上半年, 就象读书一样.
不晚不晚,了解了解
guishuanglin 2020-01-10
  • 打赏
  • 举报
回复
来晚了, 这个很简单的问题, 确实在java的API中有现在的方法, 因此, 楼主, 搞开发最少天天看api, 看上半年, 就象读书一样.
zzzzzzzzzzzw___ 2020-01-10
  • 打赏
  • 举报
回复
引用 8 楼 还没秃顶的景初 的回复:
[quote=引用 6 楼 伊莱文要变强啊 的回复:] [quote=引用 5 楼 亦夜 的回复:] 简便方法可以这样写
char[] str = { 'a', 'a', 'c', '-', 'a' };

        if (str == null)throw  new IllegalArgumentException();
        String s = String.valueOf(str);
        System.out.println(s.indexOf('-'));
刚试了下,确实是可以。[/quote] 只是看起来简单了,其实运行方面的速度都差不多的,这个函数的本质也是一个下标一个下标找的[/quote]嗯嗯,是的呢
zzzzzzzzzzzw___ 2020-01-10
  • 打赏
  • 举报
回复
引用 7 楼 亦夜 的回复:
[quote=引用 6 楼 伊莱文要变强啊 的回复:] [quote=引用 5 楼 亦夜 的回复:] 简便方法可以这样写
char[] str = { 'a', 'a', 'c', '-', 'a' };

        if (str == null)throw  new IllegalArgumentException();
        String s = String.valueOf(str);
        System.out.println(s.indexOf('-'));
刚试了下,确实是可以。[/quote] 你不用在意什么,这所谓的简便方法只是你看起来舒服了一些,底层该走的东西还是要走的,你以为他能凭空知道这个字符的位置吗[/quote]学习了,我写个总结记录下来。
  • 打赏
  • 举报
回复
引用 6 楼 伊莱文要变强啊 的回复:
[quote=引用 5 楼 亦夜 的回复:] 简便方法可以这样写
char[] str = { 'a', 'a', 'c', '-', 'a' };

        if (str == null)throw  new IllegalArgumentException();
        String s = String.valueOf(str);
        System.out.println(s.indexOf('-'));
刚试了下,确实是可以。[/quote] 只是看起来简单了,其实运行方面的速度都差不多的,这个函数的本质也是一个下标一个下标找的
亦夜 2020-01-10
  • 打赏
  • 举报
回复
引用 6 楼 伊莱文要变强啊 的回复:
[quote=引用 5 楼 亦夜 的回复:] 简便方法可以这样写
char[] str = { 'a', 'a', 'c', '-', 'a' };

        if (str == null)throw  new IllegalArgumentException();
        String s = String.valueOf(str);
        System.out.println(s.indexOf('-'));
刚试了下,确实是可以。[/quote] 你不用在意什么,这所谓的简便方法只是你看起来舒服了一些,底层该走的东西还是要走的,你以为他能凭空知道这个字符的位置吗
zzzzzzzzzzzw___ 2020-01-10
  • 打赏
  • 举报
回复
引用 5 楼 亦夜 的回复:
简便方法可以这样写
char[] str = { 'a', 'a', 'c', '-', 'a' };

        if (str == null)throw  new IllegalArgumentException();
        String s = String.valueOf(str);
        System.out.println(s.indexOf('-'));
刚试了下,确实是可以。
亦夜 2020-01-10
  • 打赏
  • 举报
回复
简便方法可以这样写
char[] str = { 'a', 'a', 'c', '-', 'a' };

        if (str == null)throw  new IllegalArgumentException();
        String s = String.valueOf(str);
        System.out.println(s.indexOf('-'));
亦夜 2020-01-10
  • 打赏
  • 举报
回复
异常使用:throw new IllegalArgumentException();抛出 else就不需要了,创建对象调用方法,并不会影响后续程序的执行,这种单线程的小程序其实优化的地方很少,而且也没必要,只是编程习惯的注意,就比如你已经获取到了index其实直接return就行了,如果是双重for呢break就只会跳最里层,但是return就会直接将方法返回
加载更多回复(2)

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧