webForumDet fria alternativet

Pekning?

Java

5 svar · 378 visningar · startad av Memo

Medlem sedan dec. 20035 inlägg
Frågan#1

behöver hjälp igen. Letat i böcker och på nätet efter nån funktion som puttar tillbaka programmet från metoden (testaTal) till föregående metod (läsTal) . som det är nu så svslutar jag programmet om 0 skrivs in.
Har även förstått att jag kan slå ihop metoderna läsTal och läsTal2, men jag lyckas inte knäcka det.

Finns det nån vänlig själ som kan klara ut detta för mig vore det jätte snällt. Annars blir det en lång natt :l

[1]import javax.swing.JOptionPane;
public class Terra
{
String sIndata, iMod;
char operator;
float summa, iTal2, iTal1;

public Terra()
{

}

[/1][b]
public void läsTal(String text)
{
 	sIndata = JOptionPane.showInputDialog(text);
                iTal1 = Float.parseFloat(sIndata);
}

public void testaTal()
{
	if (iTal1 == 0)
                JOptionPane.showMessageDialog(null, "Du angav siffra 0\nBehöver du verkligen använda miniräknare för detta?!");
                System.exit(0);
}[/b][1]

public void läsTal2(String text)
{
    	 sIndata = JOptionPane.showInputDialog(text);
  	 iTal2 = Float.parseFloat(sIndata);
}

public void läsModul(String text)
{
  	 iMod = JOptionPane.showInputDialog(text);
  	 operator = iMod.charAt(0);

}

public void beräkna()
{
	 switch (operator)
	{

	case '+':
	summa=iTal1+iTal2;
	break;

	case '-':
	summa=iTal1-iTal2;
	break;

	case '*':
	summa=iTal1*iTal2;
	break;

	case '/':
	summa=iTal1/iTal2;
	break;

	case '%':
	summa=iTal1%iTal2;
	break;
  	}
}

public void visa()
{
	JOptionPane.showMessageDialog(null, iTal1 + "" + operator + "" + iTal2 + " = " + summa);
}

public static void main(String [] arg)
{
Terra test = new Terra();
test.läsTal("Ange ett valfritt tal:");
test.testaTal();
 test.läsTal2("Ange ett andra valfritt tal:");
 test.läsModul("Ange vilken operator ni vill använda: \n+ - / * %");
test.beräkna();
test.visa();
System.exit(0);

	 }

}
[/1]
Medlem sedan juni 20008 205 inlägg
#2

Re: Pekning?

Memo skrev:

behöver hjälp igen. Letat i böcker och på nätet efter nån funktion som puttar tillbaka programmet från metoden (testaTal) till föregående metod (läsTal) . som det är nu så svslutar jag programmet om 0 skrivs in.

Nej, programmet avslutas när System.exit anropas, vilket den gör i testaTal - om du bara ger fan i att anropa System.exit tills du verkligen vill avsluta går allt bra :)

Medlem sedan dec. 20035 inlägg
#3

haha, jo...så långt e jag med eftersom jag skrivit det själv.
Det är temporärt bara. Självklart så skall system.exit bort OM jag hittar en lösning.
Men det bästa vore ju om användaren fick ytterligare en chans att knappa in ett tal, istället för att starta om programmet eller få ut en helt onödig uträkning (0*32.7=32.7)
:p

Men jag misstänker att det inte finns något lätt sätt att göra detta, eftersom jag inte fått något svar?

Medlem sedan nov. 20022 355 inlägg
#4

Gör en iteration (while, for, etc)

Medlem sedan aug. 20021 752 inlägg
#5

Det som du behöver titta mer på i din java bok är hur funktioner används och fungerar, argument, retur värden osv.

Här är ett exempel på hur man kan lösa ditt problem och lite annat genom att använda retrur typer på funktionerna.

public float läsTal(String text)
{
	sIndata = JOptionPane.showInputDialog(text);
	return(Float.parseFloat(sIndata));
}

public boolean testaTal(float tal)
{
	if (tal==0)
	{
		JOptionPane.showMessageDialog(null, "Du angav siffra 0\nBehöver du verkligen använda miniräknare för detta?!");
		return(false);
	}
	else
	{
		return(true);
	}
}

public static void main(String [] arg)
{
	Terra test = new Terra();
	do
	{
		iTal1=test.läsTal("Ange ett valfritt tal:");
	}while(!test.testaTal(iTal1));
	do
	{
		iTal2=test.läsTal("Ange ett andra valfritt tal:");
	}while(!test.testTal(iTal2));
	test.läsModul("Ange vilken operator ni vill använda: \n+ - / * %");
	test.beräkna();
	test.visa();
	System.exit(0);
}

Du kan se att jag använder samma funktion för att läsa in talen, och samma funktion för att testa om talet är 0 eller inte. Detta är möjligt eftersom jag i funktionen inte bestämmer vilken variabel som ska få värdet utan det bestäms vid anroppet, "**iTal2=**test.läsTal()". När jag sedan testar talet så skickar jag med det tal som jag vill testa som ett argument till funktionen, "test.testTal(iTal1)". Genom att använda argumenten och retur värdena så kan man göra funktionerna mer generälla och flexibla.

/Viktor

Medlem sedan dec. 20035 inlägg
#6

Helt klart en bättre variant, jag bockar och bugar.
Men som sagt jag är i inlärningsfasen, och det verkar alltid finnas olika alternativ hur programmet skall byggas. Det är därför jag inte fattar exempel som jag hittar på nätet och i böcker. Svårt det här....svårt svårt.

tack alla som svarat. Ni har hjälpt ofantligt mkt. :bire

264 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)