题目用1到9组成3个三位数(每个数字只能用一次),使其中两个数的和等于第三个数
要求数组方法,输出所有满足条件的等式(如124 + 659 = 783
125 + 739 = 864) 
我自己写的
import java.util.* ;
public class ArrayTest {
public static void main(String[] args){
int[] arr = new int[9*8*7];
int i , j , k , x = 0 ;
for(i = 1 ; i < 10 ; i ++){
for(j =1 ; j < 10 ; j ++){
if(j == i){
continue ;
}
for(k = 1; k < 10 ; k ++){
if(k == j||k==i){
continue ;
}
arr[x] = 100*i+10*j+k ;
x ++ ;
}
}
}
for(int a = 0 ; a <= arr.length ; a ++){
for(int b = 0 ; b <= arr.length ; b ++){
for(int c = 0 ; c <= arr.length ; c ++){
if((arr[a]+arr[b])==arr[c]){
         System.out.print(arr[a]+"+"+arr[b]+"="+arr[c]);
}

}
}
}
}
}
输出异常123+123=246Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 504
at ArrayTest.main(ArrayTest.java:23)

解决方案 »

  1.   

    a <= arr.length
    b <= arr.length
    c <= arr.length
    你的问题就出在这里的"="上面,下标值等于数组长度的时候就越界了,写成小于就可以了
    a < arr.length
    b < arr.length
    c < arr.length粗心了吧
      

  2.   

    public class Test {
    public static void main(String[] args) {
    int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    arrange(arr, 8);
    } public static void arrange(int[] arr, int n) {
    if (n == 0) {
    return;
    } else {
    for (int i = 0; i < n; i++) {
    swap(arr, i, n);
    arrange(arr, n - 1);
    if (n == 1) {
    istrue(arr);
    }
    swap(arr, i, n);
    }
    arrange(arr, n - 1);
    if (n == 1) {
    istrue(arr);
    }
    }
    } public static void swap(int[] arr, int i, int j) {
    int temp;
    temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp; } public static void istrue(int[] arr) {
    int num1 = arr[0] * 100 + arr[1] * 10 + arr[2];
    int num2 = arr[3] * 100 + arr[4] * 10 + arr[5];
    int num3 = arr[6] * 100 + arr[7] * 10 + arr[8];
    if (num1 + num2 == num3) {
    System.out.println(num1 + "+" + num2 + "=" + num3);
    }
    }
    }
      

  3.   

    就是求出array[9]的全排列,然后一个个验证的意思么。。
      

  4.   

    我使用List集合实现了一个,可能比起4楼的代码有点多,但总归是实现了,分享出来,供大家参考,不足的地方欢迎大家指正:import java.util.ArrayList;
    import java.util.List;/**
     * 用1到9组成3个三位数(每个数字只能用一次),使其中两个数的和等于第三个数
     * 
     * @author Administrator
     * 
     */
    public class SumTest {
    public static void main(String[] args) {
    SumTest test = new SumTest();
    /*
     * 第一个数的集合
     */
    List<Integer> list = test.generateNumber();
    /*
     * 第二个数的集合
     */ List<Integer> copyList = new ArrayList<Integer>();
    copyList.addAll(list);
    /*
     * 所有和的集合
     */
    List<Integer> sumList = new ArrayList<Integer>();
    sumList.addAll(list);
    /*
     * 检查并输出满足要求所有数字
     */
    test.checkAllNumber(list, copyList, sumList);

    } /**
     * 得到一个集合,这个集合中包含了由1-9组成的三位数。并且每个三位数每一位都不重复
     * 
     * @return
     */
    public List<Integer> generateNumber() {
    List<Integer> list = new ArrayList<Integer>();
    for (int i = 1; i < 10; i++) {
    for (int j = 1; j < 10; j++) {
    if (i == j) {
    continue;
    }
    for (int k = 1; k < 10; k++) {
    if (i == k || j == k) {
    continue;
    }
    list.add(Integer.parseInt(i + "" + j + "" + k));
    }
    }
    }
    return list;
    } /**
     * 检查三个数,保证三个数每一位都不相同
     * 
     * @param number1List
     *            第一个数
     * @param number2List
     *            第二个数
     * @param sumList
     *            第三个数
     */
    public void checkAllNumber(List<Integer> number1List,
    List<Integer> number2List, List<Integer> sumList) {
    for (int i = 1; i < number1List.size(); i++) {
    for (int j = 1; j < number2List.size(); j++) {
    if (!checkNumber(number1List.get(i), number2List.get(j))) {
    continue;
    }
    for (int k = 1; k < sumList.size(); k++) {
    if (!checkNumber(number1List.get(i), sumList.get(k))
    || !checkNumber(number2List.get(j), sumList.get(k))) {
    continue;
    }
    outputNumber(number1List.get(i), number2List.get(j),
    sumList.get(k));
    }
    }
    }
    } /**
     * 检查两个数,保证两个数每一位都不相同
     * 
     * @param number
     * @param number2
     * @return 如果有一位相同,返回<code>false</code>, 否则,返回<code>true</code>
     */
    public boolean checkNumber(int number, int number2) {
    String n1 = number + "";
    String n2 = number2 + "";
    if (n1.length() != n2.length()) {
    return false;
    }
    for (int i = 0; i < n1.length(); i++) {
    for (int j = 0; j < n2.length(); j++) {
    if (n1.charAt(i) == n2.charAt(j)) {
    return false;
    }
    }
    }
    return true;
    } /**
     * 如果<code>number1+number2=sum</code>, output.<br>
     * output format:<code>number1+number2=sum</code> such as:
     * <code>752+184=936</code>
     * 
     * @param number1
     *            第一个数
     * @param number2
     *            第二个数
     * @param sum
     *            和
     */
    public void outputNumber(int number1, int number2, int sum) {
    if (number1 + number2 == sum) {
    System.out.println(number1 + "+" + number2 + "=" + sum);
    }
    }}
      

  5.   

    特别说明:中间有点绿色的并不是注释掉了,可能是csdn的识别器出了问题,大家可以把代码直接粘进自己的IDE进行查看,
      

  6.   

    public class Miooo {
    public static void main(String[] args) {
    new Miooo().f(0);
    } private final int M = 9;
    private int[] list = new int[M];
    private int num = 0; private void f(int n) {
    if (n == M) {
    print();
    } else {
    for (int i = 1; i <= M; i++) {
    if (!has(n, i)) {
    list[n] = i;
    f(n + 1);
    }
    }
    }
    } private boolean has(int n, int i) {
    for (int k = 0; k < n; k++)
    if (list[k] == i)
    return true;
    return false;
    } private void print() {
    int a = list[0] * 100 + list[1] * 10 + list[2];
    int b = list[3] * 100 + list[4] * 10 + list[5];
    int c = list[6] * 100 + list[7] * 10 + list[8];
    if ((a + b) != c)
    return;
    System.out.println(num++ + ":" + a + "+" + b + "=" + c);
    }
    }
      

  7.   

    数组越界!输出的写成分行显示
    /**2013-8-28Demo.javaAdministrator
     * 
     */
    package com.lori_xj.test;/**
     * TODO
     * 
     * @author
     * @date2013-8-28
     */
    public class Demo {
     public static void main(String[] args){
            int[] arr = new int[9*8*7];
            int i , j , k , x = 0 ;
            for(i = 1 ; i < 10 ; i ++){
                for(j =1 ; j < 10 ; j ++){
                    if(j == i){
                        continue ;
                    }
                    for(k = 1; k < 10 ; k ++){
                        if(k == j||k==i){
                            continue ;
                        }
                        arr[x] = 100*i+10*j+k ;
                        x ++ ;
                    }
                }
            }
            for(int a = 0 ; a < arr.length ; a ++){
                for(int b = 0 ; b < arr.length ; b ++){
                    for(int c = 0 ; c <arr.length ; c ++){
                        if((arr[a]+arr[b])==arr[c]){
                         System.out.println(arr[a]+"+"+arr[b]+"="+arr[c]);
                        }
                     
                    }
                }
            }
        }
    }