Jag behöver lite Java hjälp? [LÖST]

Här diskuteras programmering och utveckling
Användarvisningsbild
lennart
Inlägg: 70
Blev medlem: 20 okt 2006, 21:31
OS: Ubuntu
Utgåva: 18.04 Bionic Beaver LTS

Jag behöver lite Java hjälp? [LÖST]

Inlägg av lennart »

Hej jag är i akut behov av hjälp!
Skriver en miniräknare med tillhörande gui, har fastnat lite på logiken?
Jag har fastnat på räknedelen, alltså hur man räknar med n antal siffror!
Har hitills lyckats med att ta en sträng ifrån en textarea och delat upp den i en array med matematiska tecken (+ - * /) och en array med BigDecimal tal, sen när jag skall räkna ihop talen så blir det problem?
Håller på att få väldigt ont i huvudet av det här så jag skulle vara jättetacksam om någon kunde hjälpa mig.
Bifogar ett utdrag av koden.

Kod: Markera allt

public static String Calculate (String res) {
		Scanner  scanner = new Scanner (res);
		Scanner  scanner2 = new Scanner (res);
		int n = res.length();
		int LengthOfTokens = 0;
		
		scanner.useDelimiter("[0123456789]");
		scanner2.useDelimiter("[+-/*.]");
		
		/* Determines the math symbols and how many symbols */
		for (int i = 0; i < n; i++) {
			if (scanner.hasNext ()) {
				tokens[i] = scanner.next();
				LengthOfTokens = LengthOfTokens + tokens[i].length();	// get length of mathsymbols
			}
		}
		
		/* Determines the numbers to calculate */
		for (int i = 0; i < n; i++) {
			if (scanner2.hasNextBigDecimal()) {
				calc[i] = scanner2.nextBigDecimal();
			}
		}
		/* Det är denna loopen som inte funkar som det är tänkt, snälla hjälp mig, vill kunna plussa ihop n antal tal */
		for (int i = 0; i < LengthOfTokens; i++) {
			if (tokens[i].equals("+")) {
					result = (calc[i].add (calc[i+1])); // calc[i] är en BigDecimal
			}
		}
		res = result.toString();
		return res;
	}
Senast redigerad av 1 lennart, redigerad totalt 6 gånger.
Kör Ubuntu 9.10 aplha5, länk till min hårdvara http://www.komplett.se/k/ki.aspx?sku=32 ... roductTabs.
Zhaozhou
Inlägg: 183
Blev medlem: 03 jul 2007, 22:24
OS: Annat GNU/Linux
Kontakt:

SV: Jag behöver lite Java hjälp?

Inlägg av Zhaozhou »

Vad ger koden?
Det ser ut som att 1+2+3 kommer bli (1+2) + (2+3).

Kanske är det jag som är blind...
Användarvisningsbild
mcNisse
Inlägg: 5211
Blev medlem: 06 feb 2007, 20:51
OS: Debian
Utgåva: Vet inte/ingen utgåva passar

SV: Jag behöver lite Java hjälp?

Inlägg av mcNisse »

Du lägger inte ihop talen :) Du borde få svaret av den sista additionen.

Kod: Markera allt

result = 0; //Lite osäker om denna konstrukion är korrekt för en bigint. Hoppas att du greppar vad jag menar.
for (int i = 0; i < LengthOfTokens; i++) {
                        if (tokens[i].equals("+")) {
                                        result += (calc[i].add (calc[i+1])); // calc[i] är en BigDecimal
                        }
                }
 

Finns det någon bra anledning till att result, calc och tokens är medlemsvariabler?

Dina får loopar är konstiga. Du behöver inte loopa upp till antal tecken i strängen.

Kod: Markera allt

for (LengthOfTokens = 0; scanner.hasNext(); ++LengthOfTokens) {
     tokens[i] = scanner.next();
} 
int numberOfNumbers;
for (numberOfNumbers = 0; scanner2.hasNextBigDecimal(); ++numberOfNumber) {
    calc[numberOfNumbers] = scanner2.nextBigDecimal();
}
Tänk på att 2+2*6=14 :) Dvs att du måste beräkna multiplikation/division innan additon/subtraktion.

En sak till. Tänk på javas kodstandard, använd liten bokstav i början av variabelnamn och metodnamn.

Edit: Missade missen som Zhaozhou hittade. Min lösning implementerar den... :)
Senast redigerad av 1 mcNisse, redigerad totalt 6 gånger.
KDE 4.5 SC är ute i det fria!!! Tjoho

Stagnation is good for nobody - after all if you don't progress you end up with gnome
Användarvisningsbild
lennart
Inlägg: 70
Blev medlem: 20 okt 2006, 21:31
OS: Ubuntu
Utgåva: 18.04 Bionic Beaver LTS

SV: Jag behöver lite Java hjälp?

Inlägg av lennart »

Finns det någon bra anledning till att result, calc och tokens är medlemsvariabler?
Nej, lathet bara började skriva koden i en innre lyssnar klass och kom på att det ser trevligare ut att flyta koden till en egen metod, glömde flytta variablerna till metoden, men det är åtgärdat nu.
Vad ger koden?
Det ser ut som att 1+2+3 kommer bli (1+2) + (2+3).

Kanske är det jag som är blind...
Nej du är inte blind och det är just här problemet ligger, vill att det skall bli 1+2+3 = 6. Det är första gången jag använder BigDecimal så jag är lite ovan med hur man utför beräkningar t.ex result += (calc.add (calc[i+1])); ger komplileringsfel eftersom man inte kan göra +=. Tack för tipsen för övrigt skall försöka implementera dom i koden. Skulle bli tacksam ifall någon kunde lösa beräkningsproblemet åt mig.
Kör Ubuntu 9.10 aplha5, länk till min hårdvara http://www.komplett.se/k/ki.aspx?sku=32 ... roductTabs.
Zhaozhou
Inlägg: 183
Blev medlem: 03 jul 2007, 22:24
OS: Annat GNU/Linux
Kontakt:

SV: Jag behöver lite Java hjälp?

Inlägg av Zhaozhou »

lennart skrev:
Finns det någon bra anledning till att result, calc och tokens är medlemsvariabler?
Nej, lathet bara började skriva koden i en innre lyssnar klass och kom på att det ser trevligare ut att flyta koden till en egen metod, glömde flytta variablerna till metoden, men det är åtgärdat nu.
Vad ger koden?
Det ser ut som att 1+2+3 kommer bli (1+2) + (2+3).

Kanske är det jag som är blind...
Nej du är inte blind och det är just här problemet ligger, vill att det skall bli 1+2+3 = 6. Det är första gången jag använder BigDecimal så jag är lite ovan med hur man utför beräkningar t.ex result += (calc.add (calc[i+1])); ger komplileringsfel eftersom man inte kan göra +=. Tack för tipsen för övrigt skall försöka implementera dom i koden. Skulle bli tacksam ifall någon kunde lösa beräkningsproblemet åt mig.


En enkel fix (temporär(!)) skulle vara att byta ut "i++" mot "i = i+2".
Men som mcNisse säger finns det mer att ändra, vilket förbättrar koden en del.
Dessutom har jag aldrig i hela mitt liv använt Java, överhuvudtaget, men ".add()" verkar rätt logiskt.
Användarvisningsbild
svartberg
Inlägg: 140
Blev medlem: 27 mar 2007, 00:07
OS: Ubuntu
Utgåva: 12.04 Precise Pangolin LTS
Ort: Västervik / Trollhättan

SV: Jag behöver lite Java hjälp?

Inlägg av svartberg »

Jag vet inte om jag förstått det hela rätt vad du vill göra, men räcker inte detta?

Kod: Markera allt

/* Det är denna loopen som inte funkar som det är tänkt, snälla hjälp mig, vill kunna plussa ihop n antal tal */
		for (int i = 0; i < LengthOfTokens; i++) {
			if (tokens[i].equals("+")) {
                                 result += calc[i];
			}
		}

Användarvisningsbild
lennart
Inlägg: 70
Blev medlem: 20 okt 2006, 21:31
OS: Ubuntu
Utgåva: 18.04 Bionic Beaver LTS

SV: Jag behöver lite Java hjälp?

Inlägg av lennart »

ag vet inte om jag förstått det hela rätt vad du vill göra, men räcker inte detta?

Kodstycke:

/* Det är denna loopen som inte funkar som det är tänkt, snälla hjälp mig, vill kunna plussa ihop n antal tal */
for (int i = 0; i < LengthOfTokens; i++) {
if (tokens.equals("+")) {
                                result += calc;
}
}

Jo om den tilldelningen (result += calc;) hadde funkat så ser det ut som att det skulle kunna funka, men eftersom jag vill använda mig utav BigDecimal som är ett objekt och inte en datatyp som t.ex int så klagar kompilatorn på den tilldelningen? Vet ingen hur man skriver motsvarande sats fast för BigDecimal?
Kör Ubuntu 9.10 aplha5, länk till min hårdvara http://www.komplett.se/k/ki.aspx?sku=32 ... roductTabs.
Användarvisningsbild
mcNisse
Inlägg: 5211
Blev medlem: 06 feb 2007, 20:51
OS: Debian
Utgåva: Vet inte/ingen utgåva passar

SV: Jag behöver lite Java hjälp?

Inlägg av mcNisse »

Kod: Markera allt

result.add(calc[i]);
KDE 4.5 SC är ute i det fria!!! Tjoho

Stagnation is good for nobody - after all if you don't progress you end up with gnome
Användarvisningsbild
svartberg
Inlägg: 140
Blev medlem: 27 mar 2007, 00:07
OS: Ubuntu
Utgåva: 12.04 Precise Pangolin LTS
Ort: Västervik / Trollhättan

SV: Jag behöver lite Java hjälp?

Inlägg av svartberg »

Jaha nu så förstår jag bättre.

Jag vet en lösning fast kanske inte den finaste men tror den kan fungera i alla fall.

Kod: Markera allt

/* Det är denna loopen som inte funkar som det är tänkt, snälla hjälp mig, vill kunna plussa ihop n antal tal */
		
                int usedNumber = -2;    // Får inte vara ett positivt tal från början.
                for (int i = 0; i < LengthOfTokens; i++) {
			if (tokens[i].equals("+") && usedNumber != i) {   // Kolla att talet som redan använts inte används igen
                                 result += ( calc[i].add( calc[i+1] ) ) ;
			         usedNumber = i+1;             //  markera att talet inte ska användas igen
                        }
		}
Användarvisningsbild
lennart
Inlägg: 70
Blev medlem: 20 okt 2006, 21:31
OS: Ubuntu
Utgåva: 18.04 Bionic Beaver LTS

SV: Jag behöver lite Java hjälp?

Inlägg av lennart »

result.add(calc);

Naturligtvis.... ibland har man inte huvudet på skaft. Tack för all hjälp nu funkar det som det ska, tack för tipset med looparna de var mycket snyggare än mina lösningar.

Orkar inte testa sista kodstycket nu med tanke på att det har löst sig, men tack för hjälpen ivarjefall.
Kör Ubuntu 9.10 aplha5, länk till min hårdvara http://www.komplett.se/k/ki.aspx?sku=32 ... roductTabs.
Skriv svar

Återgå till "Programmering och webbdesign"