2013-04-26 142 views
0

是否有人有代碼能夠比較銷售或數組中的變量,並且能夠打印出最高和最低最低的銷售項目。我已經嘗試了幾件事,但無法完全實現它的功能。如何比較銷售數組並獲得最高和最低的銷售額

這裏是我的代碼,我最關心的東西是在底部:

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

回答

0
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

0

得到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

-1

如果你可以改變它並且只需調用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

0

這裏是一個完整的,工作版本:

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]);的那條命令?那麼這條線是沒有意義的。此外,您正在將相冊陣列的索引與相冊的銷售值進行混合。那麼,看看我的解決方案並研究它。將來,請僅發佈至少沒有編譯錯誤的代碼。