2009-12-13 3 views
0
public class Histogram 
{ 
private int lo_; 
private int hi_; 
private int[] frequency_; 

public Histogram(int lo, int hi) 
{ 
    lo_ = lo; 
    hi_ = hi; 
    int range = hi_-lo_+1; 
    frequency_ = new int[range]; 
    for(int i =0; i <range; range++) 
     frequency_[i] = 0; 
} 

public void ReadValue() 
{ 
    Scanner in = new Scanner(System.in); 
    int value= in.nextInt(); 
    while(value != -1) 
    { 
     if(value >= lo_ && value <= hi_)    
     { 
      frequency_[value - lo_]++; 
      value = in.nextInt(); 
     } 
    } 
} 

private String starPrinter(int value) 
{ 
    String star = "*"; 
    for(int i = 0; i <= value ;i++) 
    { 
     star +="*"; 
    } 
    return star; 
} 

public String Printer() 
{ 
    String print = new String(); 
    int range = hi_-lo_+1; 
    int i = 0; 
    while(i<range) 
    { 
     print += (lo_+i)+" : "+ starPrinter(i)+ "\n"; 
     i++; 
    } 
    return print; 
} 


public int query(int value) 
{ 
    if (value >= lo_ && value <= hi_) 
    { 
     value -= lo_; 
     return starPrinter(value).length(); 
    } 
    else 
     return -1; 
} 

public static void main(String[] args) 
{ 
    Histogram test = new Histogram(3, 9); 
    test.ReadValue(); 
} 

} 

J'ai besoin d'aide sur cet histogramme.Aide à la fréquence d'histogramme Java

Le constructeur est généré par faible nombre et le nombre élevé (donc si je mets 3 à 9: ce sont tous les chiffres qu'il attend, tout le reste est ignoré)

la méthode readValue gardera en boucle jusqu'à ce que l'utilisateur types -1. Signification que si je tape 3, 4, 6, 4, 6, 9 , 5, 9, 4, 10 -1 ... alors il va stocker tout cela dans le frequency[]. Comment est-ce que je fais en sorte que chaque valeur puisse être suivie dans le frequency[]?

3 se produit une fois, 4 se produit trois fois, 7 ne se produit jamais, 9 se produit deux fois

Printer() me fera un diagramme Histogramme qui ressemble à ceci (En utilisant les chiffres entrés avant ...)

3: * 
4: *** 
5: * 
6: ** 
7: 
8: 
9: ** 

Comment puis-je utiliser les numéros de la fréquence a imprimer le nombre de étoiles les numéros se sont produits?

la méthode de requête demandera à l'utilisateur de ce nombre qu'ils veulent et leur dit combien de fois il se produit:

types 3 "3 se produit 2 fois"

types 10 « 10 est hors de portée. "

J'ai la plupart du code, j'ai juste besoin d'aide pour implémenter certaines parties.

+0

Cela ressemble à une question de do-my-homework – jitter

Répondre

1

Vous l'avez presque fait, il y a quelques erreurs stupides. Votre méthode starPrinter imprime deux étoiles de plus qu'elle ne le devrait. Vous devez écrire ceci:

private String starPrinter(int value) 
{ 
    String star = ""; 
    for(int i = 0; i < value ;i++) 
    { 
     star +="*"; 
    } 
    return star; 
} 

et vous passez le mauvais paramètre à starPrinter. Il devrait être ceci:

print += (lo_+i)+" : "+ starPrinter(frequency_[i])+ "\n"; 

Enfin, vous devez vous rappeler de l'appeler. Il suffit d'ajouter une ligne supplémentaire à la fin de la ligne principale:

public static void main(String[] args) 
{ 
    Histogram test = new Histogram(3, 9); 
    test.ReadValue(); 
    System.out.println(test.Printer()); // Add this line. 
} 

Maintenant, ça marche! (Tant que vous ne tapez pas de numéro hors de portée.)