排他平方数求你们指错

public class 排他平方数 {
public static int arr[]=new int [6];
public static int a[]=new int [12];
public static void judge(int x) {
int n=x;
for(int i=0;i<=6;i++) {
arr[i]=n%10;
n=n/10;
}
n=n*n;
for(int i=0;i<=12;i++)
{
a[i]=n%10;
n=n/10;
}
if(butong()&&pingfang()) {
System.out.println("");
}
}
public static boolean butong() {
for(int i=0;i<=6;i++) {
for(int j=i-1;j<=6;j++) {
if(arr[i]==arr[j])
return false;
}
}

    return true;
    
}

public static boolean pingfang()
{
    for(int i=0;i<=6;i++) {
        for(int j=0;j<=12;j++) {
            if(arr[i]==a[j])
                return false;
        }
    }
    return true;
    
}
public static void main(String [] args) {
    for(int i=1000000;i<=999999;i++) {
        judge(i);
    }
}

}

for(int i=1000000;i<=999999;i++)
你主函数的循环i开始比结束的值还大,不会进行啊
正确的代码可参考

    public static boolean Compare(int num){
        int[] store = new int[6];
        String midStr = String.valueOf(num);
        //此for循环是将midStr转为数字存进Store数组
        for (int i = 0; i < midStr.length(); i++) {
            store[i] = midStr.charAt(i) - 48;
        }
        //比较这个数中是否有相同的数字
        for (int i = 0; i < store.length; i++) {
            for (int j = i + 1; j < store.length; j++) {
                if (store[i] == store[j]){
                    return true;
                }
            }
        }
        return false;
    }
    
    //将平方数以字符串str传入
    public static boolean Compare2(String str,BigDecimal num){
        int[] PingStore = new int[str.length()];
        //该for循环将str转为数字存在PingStore数组中
        for (int i = 0; i < str.length(); i++) {
            PingStore[i] = str.charAt(i) - 48;
        }
        
        String numStr = num.toString();
        int[] midNum = new int[6];
        for (int i = 0; i < numStr.length(); i++) {
            midNum[i] = numStr.charAt(i) - 48;
        }

        //比较这个数与它的平方数是否有相同的数字
        for (int i = 0; i < 6; i++) {
            for (int j = 0; j < PingStore.length; j++) {
                if (midNum[i] == PingStore[j]){
                    return true;
                }
            }
        }
        return false;
    }

    public static void main(String[] args) {
        for (int i = 100000; i < 1000000; i++) {
            if (!Compare(i)){    //若Compare(i)为false,则继续
                BigDecimal mid = new BigDecimal(i);
                //multiply():java.math.BigDecimal里的方法,用来求乘积
                String PingNum = mid.multiply(mid).toString();
                if (!Compare2(PingNum,mid)){    //若Compare2(PingNum,mid)为false,则继续
                    System.out.println(mid);
                }
            }
        }
    }


代码错误很多。
存在数组越界,两个数组都越界了,分别定义6、12长度大小的数组,是不能访问索引为6、12对应的数组元素的(循环条件加了等号)。
看看是不是这个:

import java.util.*;

public class A
{
    static Set distinct(long x)
    {
        Set t = new HashSet();
        String s = "" + x;
        for(int i=0; i<s.length(); i++) t.add(s.charAt(i));
        return t; 
    }

    static boolean f(int x)
    {
        long y = (long)x * x;
        
        Set a = distinct(x);
        Set b = distinct(y);
        
        if(a.size() != 6) return false;
        
        a.retainAll(b);
        return a.isEmpty(); 
    }
    
    public static void main(String[] args)
    {
        final int A = 1000 * 100;
        final int B = A * 10;
        
        for(int i=A; i<B; i++)
        {
            if(f(i)) 
                System.out.println(i);
        }
    }
}