PDA

View Full Version : [Java] Aiuto con programma "banale"


h3unter3h
24-11-2011, 17:17
Salve ragazzi. Ho iniziato da pochissimo a programmare in java e ho per le mani questo esercizietto che dovrebbe essere banalissimo ma che non riesco a risolvere. Qualcuno mi può dare una mano? Grazie.
Ecco il testo:

Scrivere un programma java che scriva per 100 volte una frase. Ogni frase deve essere numerata e il programma deve commettere otto differenti errori di stampa apparentemente casuali.


Ovviamente mi blocco agli errori di stampa. Non riesco proprio a capire come inserirli :muro:

Darecon
24-11-2011, 19:39
Salve ragazzi. Ho iniziato da pochissimo a programmare in java e ho per le mani questo esercizietto che dovrebbe essere banalissimo ma che non riesco a risolvere. Qualcuno mi può dare una mano? Grazie.
Ecco il testo:

Scrivere un programma java che scriva per 100 volte una frase. Ogni frase deve essere numerata e il programma deve commettere otto differenti errori di stampa apparentemente casuali.


Ovviamente mi blocco agli errori di stampa. Non riesco proprio a capire come inserirli :muro:
Io inizierei ad estrarre 8 numeri casuali da 0 a 99, non ripetuti, per determinare quale delle 100 righe abbia l'errore. Successivamente (ipotizzo che la frase da scrivere sia in una variabile String) usi il metodo toCharArray in modo da ottenere un array di char rappresentante la stringa stessa.
a questo punto prendi un indice a caso tra 0 e la lunghezza dell'array, estrai l'elemento e modifichi il valore con un char a caso e, se ti serve ancora una stringa per altre elaborazioni, usi il metodo valuesOf().
Detta così è uno schifo, ma a farla ci impieghi 30 secondi.. :)
Se hai bisogno di chiarimenti scrivi pure! :D

h3unter3h
24-11-2011, 19:46
credo di aver capito il tuo suggerimento. appena mi rimetto sul codice ci provo. intanto grazie per l'aiuto

Darecon
24-11-2011, 20:01
credo di aver capito il tuo suggerimento. appena mi rimetto sul codice ci provo. intanto grazie per l'aiuto

Questa è una prova (bruttissima) però va.. :)


import java.util.ArrayList;
import java.util.List;


public class Main {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String x="Ciao mamma come mi diverto!";
List<Integer> righe= new ArrayList<Integer>();
for (int i = 0; i < 8; i++) {
int rigAGenerataACaso=0;
if(!righe.contains((rigAGenerataACaso=randomNumber(0,99))))
righe.add(rigAGenerataACaso);
}
char[] charArray = x.toCharArray();
for(int i=0;i<100;i++){
char[] copia=charArray.clone();
if(righe.contains(i)){
int rand=randomNumber(0,charArray.length);
copia[rand]=(char)(charArray[rand]+1);
}
System.out.println(copia);
}
}
public static int randomNumber(int min, int max) {
return min + (int)(Math.random() * (max - min));
}

}


al posto del +1 vedi te come "generare l'errore"!! :)


deve commettere otto differenti errori

Questo non lo fa però, li genera, ma potenzialmente sono uguali, a te migliorare il mio codice e risolvere questo problemino!

Ciao!

sic2
24-11-2011, 23:15
ciao!

spero di riuscire a rispondere alla tua domanda.
bene quello che farei io è creare un array di dimensione 8 e tipo Error contenente le sottoclassi che trovi qui: http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Error.html
inoltre crei una variabile chiamata top di valore 0 che indica il primo elemento nell'array.

dunque ogni volta che vuoi stampare una errore prendi l'elemento all'indice TOP e incrementi top.

quando stampi una errore puoi usare: printstacktrace

h3unter3h
25-11-2011, 18:46
Allora dopo ore e ore di elaborazione credo di essere riuscito a concludere qualcosa, prendendo spunto dai vostri suggerimenti. Questo è quello che ho fatto, dalle prove sembra funzionare


/* Questo programma visualizza 100 volte la frase "Non devo spammare i miei amici"
* e inserisce in 8 frasi un errore casuale
*/
import java.io.*;
public class Punizione
{
public static void main (String[] args)
{
// Inizializzo la frase da visualizzare
String frase = "Non devo spammare i miei amici";
// Inizializzo il contatore
int contatore = 0;
// Creo un array che contenga tutte le 100 frasi
String[] Lista = new String[100];
for (;contatore<Lista.length;contatore++)
{
Lista[contatore] = frase;
}

int j=0;
int caso=0;
String[] FrasiErrate = new String[8]; //In questo array andranno 8 frasi già errate
while (j<8)
{
char fraseErrata[] = frase.toCharArray();
int errore = (int)(Math.random() * fraseErrata.length);
fraseErrata[errore] = (char)(Math.random());
FrasiErrate[j] = new String (fraseErrata);
j++;
}

// Sostituisco in 8 posizioni a caso le frasi errate create
j=0;
int[] estratti = new int[8];
while (j<8)
{
caso = 1 + (int)(Math.random() * 100);
Lista[caso] = FrasiErrate[j];
estratti[j] = caso;
j++;
}

for (int i=0;i<Lista.length;i++)
{
System.out.println (i+1 + "." + Lista[i]);
}
}
}


che ve ne pare?

Darecon
26-11-2011, 10:53
Secondo me (per una pura questione di stile) conviene che nel primo for l'inizializzazione della variabile vada nel ciclo, quindi: for (int contatore=0;contatore<Lista.length;contatore++), e nei 2 cicli seguenti secondo me è meglio utilizzare il for, in linea di massima la vedo così: se so quante volte deve essere eseguito il ciclo, metto il for, in modo che il numero di volte sia ben visibile, altrimenti se ci sono condizioni di uscita complesse utilizzo il while!

Per il resto, se funziona, va bene! :D

Non hai scongiurato però il pericolo che escano 2 errori uguali, e quindi 2 frasi con lo stesso errore: il testo richiedeva che tutte le frasi con errore fossero diverse!

h3unter3h
26-11-2011, 12:25
hai ragione.potrei inserire un controllo su ognuno degli 8 errori estratti, ma forse il programma diventerebbe illeggibile...