下面这个小程序题,题目:n以内只要带1就输出。比如说:100以内:1,10,11,12 13 14 15 16 17 18 19 21 31 41 51 61 71 81 91
下面是程序
package deleter;public class zhaoYi { /**
* @param args
*/
public static void zhaoYi(int n){ for(int j=0;j<n;j++){
String a=Integer.toString(j);
for(int i=0;i<a.length();i++){
if('1'==a.charAt(i)){
System.out.print(j+" ");
}
}
}
System.out.println("-------------------------");
}
public static void main(String[] args) {
// zhaoYi(24);
zhaoYi(100);
// zhaoYi(1000);
// zhaoYi(10000);
// zhaoYi(100000);
// zhaoYi(1000000); }}
前三个都可以出正确结果,问:为什么后3个不能出正确结果?
下面是程序
package deleter;public class zhaoYi { /**
* @param args
*/
public static void zhaoYi(int n){ for(int j=0;j<n;j++){
String a=Integer.toString(j);
for(int i=0;i<a.length();i++){
if('1'==a.charAt(i)){
System.out.print(j+" ");
}
}
}
System.out.println("-------------------------");
}
public static void main(String[] args) {
// zhaoYi(24);
zhaoYi(100);
// zhaoYi(1000);
// zhaoYi(10000);
// zhaoYi(100000);
// zhaoYi(1000000); }}
前三个都可以出正确结果,问:为什么后3个不能出正确结果?
public class findOne { /**
* @param args
*/
public static void findone(int n)
{
int i;
for(i=1;i<=n;i++)
{
if(i/10==1 || i%10==1)//主要是这一句了
System.out.println(i);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
findone(100); }}
public static void main(String[] args) {
int n=1000000;//自己指定
for (int i=1;i<=n;i++){
String s=i+"";
if (s.indexOf("1")!=-1){
System.out.println(s);
}
}
}
long n=1000000;
而且楼上的都说了你原来的那个方法一个数有多个一的会多打
public class zhaoYi { /**
* @param args
*/ public static void zhaoYi(long n){
for (int i = 1;i <= n;i++) {
String str = String.valueOf(i);
if (str.indexOf('1') != -1) {
System.out.print(str + " ");
}
}
System.out.println("-------------------------");
} public static void main(String[] args) {
zhaoYi(24);
zhaoYi(100);
zhaoYi(1000);
zhaoYi(10000);
zhaoYi(100000);
zhaoYi(1000000); } }
if(i/10==1 || i%10==1)//主要是这一句了
正解
while(true) {
if(i/10==1 || i%10==1)//主要是这一句了 {
System.out.print(i);
break;
} else {
i = i / 10;
}
}
}
给2楼的改了下
if(i < 10) {
System.out.print(1);
}
while(i >= 10) {
if(i/10==1 || i%10==1) {
System.out.print(i);
break;
} else {
i = i / 10;
}
}
}
这样呢?
不知道你们是在什么编译工具上写的。我当时是用的Myeclipse。我当时说到1000时还是正确的,但到了10000开始就不出结果了。
后来反复尝试,发现原因不是程序的问题。而是输出的问题。
你们注意看看这句:System.out.print(j+" "); 它的意思是在一行输出。
我发现myeclipse,如果你不让它换行,它自己不会换行。结果因为输出数据太多,装不下,结果没有显示。
如果改成System.out.println(j+" "); 发现就没问题了。我让它一行只输出一个结果。