黑马程序员技术交流社区
标题:
关于输出换行问题
[打印本页]
作者:
天ya~_琼楼
时间:
2013-11-14 16:06
标题:
关于输出换行问题
本帖最后由 天ya~_琼楼 于 2013-11-14 17:31 编辑
题目:编写程序,打印1到100之内的整数,但数字中包含7的要跳过,例如:17、27、71、72
我的代码如下:
public class test7 {
public static void main(String[] args) {
//定义一个变量,用于存储符合条件的数字个数
int a = 0;
for(int i=1; i<=100;i++){
//计算输出不包含7的数
if((i%10)!=7&&Math.floor(i/10)!=7){
System.out.print(i+"\t");
a++;
}
//没数出10个数字就换行
if (a%10==0)
System.out.println();
}
}
}
复制代码
我的结果如下:
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
中间出现了空行,后将每十个一行输出改为九个一行输出,代码如下:
public class test7 {
public static void main(String[] args) {
//定义一个变量,用于存储符合条件的数字个数
int a = 0;
for(int i=1; i<=100;i++){
//计算输出不包含7的数
if((i%10)!=7&&Math.floor(i/10)!=7){
System.out.print(i+"\t");
a++;
}
//每输出9个数字就换行
if (a%9==0)
System.out.println();
}
}
}
复制代码
结果如下:
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)就可以了,具体的我把代码还有结果给你看。
public static void main(String[] args) {
//定义一个变量,用于存储符合条件的数字个数
int a = 0;
for(int i=1; i<=100;i++){
//计算输出不包含7的数
if((i%10)!=7&&Math.floor(i/10)!=7){
System.out.print(i+"\t");
a++;
}
//没数出10个数字就换行
if (a%10==0 && (i%10)!=7&&Math.floor(i/10)!=7)
System.out.println();
}
}
复制代码
结果是这样的: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