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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 插兜 中级黑马   /  2015-9-14 17:12  /  1525 人查看  /  24 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天早上看了个帖子,楼主写了块代码,有一块一直没看懂,就大神帮解释下。
原代码如下:
/**
* 第七题: 编写程序,打印1到100之内的整数,但数字中包含7的要跳过,例如:17、27、71、72
* @author Machel
*/
class Test7{
        public static void main(String[] args){
                char log = '7';
                char[] intArr;
                int num = 0;
                for(int i=1; i<=100; i++)
                {
                        intArr = Integer.toString(i*100).toCharArray();
                        for(int j=0; j<3; j++)
                        {
                                if(intArr[j]==log)
                                        num++;
                        }
                        if(num==0)
                        {
                                if(i==100)
                                        System.out.print("["+i+"]");
                                else
                                        System.out.print("["+i+"]"+",");
                        }
                        else
                                num = 0;
                }
        }
}
到这结束了。不懂的地方如下:
为什么i*100,j又代表什么。
intArr = Integer.toString(i*100).toCharArray();
                        for(int j=0; j<3; j++)//这个for循环是为了什么呢
                        {
                                if(intArr[j]==log)
                                        num++;
                        }

24 个回复

倒序浏览
这代码写得真……

包含7的跳过就对10取余不就完了,还搞个循环for嵌套for,if嵌套if,toString又tocharArray连个注释都没有

一个循环就可以搞定的代码,硬是写得复杂得要死
回复 使用道具 举报
首先建议楼主,代码还需要简练。
Integer.toString(i*100) 是因为后面的 j 固定3,如果当i=1~9时,位数不足3位,那么循环for (int j = 0; j<3;j++)
必然报错。

如果要仅仅实现去掉包含7的数字,建议使用如下代码:
for (int i = 1; i <= 100; i++){
  int res = Integer.toString(i).indexOf('7'); // 是否包含7
  if (res != 0){
    // 包含
  } else {
   // 不包含
  }
}
回复 使用道具 举报
kenfans 发表于 2015-9-14 18:11
这代码写得真……

包含7的跳过就对10取余不就完了,还搞个循环for嵌套for,if嵌套if,toString又tocharArr ...

完美的装了个13
回复 使用道具 举报
楼主加油,再好好研究研究
回复 使用道具 举报
heshiwei 发表于 2015-9-14 18:24
首先建议楼主,代码还需要简练。
Integer.toString(i*100) 是因为后面的 j 固定3,如果当i=1~9时,位数不 ...

indexOf('7'),这只表示第一个7吧,还有77的呢
回复 使用道具 举报
Mr.W 中级黑马 2015-9-14 21:11:52
7#
heshiwei 发表于 2015-9-14 18:24
首先建议楼主,代码还需要简练。
Integer.toString(i*100) 是因为后面的 j 固定3,如果当i=1~9时,位数不 ...

你是对的,只要排除有7的就行了
回复 使用道具 举报
Wqi 高级黑马 2015-9-14 21:13:28
8#
水的一手好帖
回复 使用道具 举报

水的一手好帖
回复 使用道具 举报
路过,顶一下
回复 使用道具 举报
其实我只是路过的
回复 使用道具 举报
没看懂
回复 使用道具 举报
楼主,1到100之间只要是十位与个位是7的你就跳过就可以了
回复 使用道具 举报
Mr.W 发表于 2015-9-14 21:01
完美的装了个13

不是装不装的问题,我是不认识这个写代码的,要是认识我就直接开骂了。代码本来就讲究个简洁。我写个你看。
int[] a = new int[100];
int pos = 0;
for(int x=0;x<=100;x++){
     if((x%10==7)||(x/10==7))
          continue;
    else{
    a[pos]=x;
     pos++;
     }
}
一个for一个if就搞定了,写得麻烦给谁看?
回复 使用道具 举报
  1. //利用字符串String中的contains()方法判断是否包含7
  2. public class Temp {
  3.         public static void main(String[] args) {
  4.                 String str = null;
  5.                 for(int i = 1;i <= 100;i++){
  6.                         str = String.valueOf(i);
  7.                         if(str.contains("7")) { //包含7的输出
  8.                                 System.out.println(str);
  9.                         }
  10.                 }
  11.         }
  12. }
复制代码

输出
  1. 7
  2. 17
  3. 27
  4. 37
  5. 47
  6. 57
  7. 67
  8. 70
  9. 71
  10. 72
  11. 73
  12. 74
  13. 75
  14. 76
  15. 77
  16. 78
  17. 79
  18. 87
  19. 97
复制代码
回复 使用道具 举报
Mr.W 中级黑马 2015-9-16 10:52:30
16#
kenfans 发表于 2015-9-16 00:09
不是装不装的问题,我是不认识这个写代码的,要是认识我就直接开骂了。代码本来就讲究个简洁。我写个你看 ...

我写的时候思路和你是一样的,只能说更多的解题方法,发散了自己的思维吧,还是值得鼓励的
回复 使用道具 举报
Mr.W 发表于 2015-9-16 10:52
我写的时候思路和你是一样的,只能说更多的解题方法,发散了自己的思维吧,还是值得鼓励的 ...

为什么i*100,j又代表什么。for循环是为了什么,看不懂啊。
回复 使用道具 举报
Mr.W 发表于 2015-9-16 10:52
我写的时候思路和你是一样的,只能说更多的解题方法,发散了自己的思维吧,还是值得鼓励的 ...

我是想知道原因,多学点思路。
回复 使用道具 举报
Mr.W 中级黑马 2015-9-16 17:22:19
19#
插兜 发表于 2015-9-16 12:57
为什么i*100,j又代表什么。for循环是为了什么,看不懂啊。

i*100,我觉得他的意思是为了凑成一个长度为3(就是j循环)的数组,这就是Integer.toString(i*100).toCharArray();的意义。再比较数组里面有没有字符7.这个方法可以放弃了,回复里有很多很好的办法啊
回复 使用道具 举报
Mr.W 中级黑马 2015-9-16 17:24:31
20#

然后加个!,就不输出带7 的了{:2_35:}
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马