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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 插兜 中级黑马   /  2015-9-14 17:12  /  1526 人查看  /  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 个回复

正序浏览
xiaoya0o0o 发表于 2015-9-16 23:08
i*100 是为了凑数,为了下面for(int j=0; j

谢谢了,
回复 使用道具 举报
Mr.W 中级黑马 2015-9-17 00:44:52
24#
kenfans 发表于 2015-9-16 21:02
发散思维肯定值得鼓励啊,但是写代码的基本要求就是简洁效率高,可读性强。在这两个条件下,什么方法都是 ...

唉,我们知道,写的人不知道。这叫闲的
回复 使用道具 举报
i*100 是为了凑数,为了下面for(int j=0; j<3; j++),刚开始1-9的时候,如果只有intArr = Integer.toString(i*).toCharArray();的时候走到
for(int j=0; j<3; j++){
                        if(intArr[j]==log)
                                num++;
                }
会抛出 java.lang.ArrayIndexOutOfBoundsException数组下标越界的异常
回复 使用道具 举报
Mr.W 发表于 2015-9-16 17:24
然后加个!,就不输出带7 的了

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

发散思维肯定值得鼓励啊,但是写代码的基本要求就是简洁效率高,可读性强。在这两个条件下,什么方法都是好方法,如果写得繁琐得上百行,鬼都看不懂的代码。这种代码我都是看得懒得看的。搞开发的也不会用这种代码
回复 使用道具 举报
Mr.W 中级黑马 2015-9-16 17:24:31
20#

然后加个!,就不输出带7 的了{:2_35:}
回复 使用道具 举报
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 10:52
我写的时候思路和你是一样的,只能说更多的解题方法,发散了自己的思维吧,还是值得鼓励的 ...

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

为什么i*100,j又代表什么。for循环是为了什么,看不懂啊。
回复 使用道具 举报
Mr.W 中级黑马 2015-9-16 10:52:30
16#
kenfans 发表于 2015-9-16 00:09
不是装不装的问题,我是不认识这个写代码的,要是认识我就直接开骂了。代码本来就讲究个简洁。我写个你看 ...

我写的时候思路和你是一样的,只能说更多的解题方法,发散了自己的思维吧,还是值得鼓励的
回复 使用道具 举报
  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-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到100之间只要是十位与个位是7的你就跳过就可以了
回复 使用道具 举报
没看懂
回复 使用道具 举报
其实我只是路过的
回复 使用道具 举报
路过,顶一下
回复 使用道具 举报

水的一手好帖
回复 使用道具 举报
Wqi 高级黑马 2015-9-14 21:13:28
8#
水的一手好帖
回复 使用道具 举报
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的就行了
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马