tovelainenMedlem sedan mars 2003143 inlägg
Hallå ja - nån som kan hjälpa till här?
Håler på med en metod som ska vända en string baklänges.
Ett ord skrivs in i huvudprogrammet.
Och så skickas "baklanges(String enText)" för o få ordet bakvänt som sen ska skickas tillbaka till mitt program.
enda jag har importerat är extra-paketet och kan inte ta in fler paket än det.
himla mycket tack på förhand från en flitig java-elev
pettssonMedlem sedan jan. 2002777 inlägg
Det enklaste sättet bör vara m.h.a. for-slingor, typ så här
public String baklanges(String enText) {
String tempText = "";
for(int i = (enText.length() - 1); i >= 0; i--) {
tempText .= enText.charAt(i);
}
return tempText;
}
Detta borde funka, men jag kan inte kompilera den nu och kolla
SPiNMedlem sedan mars 20005 832 inlägg
Eller helt enkelt:
StringBuffer stringBuffer = new StringBuffer( "!dlrow olleH" );
String str = stringBuffer.reverse().toString();
tovelainenMedlem sedan mars 2003143 inlägg
Tack spin, men jag måste lösa det lite mer som Pettsson föreslår. Så här nånting ska det se ut men jag får det inte helt att funka:
---
public static void baklanges(String enText) {
String ut="";
for (int bokstav = (enText.length() - 1); bokstav \>= 0; bokstav--) {
ut= enText.charAt(bokstav);
}
System.out.print(ut);
}
---
Det verkar va fel på så vis att på rad 6 är resultatet en char, men typen jag beöver är String.
Hur fixar man det?
Tack så hjärtligt för tidigare svar!
SPiNMedlem sedan mars 20005 832 inlägg
public class Misc {
public static String reverse( String s ) {
StringBuffer result = new StringBuffer( "" );
for( int i = s.length() - 1; i >= 0; i-- )
result.append( s.charAt( i ) );
return result.toString();
}
}
Anropas:
String str = "!dlrow olleH";
str = Misc.reverse( str );
pettssonMedlem sedan jan. 2002777 inlägg
Om jag citerar mig själv lite grann
"tempText .= enText.charAt(i);"
.= är det samma som append har jag för mig, använde det så en gång själv iaf :)
SPiNMedlem sedan mars 20005 832 inlägg
.= finns inte Java, bara i PHP. I Java skriver man += för att konkatenera. Men en konkatenering i en loop är inte det optimalaste sättet att lösa någonting på, det är mycket bättre att skapa en StringBuffer som man fyller istället.
tovelainenMedlem sedan mars 2003143 inlägg
Tack så mycket för hjälpen!
Såhär blev det till slut. Nu fungerar det!
---
public static void baklanges(String enText) {
String ut="";
for (int bokstav = (enText.length() - 1); bokstav \>= 0; bokstav--) {
ut+= enText.charAt(bokstav);
}
System.out.print(ut);
---
aasahMedlem sedan mars 20033 451 inlägg
tovelainen skrev:
ut= enText.charAt(bokstav);
Det verkar va fel på så vis att på rad 6 är resultatet en char, men typen jag beöver är String.
Hur fixar man det?
Tack så hjärtligt för tidigare svar!
Nog så riktigt. Säg att texten är "Hej" och bokstav är 2. Då blir
enText.charAt(bokstav) = 'j', dvs bokstaven 'j'. Allmänt sett kan du göra om bokstaven j till strängen "j" på flera sätt, bl.a.:
char ch = j;
String j = ch + ""; //==> 'j' + tom sträng = "j"
eller
Character ch = new Character(j);
String j = ch.toString();
MEN det löser inte ditt problem rakt av eftersom då blir det:
ut= enText.charAt(bokstav) + "";
Vilket innebär i mitt ex ovan att ut blir lika med, för varje varv i slingan:
ut = ""; //före
ut = "j";
ut = "e";
ut = "H"; //efter
och det var ju inte det du ville.
Så i princip kan du göra så här:
ut= ut + enText.charAt(bokstav);
För då adderas nästa hela tiden till det du redan har, alltså:
ut = ""; //före
ut = "j";
ut = "je";
ut = "jeH"; //efter
MEN man brukar inte använda String för att addera bokstäver, minst av allt i for-slingor och dylikt. En String kan nämligen inte ändras, så för varje del i ett adderande uttryck skapas och slängs en förskräcklig massa String:ar. Det tar en massa onödig tid och minne. Alltså brukar man i stället använda StringBuffer. Ett speciellt objekt som just är gjort för att manipulera strängar och där innehållet i den redan skapade StringBufferten ändras istället för att massor av onödiga temporära objekt skapas och slängs... Dess syntax kan du se ovan i tidigare svar, eller gå till Javas API och läs.