webForumDet fria alternativet

Pekning?

5 svar · 378 visningar · startad av Memo

MemoMedlem sedan dec. 20035 inlägg
#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]
spangoMedlem sedan juni 20006 147 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 :)

MemoMedlem 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?

Mc FettoMedlem sedan nov. 20021 920 inlägg
#4

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

ViktorMedlem sedan aug. 20021 710 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

MemoMedlem 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

Genererad på 372 ms · cache AV · v20260730165559-full.f96bc7eb