for loop problem - skriva baklänges
"Skriv ett script som tar emot en text i en inmatningsruta. Sedan ska texten skrivas baklänges och visas i en meddelanderuta.
Lösningstips:
- Låt en inmatingsruta ta emot textsträngar (metoden prompt())
- Egenskapen length hos en textsträng ger dig antalet bokstäver i den
- En for-slinga som upprepas lika många gånger som det finns bokstäver i textsträngen skriver en ny textsträng som är den gamla skriven baklänges
- En meddelanderuta visar den nya textsträngen (metoden alert())
------
Förstår inte hur jag ska skriva for-slingan. Så här långt har jag kommit.
<!--Uppgift 4. ta emot text, skriv baklänges. -->
<html>
<head>
<title> Uppgift 4 </title>
</head>
<body>
<script>
var bak = prompt(' skriv in en text ', ' text ');
for(var i=0; i < bak.length; i = i + 1)
{
}
Tips: i = i + 1 kan skrivas som i++, i = i - 1 kan skrivas i--, i + 10 kan skrivas som i += 10. Viktigt att veta om du ska programmera i javascript eller C / C++ / C#.
Du kan addressera ("nå") varje enskild bokstav i strängen med bak[i].
Gör om for-loopen så den går "baklänges", adressera sedan bak med dessa värden.
var backwards;
for (....) // Klura ut hur du ska skriva loopen
{
backwards += bak[i];
}
alert(backwards);
I en variabel som innehåller texter har varje tecken i texten ett index. Texten "Hej" har H index 0, e index 1 och j index 2. Med hjälp av en for loop kan du "bygga om" din text variabel "bak" till en ny variabel ordBak som ska vara en spegling av ditt ord.
Programkoden kan se ut något som följande:
var ordBak;
for ( ... ) {
ordBak = ordBak + bak[i]; //Här sätter du din text variabel till sig själv + index bokstaven (0,1,2,3 osv) till ditt variabel ord direkt.
//eller
ordBak += bak[i]; //Här lägger till till index bokstaven (0,1,2,3 osv) till din variabel direkt.
}
alert(ordBak);
bak[i] betyder att den hämtar bokstaven från index:et "i" från variabeln bak. Ifall bak är "Hej" och du skriver bak[1] så kommer den hämta bokstaven e. I ditt fall betyder detta att du måste börja med att hämta den sista bokstaven ur din text, bak, och jobba dig ner mot den första bokstaven som har index:et 0.
Fundera nu hur din for loop bör se ut. i ska börja från den sista bokstaven i ordet och fortsätta ner tills du kommer till den första bokstaven i ordet, index 0.
Ifall något inte går ihop, fråga!
for ( var i = bak.length; i >= 0; i-- )
{
ordBak += bak[i];
}
alert(ordBak);
När jag har matat in: "hej" så dyker det upp på meddelanderutan: "NaNjeh"...vet inte hur jag ska få bort NaN..
Du har gjort rätt i princip. Du visste inte att bak[] är från 0 till längd - 1. Första bokstaven är alltså [0] och sista [längd - 1]. Ändra din loop från var i = bak.length till var i = bak.length - 1 så kommer det att fungera.
Är tacksam för era svar hittils.
Nu står det:
for ( var i = bak.length - 1; i >= 0; i-- )
{
ordBak += bak[i];
}
alert(ordBak);
Men nu dyker det upp i meddelanderutan när jag skriver "hej" -----> "undefinedjeh"
Tror du får publicera hela koden här om vi ska kunna hjälpa ....
Innan du gör det: Lägg till:
var ordBak;
ordBak = "";
före (ovanför) for-loopen
Testa
Tusen tack för hjälpen! Nu funkar det!
Utmärkt!
Om du vill bli en bra programmerare i vilket språk som helst bör du använda vissa standardmetoder. För javascript bör du alltid definiera dina variabler först:
var i;
var bubble;
Fördelen med det är att om du stavar fel och skriver bubbel = 1 istället för bubble = 1 kommer du (troligtvis) få ett felmeddelande.
Ännu bättre: Börja varje funktion så här:
function abc()
{
'use strict';
var a;
osv ...
}
use strict kommer att vägra att köra program med variabler som inte är deklarerade (var a;)
Mindre risk för felstavningar alltså!
... osv.
Tack för dem bra tipsen!
Det behövs ingen for-loop i detta fall - omvandla texten till en array, använd array-metoden reverse, omvandla tillbaka till text.
Hela programmet är en rad kod:
alert('Texten baklänges: ' + prompt('Skriv en text').split('').reverse().join(''));