2012-01-29 68 views
0

我正在制作一个程序,让用户放入他们的Class ID,然后输入销售的盒子数量。我试图让计算机最终告诉我十个班中哪些班最多。但我似乎无法弄清楚如何让程序告诉我十个中哪一个盒子最多。 我想我需要找到数组中最大的数字,如果这甚至可能?java中数组最大的数字?

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

可能重复:HTTP://stackoverflow.com/questions/1484347/java-max-min-value-in-an-array – tenorsax 2012-01-29 00:28:12

回答

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

做出更好的回答解释将是一件好事。该算法首先假定第一个索引具有最多的盒子(存储为ind),然后开始检查更多盒子的下列索引,如果它找到一个包含更多盒子的索引,则假定新索引具有met盒子,ind是改为这个索引,当最后一个索引被选中时,ind会包含最多的索引。 – 2012-01-29 09:37:11

0

这里这个简单的算法。

/** 
* 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