webForumDet fria alternativet

Slumpa ett tal och spara det i en array...

Java

6 svar · 902 visningar · startad av mikael_a

Medlem sedan mars 2000475 inlägg
Frågan#1

Hej,

Jag har en class som jag har döpt till Fragor, denna klass slumpar ut olika frågor som ställs till användaren... Hur går jag för att kontrollera om det slumpade talet redan har visats?

tex:
det slumpade talet = 2 (fråga 2 visas)
det slumpade talet = 5 (fråga 5 visas)
det slumpade talet = 2 (en ny slumpning genom föres inget visas)

jag har försökt att spara det slumpade talet i en array, och när man har slumpat fram tex 4 kollar om man hittar det i arrayen om inte skriv ut frågan, annars slumpa igen...

men jag får inte ihop det...

kod:


public class Fragor
{
	private int slumpatTal, sokt;
	private boolean hittad = false;

	public Fragor() {}

public void write10Poäng()
	{
		int [] tal;
		tal = new int[20];

		slumpatTal = (int)(Math.random()*10)+1;

		int index = 0;
	   	tal[index] = slumpatTal;

	/*   	sokt = slumpatTal;

			   if (tal[index] == sokt)
		       hittad = true;

			if(hittad)
		          System.out.println("Talet finns i fältet");
		        else
	           System.out.println("Talet finns ej");
*/

		if (slumpatTal == 1)
		{
		System.out.println("Fråga 1");
		}

		else if (slumpatTal == 2)
		{
		System.out.println("Fråga 2");
		}

osv...

micke

Medlem sedan aug. 20021 752 inlägg
#2

Så här kanske man kan göra (inte testat)

public class Fragor
{
	private int slumpatTal;
	int[] tal = new int[10];

	public Fragor()
	{
		//Sätt alla tal till 0 i arrayen
		for(int i=0;i<10;i++)
			tal[i]=0;
	}

	public void write10Poäng()
	{
		//Loopa tills du hittar ett tal som inte redan är använt.
		do
		{
			slumpatTal = (int)(Math.random()*10)+1;
			/*
			if(tal[slumpTal-1]==0)
				System.out.println("Talet finns ej");
			else
				System.out.println("Talet finns i fältet");				
			*/
		}while(tal[slumpTal-1]!=0);
		//Sätt talet som du har hittat till använt i arrayen
		tal[slumpTal-1]=1;
		if(slumpatTal == 1)
		{
			System.out.println("Fråga 1");
		}
		else if(slumpatTal == 2)
		{
			System.out.println("Fråga 2");
		}
	}
}

Ett problem med koden är att om du har använt alla tal redan så loopar den för alltid.

/Viktor

Medlem sedan mars 2000475 inlägg
#3

ok, tack skall testa...

Medlem sedan mars 2000475 inlägg
#4

ett till problem uppstår...


if (slumpatTal == 1)
		{
		System.out.println("Fråga 1");

		System.out.println("Hur ser symbolen för handikapparkering ut i Sverige?");
		System.out.println();
		System.out.println("A - En man med kryckor");
		System.out.println("B - En man med rulator");
		System.out.println("C - En man i rullstol");
		System.out.println("D - en man med käpp");
		System.out.println();
		System.out.print("Skriv in svar : ");
		svar = SavitchIn.readLine();
		svar = svar.toLowerCase();

			if (svar.compareTo("c") ==0)
			{
			System.out.println("rätt");
			}

			else
			{
			System.out.println("fel");
			}

		}

om användaren svarar rätt (C) så vill jag skicka honom till nivå 2... där det sedan slumpas mellan nya frågor... är en boolean bäst här?

tex:

om svar = C return true;

om inte return false;

om nivå 2 = true gå vidare annars inte...

hmm hur hade man bäst löst detta... det jag försöker göra är ett trivial persuit spel där användaren går vidare till 10 olika nivåer...

jag har hittils 200 frågor i varje nivå...

Medlem sedan mars 2000475 inlägg
#5

det fungerar. fast det är som du skriver finns det inga fler tal att slumpa så fastnar den i loopen... hmm måste gå att fixa.

Medlem sedan dec. 19995 874 inlägg
#6

det är dumt att hårdkoda in frågorna. Exempelvis kan du lägga det i en databas eller en textfil. Det blir mycket renare kod också. Textfilen kan exempelvis se ut såhär:

Fråga|Svar1|Svar2|2
Fråga|Svar1|Svar2|Svar3|Svar4|1
Fråga|Svar1|Svar2|Svar3|2

Sedan splittar du på |, och efter det skriver du ut frågan, och sedan alla svarsalternativ.
Den sista, anger vilket svar som är rätt svarsalternativ.

Då slipper du 200 if-satser och blaj :)

Medlem sedan mars 2000475 inlägg
#7

det är klart... det låter bättre. Men jag har inte testat att läsa ifrån en text fil vill fu ge mig något kod exempel?

256 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)