如何比较销售数组并获得最高和最低的销售额

问题描述:

是否有人有代码能够比较销售或数组中的变量,并且能够打印出最高和最低最低的销售项目。我已经尝试了几件事,但无法完全实现它的功能。如何比较销售数组并获得最高和最低的销售额

这里是我的代码,我最关心的东西是在底部:

package album; 

public class Certifier { 

    public static void main(String[] args) { 

Album zero = new Album(0, "Dark Side of the Moon", "Pink Floyd", 1973, 50000000); 

     System.out.println("The album information for ablum 0 is: " + zero.toString()); 

     Album one = new Album(1, "Superficial", "Heidi Montag", 2010, 658); 

     System.out.println("The album information for ablum 1 is: " + one.toString()); 

     Album two = new Album(2, "Fearless", "Taylor Swift", 2011, 3200000); 

     System.out.println("The album information for ablum 2 is: " + two.toString()); 

     Album three = new Album(3, "Made Up", "Sample Band", 2011, 1300000); 

     System.out.println("The album information for ablum 3 is: " + three.toString()); 

     Album four = new Album(4, "Concerto One Night", "Andrea Bocelli", 2011, 500008); 

     System.out.println("The album information for ablum 4 is: " + four.toString()); 

     Album[] albums = new Album[4]; 
      albums[0] = zero; 
      albums[1] = one; 
      albums[2] = two; 
      albums[3] = three; 
      albums[4] = four; 


      ((Comparable<String>) albums[0]).compareTo(albums[1]); 

     System.out.println("The highest selling album is"); 
     for (int i=0; i< Album[].length; i++) { 
      double highestSales; 
      if (i.getSales()<highestSales) 
       highestSales= i; 
      return highestSales; 

     } 

    System.out.println("The lowest selling album is"); 
     for (int i=0; i< Album[].length; i++) { 
      double lowestSales; 
      if (i.getSales()<lowestSales) 
       lowestSales= i.getSales(); 
      return i.getName + i.getArtist; 
     } 
    } 
} 
+1

你应该尝试让代码在发布之前进行编译。例如,在for循环中,“i”是一个“int”而不是一个对象。你不能调用它的方法。按照编译器的错误来编译它,然后你就可以开始编写逻辑错误了。 – 2013-04-26 19:29:25

+0

扫描并找到最高值和最低值? – 2013-04-26 22:55:38

+0

但是您必须将最低和最高值设置为某个值才能开始。通常将最高设置为负数,最低设置为非常大的数。 (或者只是从第零个元素初始化。) – 2013-04-26 22:56:38

Album highestSellingAlbum; 
double highestSales = 0; 

for (int i=0; i< albums.length; i++) 
{ 
    if (albums[i].getSales() > highestSales) 
    { 
    highestSales = albums[i].getSales(); 
    highestSellingAlbum = albums[i]; 
    } 
} 

highestSellingAlbum现在将包含销量最高的专辑,假设你的Album类有一个适当的getSales()方法返回销售额。

+0

这不适用于我 – 2013-05-04 03:50:33

得到lowestSales有史以来你需要用一个更高的值初始化它作为你寻找的最低价值。这可能是Double.MAX_VALUE或您以前找到的最高销售额(假设您修复该错误)。你当然也应该初始化highestSale,当然也许是0.0。

highestSale的修复方法是在您的循环中分配highestSales = i.getSales();

+0

我只是寻找最高而我在代码 – 2013-05-04 03:50:17

+0

中的5个选项中的最低销售额,我的建议会正好找到最高和最低的销售额。如果你需要它来自哪个专辑的信息,那么请使用Grammin的建议。 – luksch 2013-05-04 07:07:13

如果你可以改变它并且只需调用Arrays.sort(albums),你可以在Album类中实现可比接口,它将缩短你的数组,你可以分别使用数组的第一个元素和最后一个元素作为最低和最高销售专辑。


代码会出现一些这样的事

public class Album implements Comparable<Album>{ 
    /* 
     your existing code here 
    */ 
    public int compareTo(Album compareAlbum) { 
     int compareSales = ((Album) compareAlbum).getSales(); 
     return this.sales - compareSales 
    } 
} 



如果你不能改变相册类,然后Grammin的答案是确定的。

+0

我想我可以改写专辑类,因为它基本上有我的制作者和获取者。 – 2013-05-04 03:52:21

+0

然后你可以使用它应该工作的上面的代码 – 2013-05-04 11:38:01

这里是一个完整的,工作版本:

package album; 


public class Certifier { 

    public static void main(String[] args) { 

     Album zero = new Album(0, "Dark Side of the Moon", "Pink Floyd", 1973, 50000000); 
     System.out.println("The album information for ablum 0 is: " + zero.toString()); 

     Album one = new Album(1, "Superficial", "Heidi Montag", 2010, 658); 
     System.out.println("The album information for ablum 1 is: " + one.toString()); 

     Album two = new Album(2, "Fearless", "Taylor Swift", 2011, 3200000); 
     System.out.println("The album information for ablum 2 is: " + two.toString()); 

     Album three = new Album(3, "Made Up", "Sample Band", 2011, 1300000); 
     System.out.println("The album information for ablum 3 is: " + three.toString()); 

     Album four = new Album(4, "Concerto One Night", "Andrea Bocelli", 2011, 500008); 
     System.out.println("The album information for ablum 4 is: " + four.toString()); 

     Album[] albums = new Album[5]; //we have 5 albums! 
      albums[0] = zero; 
      albums[1] = one; 
      albums[2] = two; 
      albums[3] = three; 
      albums[4] = four; 

     Album highestSellingAlbum = zero; //must be initialized with any of the 5 
     Album lowestSellingAlbum = zero; //must be initialized with any of the 5 

     for (int i=0; i< albums.length; i++) { 

      if (albums[i].getSales() > highestSellingAlbum.getSales()){ 
       highestSellingAlbum = albums[i]; 
      } 
      if (albums[i].getSales() < lowestSellingAlbum.getSales()){ 
       lowestSellingAlbum = albums[i]; 
      } 
     } 
     System.out.println("The highest selling album is " + highestSellingAlbum); 
     System.out.println("The highest sales is " + highestSellingAlbum.getSales()); 

     System.out.println("The lowest selling album is " + lowestSellingAlbum); 
     System.out.println("The lowest sales is " + lowestSellingAlbum.getSales()); 

    } 

} 

有许多错误在你的发布版本,包括编译错误。你应该开始使用像eclipse这样的IDE来进行Java实验,因为这样的环境会在编程时向你显示错误。

给你的算法问题。关键是,你需要初始化你比较的变量。我想这就是你在你的代码中使用((Comparable<String>) albums[0]).compareTo(albums[1]);的那条命令?那么这条线是没有意义的。此外,您正在将相册阵列的索引与相册的销售值进行混合。那么,看看我的解决方案并研究它。将来,请仅发布至少没有编译错误的代码。