我正在创建一个程序,用户输入他们的类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.");
}
}
答案 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