需求是 一个整数数组中有10个数,求加和最大的两个数分别是多少?
我写的代码算到是最大的那个数与自己相加的结果,不是最大的两个数相加,而且求不出那两个数是多少
代码如下:
public class add
{
public static void main(String args[])
{
int a[]= new int [] {84,40,16,3,10,49,28,76,94,100};
int n;
int x=a[0];
int i;
int y=a[0];
int k = x+y; for(n=0;n<=9;n++)
{
for(i=0;i<=9;i++)
if(k<(a[n]+a[i]))
k=a[n]+a[i];
}
System.out.println(k);

解决方案 »

  1.   

    在if条件里加一个&&n!=i。
    或者,排序,然后把第一个数和第二个数相加
      

  2.   

    public class Main { public static void main(String[] args) {

    int a [] = {84,40,16,3,10,49,28,76,94,100};
    getTwoLargestNum(a); }

    /**
     * @param a 传入数组
     */
    public static void getTwoLargestNum(int []a){

    int largestNum = 0;//最大数标志
    int subNum = 0;//第二大数标志

    if (a[0] > a[1]) {//初始化最大的两个数
    largestNum = a[0];
    subNum = a[1];
    }else {
    largestNum = a[1];
    subNum = a[0];
    }

    for (int i = 2; i < a.length; i++) {//从第3个数开始循环,不断比较,然后刷新最大两个数的值
    if (a[i] > largestNum) {
    subNum = largestNum;//最大的数地位下滑,变第二大
    largestNum = a[i];
    }else if (a[i] > subNum) {
    subNum = a[i];
    }
    }

    System.out.println("最大数:"+largestNum);
    System.out.println("第二大数:"+subNum);

    }}
      

  3.   

    public static void main(String[] args){
    int[] array = new int[]{
    4, 2, 6, 5, 9, 2, 6, 8, 1, 6, 9, 11, 33
    };
    // 最大数
    Integer a = null;
    // 次大数
    Integer b = null;

    if(array.length < 2){
    System.out.println("数组太小,无法计算");
    return;
    }

    for(int i : array){
    if(a == null){
    a = i;
    continue;
    }
    if(b == null){
    b = i;
    continue;
    }

    if(b > a){
    Integer tmp = a;
    a = b;
    b = tmp;
    }

    if(i > a){
    // 找到最大值
    b = a;
    a = i;
    }else if(i > b){
    // 找到次大值
    b = i;
    }
    }

    System.out.println("最大值 = " + a);
    System.out.println("次大值 = " + b);
    System.out.println(a.intValue() + b.intValue());
    }
      

  4.   

    有没有一种方法是设这两个数为X和Y,然后循环X+Y等于数组中的任意两个数相加?
      

  5.   


    public static void main(String[] args) {
    int[] arr=new int[]{3,4,2,9,6};
    sort(arr);
    }

    /**
     * 排序
     * @param arr
     */
    public static void sort(int[] arr){
    StringBuilder sb=new StringBuilder();
    for(int ele:arr){
    sb.append(ele).append(",");
    }
    System.out.println("数组为:"+sb.deleteCharAt(sb.length()-1));
    int len=arr.length;
    Arrays.sort(arr);
    System.out.println(arr[len-1]+"和"+arr[len-2]+"相加的和最大,为:"+(arr[len-1]+arr[len-2]));

    }
      

  6.   


    Integer[] datas = new Integer[]{84,40,16,3,10,49,28,76,94,100};
            if (datas != null && datas.length > 1) {
                List<Integer> results = Arrays.asList(datas);
                Collections.sort(results);
                System.out.println("maxNum1:" + results.get(results.size() -1));
                System.out.println("maxNum2:" + results.get(results.size() -2));
            }控制台输出
    maxNum1:100
    maxNum2:94