java数组中的最大数字?

时间:2012-01-29 00:24:46

标签: java arrays

我正在创建一个程序,用户输入他们的类ID,然后输入已售出的Box数量。我试图让计算机最终告诉我十个班级中哪一个最多。但我似乎无法弄清楚如何让程序告诉我十个中哪一个最多的盒子。 如果可能的话,我想我需要找到阵列中最大的数字?

import java.util.*;

public class Boxs {

int ID, boxs;

public static void main(String[] args) {
    int p = 0;
    Scanner scan = new Scanner(System.in);

    Boxs[] bx = new Boxs[10];

    for (int i = 0; i <= 9; i++) {
        bx[i] = new Boxs();
        System.out.print("Enter Class ID: ");
        bx[i].ID = scan.nextInt();
        System.out.print("Enter boxs sold: ");
        bx[i].boxs = scan.nextInt();
    }

    int temp = 0;
    int temp2 = 0;
    for (int j = 0; j < 9; j++) {
        for (int h = 0; h < 9; h++) {
            if (bx[h].boxs > bx[h+1].boxs) {
                temp2 = bx[p].boxs;
                bx[h].boxs = bx[p+1].boxs;
                bx[p+1].boxs = temp;
                temp = bx[h].ID;

                bx[h].ID = bx[p+1].ID;
                bx[h+1].ID = temp2;

                System.out.println(bx[h].boxs);
                System.out.println(bx[h+1].boxs);
            }
        }
    }

    System.out.println("The Class ID with the most boxes is: " + bx[0].ID +  " and sold " +  bx[0].boxs + " boxs.");
}
}

2 个答案:

答案 0 :(得分:1)

不确定我的问题是否正确(因为您的代码与您的陈述相冲突),但您可以使用以下方法找出销售数量最多的盒子:

int ind = 0;
for (int j = 1; j < bx.length; j++){
    if(bx[j].boxs>bx[ind].boxs)
    {
        ind=j;
    }               
}     

System.out.println("The Class ID with the most boxes is: "
                + bx[ind].ID +  " and sold " +  bx[ind].boxs + " boxs.");

答案 1 :(得分:0)

这是heapshort algorythm。

/**  
 * sortiert ein Array mit heapsort
 * @param a das array
 */
private static void heapSort(int[] a) {
        generateMaxHeap(a);

        //hier wird sortiert
        for(int i = a.length -1; i > 0; i--) {
                vertausche(a, i, 0);
                versenke(a, 0, i);
        }
}

/**
 * Erstellt einen MaxHeap Baum im Array 
 * @param a das array
 */
private static void generateMaxHeap(int[] a) {
        //starte von der Mitte rückwärts.
        for(int i = (a.length / 2) - 1; i >= 0 ; i--) {
                versenke(a, i, a.length);
        }
}

/**
 * versenkt ein element im baum
 * @param a Das Array
 * @param i Das zu versenkende Element
 * @param n Die letzte Stelle im Baum die beachtet werden soll
 */
private static void versenke(int[] a, int i, int n) {
        while(i <= (n / 2) - 1) {
                int kindIndex = ((i+1) * 2) - 1; // berechnet den Index des linken kind

                //bestimme ob ein rechtes Kind existiert
                if(kindIndex + 1 <= n -1) {
                        //rechtes kind existiert
                        if(a[kindIndex] < a[kindIndex+1]) {
                                kindIndex++; // wenn rechtes kind größer ist nimm das 
                        }
                }

                //teste ob element sinken muss 
                if(a[i] < a[kindIndex]) {
                        vertausche(a,i,kindIndex); //element versenken
                        i = kindIndex; // wiederhole den vorgang mit der neuen position
                } else break;
        }
}

/**
 * Vertauscht die arraypositionen von i und kindIndex
 * @param a Das Array in dem getauscht wird
 * @param i der erste index
 * @param kindIndex der 2. index
 */
private static void vertausche(int[] a, int i, int kindIndex) {
        int z = a[i];
        a[i] = a[kindIndex];
        a[kindIndex] = z;
}

然后你可以打印短路阵列的第一个元素。 来源:Wiki