webForumDet fria alternativet

Inte en siffra stämmer

4 svar · 230 visningar · startad av farsta_online

farsta_onlineMedlem sedan jan. 2004106 inlägg
#1

från Hortons bok:

programmet tar reda på om det tecken som är lagrat i variabeln symbol är en versal mellan A och Z, en gemen mellan a & z eller ngt annat tecken

Följande kod

public class BokstavsKontroll {

	public static void main(String[] args)
	{
		char symbol = 'A';
		symbol = (char)(128.0*Math.random()); //Skapa ett slumptecken
		
		if (symbol >= 'A') //Ärdet A eller högre?
		{
			if (symbol <= 'Z')  //ja, är det Z eller högre?
			// Då är det en versal
			System.out.println("Du har versalen " + symbol + " = " + 128*Math.random());
		else
		    if (symbol >= 'a')
               if (symbol <= 'z')
               //då är det en gemen
               System.out.println("Du har gemen " + symbol + " = " + 128*Math.random());
          else
              System.out.println("Koden är högre än a och inte en bokstav ");
           else
		   System.out.println("Koden är lägre än a och inte en bokstav ");
		}
		else
		   System.out.println("Koden är lägre än A och inte en bokstav ");
            
               
               		}
	}

Nog för att den slumbar ut tal och och skriver om de är versaler eller inte,men som ni ser stämmer inte siffrorna med "min" ASCII-kod - iaf inte den ver som finns i boken...
tex har jag fått

Du har versalen A = 47.604539773413734

medan enligt tabellen skulle A = 065

Tack för ordet
/Peter

jabbalizerMedlem sedan jan. 2001229 inlägg
#2

symbol = (char)(128.0*Math.random()); //Skapa ett slumptecken

Här får du en slumpmässig char, va?

Men när du skriver ut sen:

("Du har versalen " + symbol + " = " + 128*Math.random());

slumpar du inte ett nytt värde då med 128*Math.random()???

spara undan 128*Math.random() i en int-variabel eller nåt
int taletISiffror = (int)(128*Math.random());

och gör sen:
symbol = (char)taletISiffror;

och skriv slutligen ut :
("Du har versalen " + symbol + " = " + taletISiffror);

i stället för

("Du har versalen " + symbol + " = " + 128*Math.random());

Jag är ingen expert, men detta borde väl funka?

jabbalizerMedlem sedan jan. 2001229 inlägg
#3

Hoppas bara att (char)talet == (char)((int)talet)

alltså att man inte försämrar precisionen genom att först casta till int, och sen casta till char.... Man kan kanske anta att char precis som int klipper bort decimalerna... och då är det inget problem.. men om char t.ex avrundar uppåt eller till närmsta heltal kan det bli problem.

För att va på den säkra sidan kan man ju casta talet till en double eller float i stället för int... då kan du ju dessutom skriva ut med alla decimalerna...

spangoMedlem sedan juni 20008 205 inlägg
#4

char och int bör trunkerar på samma vis, dvs klipper bort decimalerna. Ingen fara på taket där.

farsta_onlineMedlem sedan jan. 2004106 inlägg
#5

Tack för svaret!

jabbalizer skrev:

spara undan 128*Math.random() i en int-variabel eller nåt
int taletISiffror = (int)(128*Math.random());
och gör sen:
symbol = (char)taletISiffror;
och skriv slutligen ut :
("Du har versalen " + symbol + " = " + taletISiffror);
Jag är ingen expert, men detta borde väl funka?

137 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)