Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 24-11-2011, 17:17   #1
h3unter3h
Senior Member
 
Iscritto dal: Aug 2007
Messaggi: 364
[Java] Aiuto con programma "banale"

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
h3unter3h è offline   Rispondi citando il messaggio o parte di esso
Old 24-11-2011, 19:39   #2
Darecon
Senior Member
 
Iscritto dal: Sep 2003
Città: Tradate
Messaggi: 396
Quote:
Originariamente inviato da h3unter3h Guarda i messaggi
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
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!
Darecon è offline   Rispondi citando il messaggio o parte di esso
Old 24-11-2011, 19:46   #3
h3unter3h
Senior Member
 
Iscritto dal: Aug 2007
Messaggi: 364
credo di aver capito il tuo suggerimento. appena mi rimetto sul codice ci provo. intanto grazie per l'aiuto
h3unter3h è offline   Rispondi citando il messaggio o parte di esso
Old 24-11-2011, 20:01   #4
Darecon
Senior Member
 
Iscritto dal: Sep 2003
Città: Tradate
Messaggi: 396
Quote:
Originariamente inviato da h3unter3h Guarda i messaggi
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..

Codice:
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"!!

Quote:
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!
Darecon è offline   Rispondi citando il messaggio o parte di esso
Old 24-11-2011, 23:15   #5
sic2
Junior Member
 
Iscritto dal: Nov 2011
Messaggi: 13
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/...ang/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
sic2 è offline   Rispondi citando il messaggio o parte di esso
Old 25-11-2011, 18:46   #6
h3unter3h
Senior Member
 
Iscritto dal: Aug 2007
Messaggi: 364
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

Codice:
/* 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?
h3unter3h è offline   Rispondi citando il messaggio o parte di esso
Old 26-11-2011, 10:53   #7
Darecon
Senior Member
 
Iscritto dal: Sep 2003
Città: Tradate
Messaggi: 396
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!

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!
Darecon è offline   Rispondi citando il messaggio o parte di esso
Old 26-11-2011, 12:25   #8
h3unter3h
Senior Member
 
Iscritto dal: Aug 2007
Messaggi: 364
hai ragione.potrei inserire un controllo su ognuno degli 8 errori estratti, ma forse il programma diventerebbe illeggibile...
h3unter3h è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 08:44.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v