newbiefråga summan och pos och neg tal i en array

Permalänk
Medlem

newbiefråga summan och pos och neg tal i en array

jag är väldigt ny i detta och sitter fast i denna. Finns det någon som kan hjälpa? som det är nu får jag inte ens upp rutan att skriva in mina nummer.

<!--Läs in en array av 5 tal, skriv ut summan
av alla positiva och negativa tal för sig
Om du matar in 4, -56, 67,-32,89 så SKA
printen vara i följande format:

Your input nr was: 4
Your input nr was: -56
Your input nr was: 67
Your input nr was: -32
Your input nr was: 89

The sum of the positive nrs are: 160
The sum of the negative nrs are: -88-->

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <h1>pos and neg nr array</h1> <script> let numbers = [] let pos = [] let neg = [] for (let i = 1; i <= 4; i++) { let number = parseInt(prompt("Input nr")) numbers.push(number) document.write("Your input nr was: " + number + "<br>" + "<br>") while (number != 0) { number = parseInt(prompt("Input nr")) numbers.push(number) document.write("Your input nr was: " + number + "<br>" + "<br>") } numbers.forEach(function (number) { if (number<0) { neg.push(number) } else { pos.push(number) } numbers.forEach(number => { neg += numbers[i] pos += numbers[i] }) document.write("sum pos: "+pos + "<br>" + "<br>") document.write("sum neg: "+neg) } </script> </body> </html>

Permalänk
Medlem

Fel som det du får innebär i regel att du glömt stänga någon form av parentes eller tag, i ditt fall att en ) saknas, och att den därför ser hela resten av koden som något som är innuti detta, och att det åtminstone borde stängas innan slutet.

Efter genomläsning hittade jag denna raden:
numbers.forEach(function (number) {

Permalänk
Medlem

Om du har syntaxfel i ditt JS så kommer det inte att köra och du kommer inte att få upp din prompt eftersom JS inte kan köra.

I det här fallet så vill måste du balansera parenteserna i numbers.forEach genom att lägga till en stängande parentes. efter document.write("sum neg:"+neg) så att det blir:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>pos and neg nr array</h1>

<script>
let numbers = []
let pos = []
let neg = []

for (let i = 1; i <= 4; i++) {
let number = parseInt(prompt("Input nr"))
numbers.push(number)
document.write("Your input nr was: " + number + "<br>" + "<br>")

while (number != 0) {
number = parseInt(prompt("Input nr"))
numbers.push(number)
document.write("Your input nr was: " + number + "<br>" + "<br>")
}

numbers.forEach(function (number) {
if (number < 0) {
neg.push(number)
} else {
pos.push(number)
}
if (number === 9999) {
pos.pop(number)
document.write("You exited the program" + "<br>" + "<br>")
}
numbers.forEach(number => {
neg += numbers[i]
pos += numbers[i]
})
document.write("sum pos: " + pos + "<br>" + "<br>")
document.write("sum neg: " + neg)
})
}

</script>
</body>
</html>

edit:Sedan finns det lite andra saker som kommer att ställa till det för dig men det lär du märka nu när du får upp en prompt.

Permalänk
Medlem

newbie på javascript

jag krånglar nog till det förmycket och i denna kod kommer inte inputrutan upp efter jag tryckt in första fyran sådet går inte vidare att kunna trycka in flera nummer. snälla hjälp. och vet inte alls hur resten av koden fungerar eller ej. får upp i problems att ´)´ expected efter </html> taggen jag förstår inte varför

<!--Läs in ett tal, och så länge talet inte är 9999, så beräkna medelvärdet av de talen som läses in. Ta i akt, vad som händer om det första talet som läses in är 9999 Exempel: Input : 1 Your input nr was: 4 Input : 2 Your input nr was: 5 Input : 3 Your input nr was: 4 Input : 4 Your input nr was: 5 Input : 5 Your input nr was: 4 Input : 6 Your input nr was: 9999 The average of the supplied integers are : 4.5--> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <script> let numbers = 0 let result = 0 for (let i = 1; i <= 5; i++) { let number = parseInt(prompt("Input nr")) numbers.push(number) document.write("Your input nr was: " + number + "<br>" + "<br>") while (number != 0) { number = parseInt(prompt("Input nr")) numbers.push(number) document.write("Your input nr was: " + number + "<br>" + "<br>") } if (number === 9999) { document.write("Error"+"<br>"+"<br>") } numbers.forEach(number => { sum += numbers[i] avg = sum / 5 }) document.write(`The average of the supplied integers are: ${avg}<br><br>`) } </script> </body> </html>

Permalänk
Moderator

@linn_123
Använd gärna code-taggar för ökad läsbarhet. Jag uppdaterade ditt inlägg med sådana nu.

/Giplet, Moderator

Permalänk
Medlem

Stalltips är att du kör med en editor/IDE som granskar syntaxen åt dig så slipper du sitta och leta efter sådant.
Jag kör webstorm själv men gratisalternativ är t.ex. visual studio code (https://code.visualstudio.com/). Finns en uppsjö alternativ men i ditt fall så är det viktigaste att du får syntax highlighting så den markerar syntaxfel.

Permalänk
Medlem

tack ska kolla detta.

if (number === 9999) {
pos.pop(number)
document.write("You exited the program" + "<br>" + "<br>")

denna ska ju såklart inte vara här ftersom frågan inte frågar efter detta. helt fel av mig

Permalänk
Moderator

Några kommentarer:
Vad är tanken med din for-loop?
Har du räknat dina parenteser? Det måste finnas lika många ( och ) i din kod.
Får du något felmeddelande i consollen?

Permalänk
Medlem
Skrivet av giplet:

Några kommentarer:
Vad är tanken med din for-loop?
Har du räknat dina parenteser? Det måste finnas lika många ( och ) i din kod.
Får du något felmeddelande i consollen?

forloopen tänkte jag eftersom jag vet hur många tal som ska läsas in. men är kanske fel, somsagt hel ny. började kursen förra veckan.

nej inget felmeddelande i problems

Permalänk
Medlem

Du använder fel "fnuttar".

document.write(`
vs
document.write('

Gissar att du copy-pastat från etr Word-dokument.

Permalänk
Medlem
Skrivet av Electrix:

Du använder fel "fnuttar".

document.write(`
vs
document.write('

Gissar att du copy-pastat från etr Word-dokument.

nej inte copy från något worddokument. skrivit av under lektionen. vilket är på teams och helt distans och har säkert skrivit fel vila är det som är rätt och fel då?

Permalänk
Medlem
Skrivet av Electrix:

Du använder fel "fnuttar".

document.write(`
vs
document.write('

Gissar att du copy-pastat från etr Word-dokument.

Nah ` är ok att använda, det är för att kunna dumpa in variabler direkt i text via ${bladida}
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refer...

Tog en snabbtitt förövrigt, du vill nog ändra

let numbers = 0

till

let numbers = []

då number ska vara en array, den kommer nog smälla på numbers.push senare annars.

Du vill nog också ändra

numbers.forEach(number => { sum += numbers[i] avg = sum / 5 })

till

numbers.forEach(number => { sum += number avg = sum / 5 })

Då number i forEach är var nummer som du itererar igenom

Edit: whileloopen är också onödig, den ger dig en oändlig loop, då den kommer köra sålänge numbers inte är 0, vilket är aldrig. Körbar kod:

let numbers = [] let result = 0 let sum = 0; for (let i = 1; i <= 5; i++) { let number = parseInt(prompt("Input nr")) numbers.push(number) document.write("Your input nr was: " + number + "<br>" + "<br>") if (number === 9999) { document.write("Error"+"<br>"+"<br>") } numbers.forEach(number => { sum += number avg = sum / 5 }) document.write(`The average of the supplied integers are: ${avg}<br><br>`) }

Permalänk
Medlem
Skrivet av Electrix:

Du använder fel "fnuttar".

document.write(`
vs
document.write('

Gissar att du copy-pastat från etr Word-dokument.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refer...

Permalänk
Medlem
Skrivet av Trihxeem:

Stalltips är att du kör med en editor/IDE som granskar syntaxen åt dig så slipper du sitta och leta efter sådant.
Jag kör webstorm själv men gratisalternativ är t.ex. visual studio code (https://code.visualstudio.com/). Finns en uppsjö alternativ men i ditt fall så är det viktigaste att du får syntax highlighting så den markerar syntaxfel.

jag sitter i visual studios. hur menar du med highlightning?

Permalänk
Moderator
Skrivet av linn_123:

nej inget felmeddelande i problems

Detta stämmer helt enkelt inte. Du får ett felmeddelande. Tryck F12 i Chrome för att få upp devtools. Kolla i Console.

Permalänk
Medlem
Skrivet av Ostbullen:

Nah ` är ok att använda, det är för att kunna dumpa in variabler direkt i text via ${bladida}
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refer...

Tog en snabbtitt förövrigt, du vill nog ändra

let numbers = 0

till

let numbers = []

då number ska vara en array, den kommer nog smälla på numbers.push senare annars.

Du vill nog också ändra

numbers.forEach(number => { sum += numbers[i] avg = sum / 5 })

till

numbers.forEach(number => { sum += number avg = sum / 5 })

Då number i forEach är var nummer som du itererar igenom

Edit: whileloopen är också onödig, den ger dig en oändlig loop, då den kommer köra sålänge numbers inte är 0, vilket är aldrig. Körbar kod:

let numbers = [] let result = 0 let sum = 0; for (let i = 1; i <= 5; i++) { let number = parseInt(prompt("Input nr")) numbers.push(number) document.write("Your input nr was: " + number + "<br>" + "<br>") if (number === 9999) { document.write("Error"+"<br>"+"<br>") } numbers.forEach(number => { sum += number avg = sum / 5 }) document.write(`The average of the supplied integers are: ${avg}<br><br>`) }

Tack ändrat det men input rutan kommer fortfarande inte upp utan kan bara mata in 1 nummer sen försvinner den. den skriver heller inte ut på sian "your input was: 4"
jag vill ju att den ska komma tillbaka så jag kan göra mina exempel och sen att den ska sluta och beräkna medelvärdet

Permalänk
Medlem
Skrivet av giplet:

Detta stämmer helt enkelt inte. Du får ett felmeddelande. Tryck F12 i Chrome för att få upp devtools. Kolla i Console.

jag får bara upp 1 problems i concole problems och det är i en annan uppgift.

Permalänk
Moderator
Skrivet av linn_123:

jag får bara upp 1 problems i concole problems och det är i en annan uppgift.

Jag kör din kod i Chrome och får upp ett felmeddelande på numbers.push raden, vilket också påpekats som ett problem här innan.

Ledsen om jag är envis, men du klarar dig helt enkelt inte utan console om du vill kunna se vad som pågår.

Plocka bort din for-loop och fixa felet med push, sedan kan du lösa felen du får i console ett efter ett så är du nästan klar.

Jag kan dessutom tipsa om att ta bort inläsningen utanför while-loopen. Eftersom du vill avbryta på 9999 så kan du helt enkelt bara sätta number till något annat så kommer koden att gå in i loopen minst en gång.

Permalänk
Medlem
Skrivet av linn_123:

Tack ändrat det men input rutan kommer fortfarande inte upp utan kan bara mata in 1 nummer sen försvinner den. den skriver heller inte ut på sian "your input was: 4"
jag vill ju att den ska komma tillbaka så jag kan göra mina exempel och sen att den ska sluta och beräkna medelvärdet

Du vill nog ha en while-loop ist för for-loopen isf, så du tänkte nog rätt med att ha en whileloop tidigare. Du kan testa ändra

for (let i = 1; i <= 5; i++) {

till

let i = 0; while(i < 5){ i++;

(Ursäkta min spagettikod)

Permalänk
Medlem
Skrivet av Ostbullen:

Nah ` är ok att använda, det är för att kunna dumpa in variabler direkt i text via ${bladida}
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refer...

Tog en snabbtitt förövrigt, du vill nog ändra

let numbers = 0

till

let numbers = []

då number ska vara en array, den kommer nog smälla på numbers.push senare annars.

Du vill nog också ändra

numbers.forEach(number => { sum += numbers[i] avg = sum / 5 })

till

numbers.forEach(number => { sum += number avg = sum / 5 })

Då number i forEach är var nummer som du itererar igenom

Edit: whileloopen är också onödig, den ger dig en oändlig loop, då den kommer köra sålänge numbers inte är 0, vilket är aldrig. Körbar kod:

let numbers = [] let result = 0 let sum = 0; for (let i = 1; i <= 5; i++) { let number = parseInt(prompt("Input nr")) numbers.push(number) document.write("Your input nr was: " + number + "<br>" + "<br>") if (number === 9999) { document.write("Error"+"<br>"+"<br>") } numbers.forEach(number => { sum += number avg = sum / 5 }) document.write(`The average of the supplied integers are: ${avg}<br><br>`) }

TAck nu gick den att köra flera gånger. men svaret på avg är fel svaret enligt svaret ska bli 4.4 det blir nu 13.2

Permalänk
Medlem
Skrivet av linn_123:

TAck nu gick den att köra flera gånger. men svaret på avg är fel svaret enligt svaret ska bli 4.4 det blir nu 13.2

Det låter som ett matteproblem Tänk på att den stora while/for-loopen kommer att köras 5 ggr som den ser ut nu, och foreachloopen kommer att köras för var item du har i numbers.

D.v.s. första iterationen av stora loopen så kommer foreach att snurra 1 gång, andra iterationen kommer foreach att snurra 2 ggr, osv osv

Lycka till!

Permalänk
Medlem
Skrivet av Ostbullen:

Det låter som ett matteproblem Tänk på att den stora while/for-loopen kommer att köras 5 ggr som den ser ut nu, och foreachloopen kommer att köras för var item du har i numbers.

D.v.s. första iterationen av stora loopen så kommer foreach att snurra 1 gång, andra iterationen kommer foreach att snurra 2 ggr, osv osv

Lycka till!

ojoj, alltså forEach ska redigeras på något vis så den bara plussar ihop och delar sen? elelr har jag fel?
mina frågor är säker så dumma med är heeeelt newbie på detta

Permalänk
Medlem
Skrivet av linn_123:

ojoj, alltså forEach ska redigeras på något vis så den bara plussar ihop och delar sen? elelr har jag fel?
mina frågor är säker så dumma med är heeeelt newbie på detta

Nu räknar den summan i varje iteration, om du får den att räkna ut summan av arrayens innehåll endast i sista iterationen, alltså när i = 5 så blir nog resultatet som du vill.

Permalänk
Medlem
Skrivet av appmas:

Nu räknar den summan i varje iteration, om du får den att räkna ut summan av arrayens innehåll endast i sista iterationen, alltså när i = 5 så blir nog resultatet som du vill.

förlåt men jag förstår helt vad du skriver i texten men inte hur jag gör i=5 i koden.

ska jag skippa <=5 och bara skriva i=5 eller ska jag istälet lägga till i foreach?

Permalänk
Medlem
Skrivet av linn_123:

ojoj, alltså forEach ska redigeras på något vis så den bara plussar ihop och delar sen? elelr har jag fel?
mina frågor är säker så dumma med är heeeelt newbie på detta

Hm såg att jag försvårade det lite för dig, jag lade till let sum = 0 utanför loopen, flytta den så att den ligger precis ovanför foreach-loopen.

Sedan vill du nog modifiera raden

avg = sum / 5

Då den just nu konstant delar med 5, även fast du inte alltid har 5 siffror i arrayen numbers. Du vill nog dela med antal nummer du har i den arrayen, du kan använda dig av numbers.length, för att få ut den siffran

Permalänk
Medlem
Skrivet av Ostbullen:

Hm såg att jag försvårade det lite för dig, jag lade till let sum = 0 utanför loopen, flytta den så att den ligger precis ovanför foreach-loopen.

Sedan vill du nog modifiera raden

avg = sum / 5

Då den just nu konstant delar med 5, även fast du inte alltid har 5 siffror i arrayen numbers. Du vill nog dela med antal nummer du har i den arrayen, du kan använda dig av numbers.length, för att få ut den siffran

Tack tack tack!!!! nu fungerar det som det ska tusen tack!!

Permalänk
Medlem
Skrivet av linn_123:

Tack tack tack!!!! nu fungerar det som det ska tusen tack!!

Nemas problemas, lycka till i hackandet!

Permalänk
Medlem
Skrivet av Ostbullen:

Hm såg att jag försvårade det lite för dig, jag lade till let sum = 0 utanför loopen, flytta den så att den ligger precis ovanför foreach-loopen.

Sedan vill du nog modifiera raden

avg = sum / 5

Då den just nu konstant delar med 5, även fast du inte alltid har 5 siffror i arrayen numbers. Du vill nog dela med antal nummer du har i den arrayen, du kan använda dig av numbers.length, för att få ut den siffran

du gjorde helt klart min dag nu! nu har jag bara en uppgift kvar. vill du kanske kolla på den med? ligger i annan tråd. vore väldigt tacksam

Permalänk
Medlem
Skrivet av linn_123:

förlåt men jag förstår helt vad du skriver i texten men inte hur jag gör i=5 i koden.

ska jag skippa <=5 och bara skriva i=5 eller ska jag istälet lägga till i foreach?

Om det är så att genomsnittet ska räknas när du gett input 5 gånger så ska du bara räkna det i sista iterationen. Men det blir nog bättre om du gör som @Ostbullen skrev, att du låter summan nollställas varje gång den räknar genomsnittet och visa det efter varje input. Jag skulle också lagt in ett break, så att den slutar processen om du skriver 9999.

if (number === 9999) { document.write("Error"+"<br>"+"<br>") break }

Permalänk
Medlem

nu är koden denna
<!--Läs in en array av 5 tal, skriv ut summan
av alla positiva och negativa tal för sig
Om du matar in 4, -56, 67,-32,89 så SKA
printen vara i följande format:

Your input nr was: 4
Your input nr was: -56
Your input nr was: 67
Your input nr was: -32
Your input nr was: 89

The sum of the positive nrs are: 160
The sum of the negative nrs are: -88-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>pos and neg nr array</h1>

<script>
let numbers = []
let pos = []
let neg = []

for (let i = 1; i <= 4; i++) {
let number = parseInt(prompt("Input nr"))
numbers.push(number)
document.write("Your input nr was: " + number + "<br>" + "<br>")

while (number != 0) {
number = parseInt(prompt("Input nr"))
numbers.push(number)
document.write("Your input nr was: " + number + "<br>" + "<br>")
}

numbers.forEach(function (number) {
if (number < 0) {
neg.push(number)
} else {
pos.push(number)
}

numbers.forEach(number => {
neg += numbers[i]
pos += numbers[i]
})
document.write("sum pos: " + pos + "<br>" + "<br>")
document.write("sum neg: " + neg)
})
}

</script>
</body>
</html>

det som händer nu är ett den inte avslutas när jag tryckt in 89 som sista siffra. då jag vill att den ska stoppa och summera negativa och positiva tal för sig.