黑马程序员技术交流社区

标题: 一道简单的面试题:去掉1到100之间含7的数,并输出 [打印本页]

作者: ConsciousStream    时间: 2016-1-19 12:53
标题: 一道简单的面试题:去掉1到100之间含7的数,并输出
  1. import java.util.ArrayList;
  2. class Test{
  3.         /**
  4.         *去掉1到100之间含7的数,并输出
  5.         */
  6.         public static void main(String[] args){
  7.                 ArrayList<Integer> al = new ArrayList<>();//创建ArrayList集合
  8.                 //将1到100添加到集合中
  9.                 for(int i=1;i<101;i++){
  10.                         al.add(i);
  11.                 }
  12.                 /*System.out.println(al.size());
  13.                 System.out.println(al);
  14.                 */
  15.                
  16.                 //遍历
  17.                 for(int i=0;i<al.size();i++){
  18.                         if(al.get(i)%10==7||al.get(i)/10==7){//余数为7或者商为7的予以移除
  19.                                 al.remove(i);
  20.                                 i--;//移除过后,索引保持不变。不写有什么后果?
  21.                         }
  22.                 }
  23.                 System.out.println(al.size());//81
  24.                 System.out.println(al);
  25.         }
  26. }
复制代码

作者: ConsciousStream    时间: 2016-1-19 13:05
如果不写的话结果里会出现71 73 75 77 79
因为连续碰到两个含7的数时,当第一个数移除后,size()会减1,后一个数的索引跟着减1,占据前一个数的位置,而此时 i 的值却++了,所以后一个数就没有被get()到了。
作者: rushing    时间: 2016-1-19 13:10
还没看到泛型

作者: fury1994    时间: 2016-1-19 17:25
已收藏~~~
作者: ConsciousStream    时间: 2016-1-19 17:39
rushing 发表于 2016-1-19 13:10
还没看到泛型

哦哦,也可以用StringBuffer做
作者: heima7788    时间: 2016-1-19 18:12
嗯,好好好
作者: DDK畅    时间: 2016-1-19 21:15
完全不知道从何下手,至少目前不知道,过段时间估计就知道了 到时候还能拿你的这个题目来做练习

作者: 付宇_GXie7    时间: 2016-1-19 22:08
class Text {
        public static void main(String[] args) {
                for (int i=1;i <= 100 ;i++ ) {
                        if (i%7==0||i/10==7||i%10==7) {
                                continue;
                        }
                        System.out.println(i);
                }
        }
}

作者: cuculidae    时间: 2016-1-19 22:09
直接用for循环不就好了吗?为什么还要用泛型?这不会更加麻烦吗?
作者: jacky左    时间: 2016-1-19 22:19
受教了,这题听说真的是黑马的面试题
作者: yearn    时间: 2016-1-27 15:01
我觉得这种方式代码简单一点
  1. class  Test15
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 for (int x=1;x<=100 ;x++ )
  6.                 {
  7.                         String str = String.valueOf(x);
  8.                         if(!str.contains("7"))
  9.                                 System.out.println(x);
  10.                 }
  11.         }
  12. }
复制代码

作者: BlackFlag    时间: 2016-1-28 01:05
本帖最后由 BlackFlag 于 2016-1-28 01:12 编辑

public class Test
{
        public static void main(String[] args)
        {
                for (Integer i = 1; i < 101; i++)
                {
                        if (i.toString().contains("7"))
                                continue;
                        System.out.println(i);
                }
        }
}//把Integer转换成String然后调用contains(...)方法即可,没必要那么麻烦。

作者: 参禅悟道    时间: 2016-1-28 09:28
for (int i = 1; i <101; i++) {
        //把int类型的数据转换成字符串格式的
        String iStr=String.valueOf(i);


        if(!iStr.contains("7"))
        {
                 System.out.println(i);
        }
}

作者: qt520    时间: 2016-1-28 11:04
敲敲代码,学习了
作者: z4951061    时间: 2016-1-28 11:54
学习了~
作者: cqs2515    时间: 2016-1-28 14:08
好厉害,学习了
作者: 洋葱头头    时间: 2016-1-28 16:09
qt520 发表于 2016-1-28 11:04
敲敲代码,学习了

我感觉你一直在水




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