Newsgroup: it.comp.java
Titolo: Aiuto con questo esercizio

/* dato numeri casuali interi da 1 a 10 contenuti in un array di 100
posizioni ,
visualizzare mediante istogramma (usando desgli *)
il numero totale dei numeri usciti, 
es
1: ********
2:***************
.
10:***********
*/
public class Esercizio1
{
	public static void main(String[] F4nt4si4)
	{
	final int cost=100;
		int i=0;
		int casuali[]= new int[cost];//1 
 
 
		while (i<cost)
		{	casuali[i]=(int) (1+Math.random()*10); //2
 
			i++;
		}
 
 
		 i=1; 
		String conter[]= new String[11]; //3
		while (i<11)          
		{	conter[i]=""; 
		i++;
	        }
		boolean sentinella=true;
 
		int m=0;
 
		while ( m<cost)
		{
		i=1;	
 
			do{
				if (i==casuali[m])
				{conter[i]+="*";  //4
				sentinella=false;} 
 
				i++;
			}while(i<11 && sentinella );
			m++;
 
		}
 
		i=1;
		for (;i<11; i++)
			System.out.print(i+":  "+conter[i]+"\n"); // 5
 
 
 
 
 
 
 
 
 
		}
	}
 
		Commenti:
1//alloco 100 posizioni
2//inizializzo ogni indice con una volore
casuale che va da 1 a 10
3//alloco un array di tipo stringa lo inizializzo e poi faccio
corrispondere ogni inidice(da 1 a 10)
con il conteggo degli asterischi dei valori casuali dell'array 
casuali.
4//praticamente se all'indice i 
corrisponde il valore della 
posizione m (array casuali) concateno un asterisco all'array conter con
indice i
5// dovrebbe stampare per ogni indice 
i corrispettivi * memorizzati in precendeza, ma non mi funziona 	
 
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 [CUT]
Sinceramente ho avuto un po' di problemi a leggere il tuo programma. Io l'ho
riscritto cosě:
public class Esercizio{
 public static void main(String[] args){
  int[] numeri = new int[100];
  String[] risultato = new String[10];
  for(int i=0; i<10; i++) risultato[i] = "";
  for(int i=0; i<100; i++){
   numeri[i] = (int)(Math.random() * 10) +1;
   risultato[numeri[i]-1] += "*";
  }
  for(int i=0; i<10; i++){
   System.out.println("[" + (i+1) + "]: " + risultato[i]);
  }
 }
}
Te lo commento. Crea un array di interi di 100 posizioni e un arrai di
stringhe di 10 posizioni che subito dopo inizializza a "" (stringa vuota).
In seguito con un ciclo for (equivalente di un while ma piů pratico) crea un
numero random 1<=n<=10, lo mette nell'array numeri e poi aggiunge un
asterisco nel corrispondente valore dell'array risultato. Questo dimostra
che la costruzione dell'array con i numeri random non č essenziale ma se la
traccia lo richiede č essenziale :)
Attenzione: gli indici dell'array risultato vanno da 0 a 9 mentre i valori
di cui parliamo da 1 a 10 da qui la forma dell'istruzione
risultato[numeri[i]-1] += "*".
Ora cerco di capire il tuo programma ma non ho molta voglia :)
Ciao.
Giuseppe

Helo, Gimazzo!
You wrote  on Wed, 18 Dec 2002 11:34:20 GMT:
 G> Sinceramente ho avuto un po' di problemi a leggere il tuo programma.
[cut
 G> Ora cerco di capire il tuo programma ma non ho molta voglia :)
Il problema era la selezione if, praticamente mi faceva uscire dal ciclo
adesso funziona:
public class Esercizio1
	{
  public static void main(String[] args)
	  {
    final int cost=100;
    int i=0;
    int casuali[]= new int[cost];
    while (i<cost) {
      casuali[i]=(int) (1+Math.random()*10);
      i++;
    }
    i=1;
    String conter[]= new String[11];
    while (i<11) {
      conter[i]="";
      i++;
    }
    boolean sentinella=true;
    int m=0;
    while ( m<cost) {
i=1;
    while (i!=casuali[m]) {
        i++;
      }
      conter[i]+="*";
      m++;
     }
    i=1;
    for (; i<11; i++)
    System.out.print(i+": "+conter[i]+"\n");
  }
}
Non ho capito una cosa , potresti spiegarmelo per favore?
Praticamente per farlo funzionare ho cambiato questo pezzo di codice
 while ( m<cost) {
 i=1;
      do {
        if (i==casuali[m]) {
        conter[i]+="*";
        sentinella=false;
      }
      i++;
      }while(i<11 && sentinella );
      m++;
     }
Secondo il mio ragionamento se la condizione if risulta vera assegno un
asterisco all'aray di indice i e con sentinella false non continuo il ciclo
interno (sarebbe inutile incrementare i dato che in quel momento corrisponde
a un solo valore dato da casuali[m]
ma a quanto pare mi fa saltare anche il ciclo esterno
come mai??

 come mai??
Cercando di snellire un po' il codice, perchè non vai ad incrementare
direttamente conter a partire da casuali[m] ?
casuali[m] è un numero compreso da 1 e 10 estremi inclusi. conter invece è
un vettore di 10 elementi. in conter[0] metti un asterisco ogni volta che
esce un 1. in conter[1] metti un asterisco ogni volta che esce un 2 ecc ecc.
Generalizzando metti un asterisco in conter[n - 1] ogni volta che esce il
numero n. per cui conter[casuali[m] - 1] += "*" e così fai variare solo m da
0 a 99.
Ti trovi?
Giuseppe