下面这个小程序题,题目: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个不能出正确结果?

解决方案 »

  1.   

    看一下我写的吧:
    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); }}
      

  2.   

     
    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);
    }
    }
    }
      

  3.   

    还是太小就把 n 定义成long类型的。
    long n=1000000;
      

  4.   

    不会吧,在我机上行哦,会不会机器或jdk版本问题啊?
      

  5.   

    给你改了改把zhaoYi函数的参数变成long型可以解决
    而且楼上的都说了你原来的那个方法一个数有多个一的会多打
    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); } } 
      

  6.   

    2楼
    if(i/10==1 || i%10==1)//主要是这一句了 
    正解
      

  7.   

    for(i=0;i<=n;i++) { 
     while(true) {
     if(i/10==1 || i%10==1)//主要是这一句了 {
         System.out.print(i); 
          break;    
       } else {
         i = i / 10;
       }
      }
    }
    给2楼的改了下
      

  8.   

    for(i=0;i <=n;i++) { 
    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; 
      } 
      } 

    这样呢?
      

  9.   

    谢谢大家踊跃帮助了。
    不知道你们是在什么编译工具上写的。我当时是用的Myeclipse。我当时说到1000时还是正确的,但到了10000开始就不出结果了。
    后来反复尝试,发现原因不是程序的问题。而是输出的问题。
    你们注意看看这句:System.out.print(j+" "); 它的意思是在一行输出。
    我发现myeclipse,如果你不让它换行,它自己不会换行。结果因为输出数据太多,装不下,结果没有显示。
    如果改成System.out.println(j+" "); 发现就没问题了。我让它一行只输出一个结果。
      

  10.   

    还有,要注意一下。int类型 的最大可容的数字。100000已经超出它的范围 了。得出的结果也不会正确