webForumDet fria alternativet

nybörjare i javascript

51 svar · 3 252 visningar · startad av Vinnaren

VinnarenMedlem sedan sep. 2005858 inlägg
#1

Hej

Jag har gjort en funktion som ska räkna ut medelvärdet av 4 tal, men den räknar inte "rätt" x(

tal1 = prompt("Tal 1");
tal2 = prompt("Tal 2");
tal3 = prompt("Tal 3");
tal4 = prompt("Tal 4");

medeltalet = ((tal1+tal2+tal3+tal4)/4);

document.write("Medeltalet är " + medeltalet);

Hur löser jag detta? :q

headbugMedlem sedan sep. 2006858 inlägg
#2

Vad får du för resultat när du provar?

VinnarenMedlem sedan sep. 2005858 inlägg
#3

när jag matar in 1 2 3 4 så får jag svaret "Medeltalet är 308.5" Ganska högt :S

@ndersMedlem sedan juni 200026 914 inlägg
#4

1234/4 är nog 308.5.

När du lägger ihop strängar blir det konkatenering av det hela, så du måste se till att hantera de inmatade talen som just tal.

medeltalet = ((parseInt(tal1) + parseInt(tal2) + parseInt(tal3) + parseInt(tal4))/4);

Man skall dock vara lite försiktig, annars kraschar saker och ting.

VinnarenMedlem sedan sep. 2005858 inlägg
#5

tack, det fungerade.

@ndersMedlem sedan juni 200026 914 inlägg
#6

Ska du använda decimaltal får du använda parseFloat(), och du måste kontrollera att det verkligen är tal som matats in, annars kommer det bli fel.

VinnarenMedlem sedan sep. 2005858 inlägg
#7

okej. men om jag ska bygga om den och anv arrayer istället.

har provat med

var myArray = new Array()

inmatat = prompt("Ange talen ");
myArray=\[inmatat\]

for (i=0;i\<myArray.length;i++)
{
summa=summa+myArray\[x\];
}

medeltal = summa / myArray.length;


document.write(medeltal);

så att man kan ange flera än de 4, men jag får inte denna att fungera efter att jag skickar in talen. Det händer inget :S

aasahMedlem sedan mars 20033 451 inlägg
#8

För det första: Omslut alltid kod med kod-taggar: [ code]....[ /code] (utan mellanslag) så blir det mycket lättare att läsa!

Sedan, du får fortfarande in strängar via din prompt, och måste alltså fortfarande konvertera dem till heltal (eller flyttal) enligt @nders råd ovan.

Ett annat fel är på sista raden här:

var myArray = new Array()
inmatat = prompt("Ange talen ");
myArray=[inmatat]

För att lägga till ett tal sist i arrayen skriv:

myArray.push(intval(inmatat));
VinnarenMedlem sedan sep. 2005858 inlägg
#9

hmm, okey.


	var myArray = new Array()

	parseInt(inmatat) = prompt("Ange talen ");
	myArray.push(intval(inmatat));	
	
	for (i=0;i<myArray.length;i++)
	{
	summa=parseInt(summa)+parseInt(myArray[x]);
	}
	
	medeltal = parseInt(summa) / myArray.length;	
	
	document.write(medeltal);

har nu denna kod, men fungerar inte. Kan man inte göra så att man anger alla talen i samma dialogruta? eller måste man göra flera dialogrutor?

aasahMedlem sedan mars 20033 451 inlägg
#10

Om du vill använda dig av dialogrutor just, så:
Du måste antingen ha lika många dialogrutor som tal alternativt på något sätt behandla strängen du får tillbaka innan du försöker konvertera den. Om du tex skriver in "3, 7, 9, 0" i din dialogruta är det en sträng med exakt det utseendet du får tillbaka. Komplett med kommatecken och mellanslag. Självklart kan en sådan sträng inte göras om till ett tal! Hur skulle det gå till?

Vill du ha det i en ruta får du bestämma vad du skriver in mellan talen, och sedan gå igenom din sträng tecken för tecken och leta upp avdelarna. Mellan två avdelare, före den första och efter den sista, har du dina tal. Kan också göras med reguljära uttryck, och ev finns det fler sätt?

VinnarenMedlem sedan sep. 2005858 inlägg
#11

hmm, vet int om jag är på rätt spår...

function funktionen() 
{		

	var myArray = new Array()

	antaltal = prompt("Ange antalet tal som ska matas in:");

	
	for (i=0;i<antaltal;i++)
	{
	inmatat = prompt("Ange ett tal:");
	myArray.push(intval(inmatat));
	}
}

Jag vill alltså ta en Array, innehållandes heltal, som inparameter. Sen så ska funktionen beräkna medelvärdet av talen som finns i den medsända Arrayen.

Vet inte hur jag löser det på enklaste sättet? :q

aasahMedlem sedan mars 20033 451 inlägg
#12

Du är på rätt spår ja. :) Men alla tilldelningar i JS avslutas med semikolon, vilket du glömt på funktionens första rad.

VinnarenMedlem sedan sep. 2005858 inlägg
#13

ok, har nu följande kod:


	var myArray = new Array();
	var summa;
	var medeltal;
	var antaltal;
	var inmatat;

	antaltal = prompt("Ange antalet tal som ska matas in:");
	
	for (i=0; i < antaltal; ++i)
	{
		inmatat = prompt("Ange ett tal:");
		myArray.push(inmatat);
	}
	
	parseInt(summa) = add(myArray);
	
	medeltal = summa / myArray.length;

men det skrivs inget ut, jag skulle tro att felet ligger på add(myArray), finns väll något man skriver för att lägga ihop alla tal i en array?

headbugMedlem sedan sep. 2006858 inlägg
#14

Men en om en add-funktion fanns så skulle den (internt) behöva loopa igenom alla värden igen, så jag föreslår att du redan i for-loopen räknar upp summan i en variabel summan_så_här_långt

itpastornMedlem sedan feb. 2007280 inlägg
#15

Array objektet har ingen add metod

Syntaxen vore array.add(), inte add(array). Det senare liknar mer syntaxen i PHP.

Men inte ens JS 1.7 har den funktionen:
http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array

Effektivast möjliga kodning vore - som sagt - att addera redan under tiden talen läses in.

Lars Gunther

VinnarenMedlem sedan sep. 2005858 inlägg
#16

hmm, oki. jag bygger nog om den lite, ska inte anv någon frågeruta, utan det ska vara förbestämda tal som den ska räkna.

jag vill på min html sida skicka in en array med tex 7 siffror.
koden jag har hittills på html sidan:

<script language="JavaScript" type="text/javascript">
	<!--
		var testar = new Array(6);
	
		testar(10, 14, 16, 17, 24, 11, 22);
	//-->
</script>

sen i js filen har jag följande:

function testar(tal1, tal2, tal3, tal4, tal5, tal6, tal7) 
{		
	var summa:
	var medeltal;
	
	
	for (i=0; i < testar.lenght; ++i)
	{
		summa += myArray[i]
	}
	
	medeltal = summa / testar.lenght;	
	
	document.write(medeltal);
}

vet inte om jag har gjort rätt, det fungerar iaf inte :r

spangoMedlem sedan juni 20006 147 inlägg
#17

Döp aldrig en funktion till samma sak som en global variabel (och använd inte globala variabler). Här är en version som borde funkar fina fisken:

var numbers = []; // tom array för alla inmatade siffror
var sum = 0; // summan av alla siffror
var input; // det senaste användaren skrev in
do {
    // läs in tal
    input = prompt("Skriv in ett tal (tryck på Avbryt för att sluta)", "");
    if (input != null){
        // användaren tryckte inte på avbryt
        var n = parseInt(input);
        sum += n;
        numbers.push(n);
    }
} while(input != null);
// användaren har tryckt på avbryt, räkna ut medelvärde för de inmatade talen
var average = sum / numbers.length;

Detta kraschar såklart om man trycker på avbryt redan första varvet (pga division med noll), men jag lämnar det som en övning till läsaren att ta hand om detta.

VinnarenMedlem sedan sep. 2005858 inlägg
#18

hmm, tack för tipset, men jag hade tänkt att göra om så ingen ruta kommer fram, utan talen som ska beräknas är redan inskrivna på html sidan. vet inte redigt hur man löser det på bästa och enklaste sättet??

The_HulkMedlem sedan juni 20031 937 inlägg
#19

du har valt att din funktion "testar" ska ta emot 7 parametrar, tal1, tal2, ..., tal7.

dessa använder du inte sen i din funktion utan du försöker använda funktionsnamnet som en array.

Det hade varit smidigare om du skickade in en array till din funktion istället för att säga att det ska vara 7 tal så tar du bara emot en parameter i din funktion.

Döp antingen om arrayn på din HTML-sidan eller byta namn på funktionen. skicka sedan in arrayn på HTML-sidan till funktionen.

ger dig ingen kod till att börja med utan det är bättre om du kan lösa det själv. Vet inte om min förklaring är självklar.

VinnarenMedlem sedan sep. 2005858 inlägg
#20

tack, nu börjar jag förstå :P :i

har nu följande kod:

<script language="JavaScript" type="text/javascript">
	<!--
		var myArray = new Array(6);
	
		myArray[10, 14, 16, 17, 24, 11, 22];
		
		testar(myArray);
	//-->
</script>

sen i js filen:

function testar(myArray) 
{		
	var summa;
	var medeltal;
	
	
	for (i=0; i < myArray.lenght; ++i)
	{
		summa += myArray[i];
	}
	
	medeltal = summa / myArray.lenght;	
	
	document.write(medeltal);
}

nu kommer det fram "NaN". är väll något med uträkningen? vet inte redigt hur man löser det :q

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