Newsgroup: it.comp.java
Titolo: Rappresentazione interi

Buona Pasqua a tutti, avrei 1 problema mi servirebbe rappresentare gli
interi 0<x<10 con uno 0 davanti, come posso fare?


public class Utility
{
	public static void main(String[] args)
	{
		for(int i=0;i<20;i++)
		{
			System.out.println(Utility.padInt(i));
		}
	}
 
	public static String padInt(int i)
	{
		return i<10 ? "0"+i : ""+i;
	}
}

}
Ops, sorry: piccolo errore, cosě stampa "00" che non č il risultato
voluto...
public class Utility
{
	public static void main(String[] args)
	{
		for(int i=0;i<20;i++)
		{
			System.out.println(Utility.padInt(i));
		}
	}
 
	public static String padInt(int i)
	{
		return i==0 ? "0" : i<10 ? "0"+i : ""+i;
	}
}
 

scusa forse non mi sono spiegato bene, non mi serve 1 stringa ma un intero,
es int a=01;

es int a=01;
Non ESISTE un int=01.

Non ESISTE un int=01.
Esatto.
Se il tuo problema è di sola formattazione usa la classe
java.text.DecimalFormat. Comodissima!

 }
[cut]
Scusate se mi infilo nel thread...
Potreste spiegarmi che differenza c'e' tra quel modo di fare il confronto e
questo?
public static String padInt(int i)
{
  if (i<10)
    return "0"+i;
  else
    return ""+i;
}
Grazie mille!
--
Huan

}
Credo sostanzialmente nessuno, anche se bisognerebbe fare dei test
sulla performance...

sulla performance...
public class TestPadInt
{
 
	public static void main(String[] args)
	{
		int cycles=10000000;
		java.util.Random rnd=new java.util.Random();
		long now=System.currentTimeMillis();
		for(int i=0;i<cycles;i++)
		{
			Utility.padInt(rnd.nextInt(20));
		}
		System.out.println(System.currentTimeMillis()-now);
		now=System.currentTimeMillis();
		for(int i=0;i<cycles;i++)
		{
			Utility.padInt2(rnd.nextInt(20));
		}
		System.out.println(System.currentTimeMillis()-now);
		now=System.currentTimeMillis();
		for(int i=0;i<cycles;i++)
		{
			Utility.padInt(rnd.nextInt(20));
		}
		System.out.println(System.currentTimeMillis()-now);
		now=System.currentTimeMillis();
		for(int i=0;i<cycles;i++)
		{
			Utility.padInt2(rnd.nextInt(20));
		}
		System.out.println(System.currentTimeMillis()-now);
	}
}
public class Utility
{
	public static void main(String[] args)
	{
		for(int i=0;i<20;i++)
		{
			System.out.println(Utility.padInt(i));
		}
	}
 
	public static String padInt(int i)
	{
		return i==0 ? "0" : i<10 ? "0"+i : ""+i;
	}
 
	public static String padInt2(int i)
	{
		if(i==0) return "0";
		if(i<10) return "0"+i;
		return ""+i;
	}
}
I risultati si discostano nell'ordine dello 0,2 per mille.

 ha scritto nel messaggio
news:7806av8b7ianv73v9...@4ax.com...

Direi che si tratta di uno scarto ben poco significativo, dopo tutto.


Sě. Potrebbe essere addirittura considerato "errore di misurazione".

 ha scritto nel messaggio
news:9hf7avcs7haa0tg7j...@4ax.com...

Disassemblando sembra che il punto interrogativo risparmi un istruzione.


Questo è possibilissimo. Però da ingegnere direi che in un programma "reale"
queste ottimizzazioni "da pignolo" (senza offesa !!!)  sono per vincoli di
tempo/complessità di sviluppo ignorate. Pertanto, se il benchmark di
Maurizio non rivela colli di bottiglia allucinanti, le due soluzioni sono
equivalenti.

equivalenti.
Concordo con la tua affermazione. Con due "distinguo":
1) il mio "benchmark" andrebbe verificato sia nella correttezza
formale dei test che nei risultati su varie macchine;
2) naturalmente tutto dipende da quante volte dobbiamo passare
sull'istruzione "incriminata": se si tratta "soltanto" di qualche
migliaio di volte, possiamo trascurare l'ottimizzazione.
Ad ogni modo tutta la faccenda del "benchmark", dello scostamento
percentuale, dell'errore di misura, va a mio avviso inteso come un
thread puramente accademico...

 ha scritto nel messaggio
news:33Yoa.56298$DT4.1...@twister1.libero.it...

Bah io non lo trovo così incomprensibile l'uso del punto interrogativo. Anzi
a volte da un colpo d'occhio più comodo se le istruzioni sono semplici. Dopo
tutto è solo questione di abitudine e se il linguaggio supporta un
istruzione più ottimizzata di un altra io la uso. Scommetto che anche tu non
usi i = i + 1 al posto di i++ vero?
Eppure per uno che non ha dimestichezza con i++ gli appare più semplice i =
i + 1; ovvio che tutti hanno dimestichezza con i++ perchè è semplice da
comprendere
. if-else e il punto interrogativo vanno certamente messi su di un altro
piano. if-else è certamente più leggibile nella maggioranza dei casi. (ma
non in tutti forse).
Alberto.