A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

作为Java初学者,我最近一直跟着毕老师敲代码。由于白天工作,只能晚上加班看视频学习,这样我独自思考的时间很少。同时也导致我遇到问题的时候往往不知所措,所以我就在论坛上找了些相关的基础题练练手,下面我就简单的介绍一下我觉得很有成就感的一题。
   题目要求如下:
                              打印1-100之内的整数,但包含7的不打印,例如7,17,71,等。
这个题目是自己独立完成的,思路有两种:
                        一、个位数为7的用算术运算的%算法找出;
                                十位数为7的使用if语句将70-79之间的数提出。
但转过来思考一下,觉得这样做欠妥,因为我知道1-100中有70-79,假如是一个我不知道的数组呢?于是有了第二种思考方法:
                        二、个位数为7的用算术运算的%算法找出;
                                十位数为7的用算术运算的/算法找出;
                                然后再讲各位和十位的处理结果用逻辑运算符||处理,并加以循环判断条件。
如是,程序就来了,
class Demo1
{
        public static void main(String [] args)
        {
                haha : for (int x=1;x<=100;x++)
                                {
                                        if (x%10==7 || x/10==7)
                                                continue haha;
                                        System.out.println(x);
                                }                               
        }
}
代码简洁而且高效,如果是找出数组中含有7的元素,或者是类似类型,相当于增加了对数组进行遍历。


发散思维:如果本题中将1-100改为1-1000,1-10000呢?
                    if语句中的条件改如何修改?
                1-1000:x%10==7  ||  ( (x/10)%10==7 ||x/100==7)  //判断个位,判断十位,判断百位。???
                1-10000:   

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 赞一个!

查看全部评分

17 个回复

倒序浏览
循环判断,每次%10跟7比较相等就说明有7,如果没有原数字/10,继续%10与7比较,循环到原数==0或者小雨1就结束,返回是否有7这个数字就好了,很简单
回复 使用道具 举报
楼上是对的!
回复 使用道具 举报
可以将其转换成字符串,然后contains试试
回复 使用道具 举报 0 1
List<String> list = new ArrayList<>();
                for (int i = 1; i <= 100; i++) {
                        if(Integer.toString(i).contains("7")){
                                continue;
                        }else{
                                list.add(i+"");
                        }
                }
                System.out.println(list);
回复 使用道具 举报
dong53821713 发表于 2014-10-28 13:31
List list = new ArrayList();
                for (int i = 1; i

String 我还没学到~
回复 使用道具 举报
ll_shitou 发表于 2014-10-28 12:40
循环判断,每次%10跟7比较相等就说明有7,如果没有原数字/10,继续%10与7比较,循环到原数==0或者小雨1就结 ...

这样好像不够精简,但是方法不错!谢谢,原来后面使用contains方法最快速了。
回复 使用道具 举报
mingtianrsm 发表于 2014-10-28 13:04
可以将其转换成字符串,然后contains试试

嗯 楼下给出程序了,谢谢
回复 使用道具 举报
huoxy 中级黑马 2014-10-28 14:30:06
9#
一个小建议:由于continue只能用在switch和循环中,此处只有一层循环,不需要加haha标号即可。
回复 使用道具 举报
huoxy 发表于 2014-10-28 14:30
一个小建议:由于continue只能用在switch和循环中,此处只有一层循环,不需要加haha标号即可。 ...

对,你说的对,不过看毕老师的视频就喜欢写haha了
回复 使用道具 举报
菜鸟小6 来自手机 中级黑马 2014-10-29 12:29:56
11#
还有学到,但是自己做的话,做不出
回复 使用道具 举报
  1. int a = 100;
  2.                 for (int i = 1; i <= a; i++) {
  3.                         String str = String.valueOf(i);
  4.                         if (str.indexOf("7") == -1) {//若不包含“7”
  5.                                 System.out.print(i + ",");
  6.                                 if (i % 10 == 0) {//每遇10,20,30...换行
  7.                                         System.out.println("");
  8.                                 }
  9.                         }

  10.                 }
复制代码


希望能帮到你
回复 使用道具 举报

谢谢 我还没学到String 以后多交流~
回复 使用道具 举报
王世虎 发表于 2014-11-1 08:19
谢谢 我还没学到String 以后多交流~

很简单到时候学了就会
回复 使用道具 举报
ジ旋律 来自手机 中级黑马 2014-11-1 13:16:49
15#
很有意思嘛
回复 使用道具 举报
我做的时候也是这样做的,,,但如果范围扩大,总感觉这种方法不是那么高效。

QQ截图20141101133023.png (8.04 KB, 下载次数: 38)

QQ截图20141101133023.png
回复 使用道具 举报
高昌德 发表于 2014-11-1 13:31
我做的时候也是这样做的,,,但如果范围扩大,总感觉这种方法不是那么高效。 ...

等学到String语句了就有高效的方法了
回复 使用道具 举报
没学String  用%和/就可以。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马