【问题标题】:How to compare sales from an array and get the highest and lowest selling如何比较数组中的销售额并获得最高和最低的销售额
【发布时间】:2013-04-26 19:17:41
【问题描述】:

是否有人拥有能够比较数组中的销售额或变量,并能够打印出最高和最低销售额的代码。我已经尝试了几件事,但无法完全正常工作。

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

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;
        }
    }
}

【问题讨论】:

  • 您应该先尝试编译代码,然后再将其发布到此处。例如,在您的 for 循环中,iint 而不是对象。您不能在其上调用方法。按照编译器错误进行编译,然后您就可以开始处理逻辑错误。
  • 扫描并找出最高和最低值?
  • 但是您必须将最低和最高设置为某个值才能开始。通常将最高设置为负数,将最低设置为非常大的数。 (或者只是从第零个元素初始化两者。)
  • (但最高和最低值需要在循环之外(您只需要一个)。)

标签: java arrays compare


【解决方案1】:
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() 方法来返回销量。

【讨论】:

    【解决方案2】:

    要获得lowestSales 的设置,您需要将其初始化为更高的值,作为您寻找的真正最低值。这可能是Double.MAX_VALUE 或您之前找到的最高销售额(假设您修复了该错误)。当然你也应该初始化highestSale,也许是0.0。

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

    【讨论】:

    • 我只是在代码中的 5 个选项中寻找最高和最低的销售额
    • 我的建议将准确地找到最高和最低销售额作为价值。如果您需要它来自哪个专辑的信息,请使用 Grammin 的建议。
    【解决方案3】:

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

    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&lt;String&gt;) albums[0]).compareTo(albums[1]); 所尝试的吗?好吧,那条线没有意义。此外,您将专辑数组的索引与专辑的销售价值混合在一起。好吧,看看我的解决方案并研究它。以后,请只发布至少没有编译错误的代码。

    【讨论】:

      【解决方案4】:

      如果您可以更改它,您可以在专辑类中实现 Comparable 接口并简单地调用Arrays.sort(albums),它会缩短您的数组,您可以将数组的第一个和最后一个元素分别用作最低和最高销量的专辑。

      代码会是这样的

      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 的答案是可以的。

      【讨论】:

      • 我想我可以更改专辑类,因为我写了它,因为它基本上有我的 setter 和 getter。
      猜你喜欢
      • 2021-10-12
      • 1970-01-01
      • 2022-11-21
      • 2018-01-08
      • 1970-01-01
      • 1970-01-01
      • 2022-10-04
      • 1970-01-01
      • 2020-07-13
      相关资源
      最近更新 更多