黑马程序员技术交流社区

标题: 关于输出换行问题 [打印本页]

作者: 天ya~_琼楼    时间: 2013-11-14 16:06
标题: 关于输出换行问题
本帖最后由 天ya~_琼楼 于 2013-11-14 17:31 编辑

题目:编写程序,打印1到100之内的整数,但数字中包含7的要跳过,例如:17、27、71、72
我的代码如下:
  1. public class test7 {
  2.         public static void main(String[] args) {
  3.                 //定义一个变量,用于存储符合条件的数字个数
  4.                 int a = 0;
  5.                 for(int i=1; i<=100;i++){
  6.                         //计算输出不包含7的数
  7.                         if((i%10)!=7&&Math.floor(i/10)!=7){
  8.                                 System.out.print(i+"\t");
  9.                                 a++;
  10.                         }
  11.                         //没数出10个数字就换行
  12.                         if (a%10==0)
  13.                                 System.out.println();
  14.                 }
  15.         }
  16. }
复制代码
我的结果如下:
1        2        3        4        5        6        8        9        10        11        
12        13        14        15        16        18        19        20        21        22        
23        24        25        26        28        29        30        31        32        33        
34        35        36        38        39        40        41        42        43        44        
45        46        48        49        50        51        52        53        54        55        
56        58        59        60        61        62        63        64        65        66        

68        69        80        81        82        83        84        85        86        88        
89        90        91        92        93        94        95        96        98        99        
100        
中间出现了空行,后将每十个一行输出改为九个一行输出,代码如下:
  1. public class test7 {
  2.         public static void main(String[] args) {
  3.                 //定义一个变量,用于存储符合条件的数字个数
  4.                 int a = 0;
  5.                 for(int i=1; i<=100;i++){
  6.                         //计算输出不包含7的数
  7.                         if((i%10)!=7&&Math.floor(i/10)!=7){
  8.                                 System.out.print(i+"\t");
  9.                                 a++;
  10.                         }
  11.                         //每输出9个数字就换行
  12.                         if (a%9==0)
  13.                                 System.out.println();
  14.                 }
  15.         }
  16. }
复制代码
结果如下:
1        2        3        4        5        6        8        9        10        
11        12        13        14        15        16        18        19        20        
21        22        23        24        25        26        28        29        30        
31        32        33        34        35        36        38        39        40        
41        42        43        44        45        46        48        49        50        
51        52        53        54        55        56        58        59        60        
61        62        63        64        65        66        68        69        80        
81        82        83        84        85        86        88        89        90        
91        92        93        94        95        96        98        99        100        
请教各位大大,为什么每十个一行输出中间会出现了空行?为什么每九个一行输出这个问题就消失了呢?
作者: linjl_ll    时间: 2013-11-14 16:24
使用调试你会发现问题,我调试的断点是:
//没数出10个数字就换行
System.out.println();
这条语句,我发现当i=66是a=60,此时会换行,接着再循环i=67此时,第一个循环不进去,所以此时a还是60
所以换行那个语句还是会执行的,你那个9个换一行的估计数字打了也会出错。
哥们出现错误可以使用eclipse进行调试。不知道你现在是不是使用文本编辑器开发。。
作者: 李其明    时间: 2013-11-14 16:51
因为你的if打印空行语句在if判断是否包含7后面,不管数字是否包含7,你的if打印空行依然会执行,所以当符合条件的时候就多打了一个空行了。你把你的if打印空行语句放到if判断包含7语句的最后一行,就会有效果了。
作者: 星星Fighting    时间: 2013-11-14 16:52
哥们,你只要在判断换行语句那里将条件变得更加严谨一点就可以了,因为很明显67这个数字在66的后面,而66这个数字的a会令程序换行,而此时67也会换行的,所以才会换行两次,你要是想只换行一次,像下面的代码将判断语句换成if (a%10==0 && (i%10)!=7&&Math.floor(i/10)!=7)就可以了,具体的我把代码还有结果给你看。
  1. public static void main(String[] args) {

  2.                         //定义一个变量,用于存储符合条件的数字个数
  3.                         int a = 0;
  4.                         for(int i=1; i<=100;i++){
  5.                                 //计算输出不包含7的数
  6.                                 if((i%10)!=7&&Math.floor(i/10)!=7){
  7.                                         System.out.print(i+"\t");
  8.                                         a++;
  9.                                 }
  10.                                 //没数出10个数字就换行
  11.                                 if (a%10==0 && (i%10)!=7&&Math.floor(i/10)!=7)
  12.                                         System.out.println();
  13.                                                
  14.                         }
  15.                 }
复制代码
结果是这样的:1        2        3        4        5        6        8        9        10        11       
12        13        14        15        16        18        19        20        21        22       
23        24        25        26        28        29        30        31        32        33       
34        35        36        38        39        40        41        42        43        44       
45        46        48        49        50        51        52        53        54        55       
56        58        59        60        61        62        63        64        65        66       
68        69        80        81        82        83        84        85        86        88       
89        90        91        92        93        94        95        96        98        99       
100       


作者: 天ya~_琼楼    时间: 2013-11-14 16:56
本帖最后由 天ya~_琼楼 于 2013-11-14 17:16 编辑
linjl_ll 发表于 2013-11-14 16:24
使用调试你会发现问题,我调试的断点是:
//没数出10个数字就换行
System.out.println();

谢谢!问题的确出在这了,我把
if (a%10==0)
       System.out.println();
放在了a++下边,问题就解决了。
   不过我刚才试了很多次,我把数据上限提高到了20000,每九个一行没有出现空行,不仅如此,每18、27、36个一行都没有出现此问题,好像是9或9的倍数把这个漏洞巧妙的避开了。    原因是每10个数中有九个符合条件的,每九个一行,正好把包含7的数放在了行中。

作者: 2406035442    时间: 2014-10-10 23:13
态度很好。。。。





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