2009-08-22 9 views
1

Question: Où productArray viennent de ceux-ci dans:Comment faire pour trier les tableaux par produit [compteur] .getProductTitle()?

for (Product product : productArray) 

&

Arrays.sort(productArray, new ProductComparator()); 

Question: Qu'est-ce que je fais mal? Comment puis-je faire ce genre?

Post connexes d'hier


        EDIT 

::: EDIT ::: Ok j'ai pris vos conseils ici à propos

Product productArray[] = new Product[ARRAY_LENGTH] 

Maintenant, il est cassé ici

/tmp/jc_22339/InventoryPart2.java:99: cannot find symbol 
symbol : variable productArray 
location: class InventoryPart2 
    for (Product product : productArray) { 
          ^
/tmp/jc_22339/InventoryPart2.java:101: cannot find symbol 
symbol : variable productArray 
location: class InventoryPart2 
     inventoryValue += productArray.calcInventoryValue(); 
         ^

Et si je le fais comme

for (Product product : productArray[]) { 

Je reçois

/tmp/jc_23524/InventoryPart2.java:69: '.class' expected 
    for (Product product : productArray[]) { 
             ^

Je suis de retour coincé.


Begin programme

::: code mis à jour :::

/** 
This program stores a collection of a product and its variables in a java array 
It will sort and display the information with a total 
*/ 

// Import statements go here 
import java.util.Scanner;// Import and use scanner 
import java.util.Arrays; 


public class InventoryPart2 { 

    /** 
    * @param args the command line arguments 
    */ 

    public static void main(String[] args) {// begin main 

     // Define your array of product objects and index here 
     final int ARRAY_LENGTH = 5;// declare constant 
     final int version = 2;// declare int version number 

     // Create instance of Scanner class 
     Scanner input = new Scanner(System.in);// new Scanner for CL input 
     // Set counter to loop x times to populate your array of product objects 
     int counter = 0; 

     // Initialize your product array with the number of objects to populate it with 
     Product productArray[] = new Product[ARRAY_LENGTH];// create array Product of class Product 

     // Welcome message 
     System.out.printf("\n%s%d\n" , 
     "Welcome to the Productentory Program v.", version); 

     // Construct default values for Product 
     productArray[0] = new Product("EThe Invisible Man", 0, 8.50); 
     productArray[1] = new Product("DThe Matrix", 1, 17.99); 
     productArray[2] = new Product("CSe7en", 7, 12.99); 
     productArray[3] = new Product("BOceans Eleven", 11, 9.99); 
     productArray[4] = new Product("AHitch Hikers Guide to the Galaxy", 42, 18.69); 

     /*// Loop as many times as your counter variable 
     { 

      // Instantiate a product object 

      // Prompt for product name and call the set method on your product object 

      // Prompt for item number and call the set method on your product object 

      // Prompt for units in stock and call the set method on your product object 

      // Prompt for unit price and call the set method on your product object 

      // store product object in array element 

      //Destroy product object reference 
      product = null; 

      // Flush the buffer 
      input.nextLine(); 

     }*/ 

     // Sort product array by product name using Comparator implementation class 
     sortProductArray(); 

     // Print sorted array 
     for (Product product : productArray[]) { 
     if (counter == 0) 
      System.out.printf("\n%s\n", "Sorted Inventory of DVD movies"); 
     System.out.printf("\n\n%s%d\n%s%s\n%s%d\n%s%,.2f\n%s%,.2f\n", 
     "Item Number:  ",counter, 
     "DVD Title:  ",productArray[counter].getProductTitle(), 
     "Copies in stock: ",productArray[counter].getUnitsInStock(), 
     "Price each disk: $",productArray[counter].getUnitPrice(), 
     "Value of disks: $",productArray[counter].calcInventoryValue());//End print 
     counter++; 
     if (counter == productArray.length)// on last counter of loop print total 
      System.out.printf("\n%s%,.2f\n\n\n", 
      "Collection Value: $",calcTotalInventoryValue()); 
     } 

     // Calculate total Inventory value 

    } 


// method to calculate the total Inventory value 
private static double calcTotalInventoryValue() 
{ 

    double inventoryValue = 0; 

    // Iterate array of product objects and calculate total value of entire Inventory 
    for (Product product : productArray) { 
     // accumulate inventory value from each product object in array 
     inventoryValue += productArray.calcInventoryValue(); 
    } 

    return totalInventoryValue; 

} // end method calcInventoryValue 


// method to sort product array 
private static void sortProductArray() 
{ 

    Arrays.sort(productArray, new ProductComparator()); 



} // end method calcInventoryValue 


} 
+0

Quelle est la question à nouveau? .... Je regarde fixement cette question pendant 2 minutes et je ne sais pas ce que c'est tout sur – OscarRyz

+0

Ouais ... moi aussi. Que demandez-vous ici? –

+0

Juste une supposition sauvage, mais demandez-vous comment faire une boucle sur les éléments de la matrice de produits et comment les trier? Il semble qu'un code de base est donné et que les blancs doivent être remplis. – Tchami

Répondre

1

Soit vous devez avoir un éventail de produits en tant que membre de la classe InventoryPart2 OU passé dans la méthode sortProductArray. Vous devrez changer cette méthode pour renvoyer une référence au tableau trié si vous choisissez ce dernier.

Votre ensemble de produits est dans la méthode principale statique et ne fait pas partie de l'objet, vous avez donc un problème. Je vous recommande de faire quelque chose comme ceci:

public class Inventory 
{ 
    private static final int DEFAULT_INVENTORY_SIZE = 5; 
    private Product [] products; 
    private int numProducts; 

    public Inventory() 
    { 
     this(DEFAULT_INVENTORY_SIZE); 
    } 

    public Inventory(int size) 
    { 
     products = new Product[size]; 
     numProducts = 0; 
    } 

    public void addProduct(Product p) 
    { 
     products[numProducts++] = p; 

    } 

    public void sort() 
    { 
     // sort the array here 
    } 

    public String toString() 
    { 
     StringBuilder builder = new StringBuilder(1024); 

     // Create a string representation of you inventory here 

     return builder.toString(); 
    } 
} 

La programmation orientée objet est sur l'encapsulation et la dissimulation d'information. Écrivez la classe de manière à ce que les clients n'aient pas à se soucier de savoir si vous utilisez un tableau ou quelque chose d'autre pour conserver des produits. Vous faites abstraction de l'idée d'inventaire ici.

MISE À JOUR:

Ceci est votre code, mais en mieux et le fonctionnement:

import java.util.Scanner; 
import java.util.Arrays; 

public class InventoryPart2 
{ 
    public static void main(String[] args) 
    { 
     final int ARRAY_LENGTH = 5; 
     final int version = 2; 

     int counter = 0; 

     Product productArray[] = new Product[ARRAY_LENGTH]; 

     System.out.printf("\n%s%d\n", 
     "Welcome to the Productentory Program v.", version); 

     productArray[0] = new Product("EThe Invisible Man", 0, 8.50); 
     productArray[1] = new Product("DThe Matrix", 1, 17.99); 
     productArray[2] = new Product("CSe7en", 7, 12.99); 
     productArray[3] = new Product("BOceans Eleven", 11, 9.99); 
     productArray[4] = new Product("AHitch Hikers Guide to the Galaxy", 42, 18.69); 

     productArray = sortProductArray(productArray); 

     // Print sorted array 
     for (Product product : productArray) 
     { 
     if (counter == 0) 
     { 
      System.out.printf("\n%s\n", "Sorted Inventory of DVD movies"); 
     } 
     System.out.printf("\n\n%s%d\n%s%s\n%s%d\n%s%.2f\n%s%.2f\n", 
     "Item Number:  ", counter, 
     "DVD Title:  ", product.getProductTitle(), 
     "Copies in stock: ", product.getUnitsInStock(), 
     "Price each disk: $", product.getUnitPrice(), 
     "Value of disks: $", product.calcInventoryValue()); 
     counter++; 
     } 
     System.out.printf("\n%s%,.2f\n\n\n", 
     "Collection Value: $", calcTotalInventoryValue(productArray)); 
    } 

    private static double calcTotalInventoryValue(Product[] productArray) 
    { 
     double inventoryValue = 0; 

     for (Product product : productArray) 
     { 
     inventoryValue += product.calcInventoryValue(); 
     } 

     return inventoryValue; 

    } 

    private static Product[] sortProductArray(Product[] productArray) 
    { 
     Arrays.sort(productArray, new ProductComparator()); 

     return productArray; 
    } 
} 

J'ai enlevé ces commentaires que vous ajoutez partout. Ils sont juste encombrés; Je vous recommande de ne plus le faire. Mieux vaut rendre votre code plus lisible et auto-documenté en utilisant de meilleurs noms de variables et de méthodes.

Ce n'est toujours pas la façon dont je vous recommande de l'écrire, mais cela fonctionne. Vous êtes plus susceptible de voir pourquoi cela fonctionne si je ne le modifie pas trop.

MISE À JOUR 2:

Juste au cas où vous êtes intéressé, voici comment je pourrais écrire:

import java.util.Scanner; 
import java.util.Arrays; 
import java.text.NumberFormat; 

public class Inventory 
{ 
    private static final int DEFAULT_LENGTH = 5; 
    private static final int VERSION = 2; 

    private Product[] products; 
    private int numProducts; 

    public static void main(String[] args) 
    { 
     Inventory inventory = new Inventory(5); 

     inventory.addProduct(new Product("EThe Invisible Man", 0, 8.50)); 
     inventory.addProduct(new Product("DThe Matrix", 1, 17.99)); 
     inventory.addProduct(new Product("CSe7en", 7, 12.99)); 
     inventory.addProduct(new Product("BOceans Eleven", 11, 9.99)); 
     inventory.addProduct(new Product("AHitch Hikers Guide to the Galaxy", 42, 18.69)); 

     System.out.println(inventory); 
     System.out.println("total value: " + NumberFormat.getCurrencyInstance().format(inventory.getTotalValue())); 
    } 

    public Inventory() 
    { 
     this(DEFAULT_LENGTH); 
    } 

    public Inventory(int size) 
    { 
     products = new Product[size]; 

     this.numProducts = 0; 
    } 

    public void addProduct(Product p) 
    { 
     products[numProducts++] = p; 
    } 

    public double getTotalValue() 
    { 
     double inventoryValue = 0.0; 

     for (Product product : products) 
     { 
     inventoryValue += product.calcInventoryValue(); 
     } 

     return inventoryValue; 
    } 

    public String toString() 
    { 
     StringBuilder builder = new StringBuilder(1024); 
     String newline = System.getProperty("line.separator"); 

     if (products.length > 0) 
     { 
     Arrays.sort(products, new ProductComparator()); 
     for (Product product : products) 
     { 
      builder.append(product).append(newline); 
     } 
     } 

     return builder.toString(); 
    } 
} 
+0

Votre code m'a fait mal à la tête. Merci pour ce que je suis sûr d'une merveilleuse explication. Je pense que je dois sortir des barres de singe et jouer dans le bac à sable un certain temps. – gooddadmike

+0

Merci encore. Je vais le regarder et je vais comparer au mien. Je suppose que ce que je dis est, merci pour votre aide et je promets d'apprendre. Je pense que mon professeur veut que nous nous concentrions sur l'apprentissage du code avant d'apprendre à ne pas coder si vous savez ce que je veux dire. Mais c'est juste de l'école pour toi! J'aime mieux ton code plus propre. – gooddadmike

+1

@lazfish: la première réponse de duffymo suit le raisonnement suivant: Java est supposé être un OOP pur, donc tous les algorithmes devraient être encapsulés dans des classes (votre solution originale est procédurale). Le problème est de créer un inventaire. Un inventaire a une collection de produits distincts et un nombre de produits distincts. Un produit peut être ajouté à un inventaire. Son code en découle, la collection étant un tableau de 'Product' et le nombre de produits stockés dans' numProducts'. Votre instructeur couvrira probablement cela bientôt, y compris les significations techniques de "pure OOP", "procédural", "est un" et "a un". – outis

3

Ce

Product Product[] = new Product[ARRAY_LENGTH]; 

devrait être le suivant:

Product productArray[] = new Product[ARRAY_LENGTH]; 

- Modifier

Vous devrez également modifier les lignes pertinentes en vous référant à cette 'variable'.

Si je peux suggérer, si vous êtes confus par ceci, vous demandez à votre professeur/livre pour vous rafraîchir la mémoire sur des «variables».

Et ne vous inquiétez pas si vous ne l'obtenez pas: continuez à demander jusqu'à ce que vous le fassiez. Vous êtes à court d'argent si vous êtes assez intéressé pour apprendre. Alors, intéressez-vous, posez des questions, faites vos propres recherches et la vie sera bonne.

+0

Merci pour l'encouragement-ness. Ma voix intérieure a crié à moi comme je l'ai lu (ma voix intérieure est une secousse) et a dit (Sack-Up Dummy !!) Mais sérieusement.Vous m'aidez beaucoup – gooddadmike

1

Je pense que "productArray" est censé faire référence au tableau de produits que vous avez créé. Ainsi, sur la ligne:

Product Product[] = new Product[ARRAY_LENGTH];// create array Product of class Product 

changement aussi:

Product[] productArray = new Product[ARRAY_LENGTH]; 
+0

Donc j'essaye ceci maintenant et je dois changer chaque appel à Product [counter] .getBlahBlah pour dire productArray [counter] .getBlahBlah Droit? – gooddadmike

+0

Oui, c'est correct. –

0

Ne pensez pas à vous-même que tout le monde a commencé ici à être en mesure de repérer les erreurs de syntaxe dans quelques secondes. Nous ne sommes pas nés de cette façon, nous savons juste ce qu'il faut chercher parce que nous avons fait exactement la même erreur des centaines de fois.

Donc, si vous êtes convaincu que vous voulez être programmeur même quand vous êtes à bout de nerfs, à cause de choses comme ça, vous avez pour. La dédicace et la passion sont bien plus importantes que le talent naturel.

Gardez la tête haute. Nous serons là la prochaine fois que vous serez coincé. :)

+0

Génial. Merci! – gooddadmike

Questions connexes