黑马程序员技术交流社区

标题: 为什么我觉得我也得代码好复杂,有什么好方法可以简化吗 [打印本页]

作者: 仰天长啸    时间: 2015-3-2 20:13
标题: 为什么我觉得我也得代码好复杂,有什么好方法可以简化吗
//定义一个包含10个整数,然后查询任意这个数字是否在该10个数字内
public class first004 {
        public static void main(String[] args) {
                int [] arr={11,23,45,67,81,90,33,77,88,10};
                find(arr);
               
        }

        private static void find(int [] arr) {
                System.out.println("您输入您要查询的数字");
                Scanner sc=new Scanner(System.in);
                int num=sc.nextInt();
                boolean flag = true;
                for(int a=0;a<arr.length;a++){
                        if(num==arr[a]){
                                flag=true;
                        }   
                       
                        else{
                                flag=false;
                        }
                        }
                        if(flag==true){
                                System.out.println("您查询的数字在数组里面");
                                }
                        if(flag==false){
                                System.out.println("您查询的数字不在数组里面");
                        }
                }       
}


作者: fantacyleo    时间: 2015-3-2 20:17
不用flag,for循环if(num==arr[a])成立则直接输出“找到”,然后return就行了。没有return、出了for循环就是没找到,输出“找不到”即可

作者: 仰天长啸    时间: 2015-3-2 20:28
你这个方法我试了 会输出arr.length个找不到,我忘了学的时候怎么写的啦,自己想想感觉不对劲,就发帖问问:'(
作者: 仰天长啸    时间: 2015-3-2 20:30
其实我试了好几次 把输出语句换了好几个位置,都不行,跳不出循环。要是后面没有else这个还能跳出循环{:3_50:}
作者: z47057554    时间: 2015-3-2 23:25
本帖最后由 z47057554 于 2015-3-2 23:33 编辑

这是我做的精简,希望对你有帮助:
private static void find(int [] arr) {
        System.out.println("您输入您要查询的数字");
        Scanner sc=new Scanner(System.in);
        int num=sc.nextInt();

        boolean flag = false;//true-->false
        for(int a=0;a<arr.length;a++){
                if(num==arr[a]){
                        flag=true;//只在找到时变为真,找不到依然为假                                               break;                           
              }
        }
                 
        if(flag==true)
                System.out.println("您查询的数字在数组里面");
     else
                System.out.println("您查询的数字不在数组里面");            
}





作者: 奋斗小青年    时间: 2015-3-2 23:41
给楼主一个新的写法,可以直接用集合去做,将数组转成集合,用集合方法自动查找。会比循环比较方便点。
  1. //定义一个包含10个整数,然后查询任意这个数字是否在该10个数字内
  2. class first004 {
  3.         public static void main(String[] args)
  4.         {
  5.                 Integer [] arr={11,23,45,67,81,90,33,77,88,10};
  6.                 find(arr);
  7.                
  8.         }

  9.         private static void find(Integer [] arr)
  10.         {
  11.                 System.out.println("您输入您要查询的数字");
  12.                 Scanner sc=new Scanner(System.in);
  13.                 int num=sc.nextInt();
  14.                 boolean flag = false;
  15.                
  16.                 List<Integer> list =  Arrays.asList(arr);
  17.                
  18.                 if(list.contains(sc))
  19.                 {
  20.                         System.out.println("存在");
  21.                 }
  22.                 else
  23.                 {
  24.                         System.out.println("不存在");
  25.                 }
  26.         }
  27. }
复制代码


作者: fantacyleo    时间: 2015-3-3 00:04
仰天长啸 发表于 2015-3-2 20:28
你这个方法我试了 会输出arr.length个找不到,我忘了学的时候怎么写的啦,自己想想感觉不对劲,就发帖问问: ...

不会出现这种情况的。你是还没明白我的意思
作者: huangchunwei    时间: 2015-3-3 07:52
学习学习。
作者: alvis2015    时间: 2015-3-3 14:51
如果找到就跳出循环,没必要在找下去了
作者: linuxpara910829    时间: 2015-3-3 18:09
可以用集合  或者数组的工具类   代码不用写  只要调用方法就可以
作者: 夏季熬成了秋    时间: 2015-3-3 22:06
这个 写代码 首先能写出来就行,然后在此基础上想法自己研究下简化。时间长了写的代码就简单化了
作者: 仰天长啸    时间: 2015-3-3 22:11
上完传智播客回来的路上就想 我必须进去黑马,因为这是最后的一条可以选择的路!!!压力很大




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2