Avatar billede hankster Nybegynder
10. december 2001 - 18:39 Der er 20 kommentarer og
1 løsning

nemt om funktioner

hej

Jeg har en String som jeg sender ind i en funktion.
Deri skal den laves om, og returneres.

Jeg gør således nu:

Public String omformString(String s) {
  //s laves om
  return s;
}

men kan det ikke gøres lettere.

som f.eks. i delphi pascal hvor man kan skrive \"var\" foran s.
Avatar billede erikjacobsen Ekspert
10. december 2001 - 18:43 #1
StringBuffer
Avatar billede hankster Nybegynder
10. december 2001 - 18:54 #2
?? Jeg tror du misforstår

delphi eksempel:
  procedure omformString(var s: string)
  ....

bruges:
  omformString(MinTekst);

Hvordan gør jeg det i java skal man skrive noget foran variablen, eller er den default som med \"var\" i delphi?

************************************************
jeg vil undgå at kode således:
  MinTekst= omformString(MinTekst);
Avatar billede erikjacobsen Ekspert
10. december 2001 - 18:55 #3
Du skal ikke bruge String, men StringBuffer
Avatar billede erikjacobsen Ekspert
10. december 2001 - 19:05 #4
Eksempel:
class StringTest {

  public static void test(StringBuffer s) {
    s=s.append(\" World\");
  }

  public static void main(String[] args) {
        StringBuffer s = new StringBuffer(\"Hello\");
        test(s);
        System.out.println(s);
  } 
}
Avatar billede hankster Nybegynder
10. december 2001 - 19:07 #5
Jeg bruger også stringbuffer inde i omform funktionen...

Spørgsmålet går ikke på at behandle en tekst, men på hvordan man i java laver en procedure istedet for som en funktion.

Erik... hvis det er det du svarer på, er det så rigtig forstået at det skal laves således:

public void omformString(StringBuffer s) {
  //laver s om på en eller anden måde
}

og bruges:

omformString(MinTekst);

og så er MinTekst lavet om
Avatar billede hankster Nybegynder
10. december 2001 - 19:11 #6
hmmm... okay...

visker lige tavlen ren!!

det er egentlig kun et spørgsmål om om man i Java har et ord foran variabler i procedurer hvis have lov at få ændringerne fra proceduren med tilbage.

ligesom man har i pascal  \"var\" foran variabler eller forbliver de den værdi somm de havde da de blev smidt ind i proceduren.

pyh!
Avatar billede hankster Nybegynder
10. december 2001 - 19:12 #7
eller-s forbliver
Avatar billede erikjacobsen Ekspert
10. december 2001 - 19:18 #8
Men havde du hørt efter i timerne ville du vide at det har man ikke.
Læs lidt i bogen eller de udleverede slides.
Avatar billede hankster Nybegynder
10. december 2001 - 19:24 #9
jeg kigger skam i alt det udleverede materiale.
Men jeg kunne ikke finde et eksempel på det.

tak for svaret
Avatar billede jakoba Nybegynder
10. december 2001 - 19:54 #10
I Java er der ikke noget der hedder var parametre.

til gengæld bliver alle objekter overført som reference (dvs aressen på objektet) snarere end som værdi (indholdet af objektet).

en srengkonstant er en atomær variabel. dens indhold overføres
end stringbuffer er et objekt, hvis vi ændrer i den indenifunktionen vil strengen indeni stringbuffer objektet blive ændret.

mvh JakobA
Avatar billede hankster Nybegynder
10. december 2001 - 20:02 #11
hjælpen siger noget andet!

java.lang.Object
  |
  +----java.lang.String
Avatar billede erikjacobsen Ekspert
10. december 2001 - 20:04 #12
En String er \"immutable\" - og kan ikke ændres efter oprettelse

  public static void test(String s) {
  s=s+\" World\";
  }

opretter et String-objekt som parametren s peger på. Det objekt som s
før pegede på (som kom med som aktuel parameter) ligger der stadigvæk,
men s peger bare ikke mere på det.
Avatar billede erikjacobsen Ekspert
10. december 2001 - 20:07 #13
PS jakoba: En String er et objekt på samme niveau som StringBuffer, og
ikke som int og double
Avatar billede hankster Nybegynder
10. december 2001 - 20:07 #14
okay!
Avatar billede erikjacobsen Ekspert
10. december 2001 - 20:09 #15
Man kan læse
  s=s+\" World\";
som
  s=new String(s+\"World\");
Avatar billede disky Nybegynder
11. december 2001 - 08:46 #16
hvad mener du med laves nemmere ?

Det er da dejligt nemt, og man kan tydeligt se hvad der kommer ind og hvad der kommer ud
Avatar billede hankster Nybegynder
11. december 2001 - 12:17 #17
feks. i Delphi kan man lave Var parametre ved at skrive var foran en string kan man få ændringen af den i proceduren med tilbage. Hvis man kunne det i java, så behøvede man kun at kalde proceduren således:

omformString(var mintekst:String);

istedet for:

mintekst = omformString(mintekst:String);

men det kan man altså ikke!! 
Avatar billede hankster Nybegynder
11. december 2001 - 12:19 #18
hov! delphi-rygraden overtog

(String mintekst) selvfølgelig!!
Avatar billede disky Nybegynder
11. december 2001 - 12:21 #19
nej, det andet er mere logisk (synes jeg)

Hvad nu vis du ikke ønsker resultatet skal ødelægge den oprindelige String.

men du kan bare sige

lavNoget(test);

Hvis test er et objekt bliver der kun overført et kopi af referencen og derfor ændrer du direkte i den originale !

Dog pas på med String\'s da de er immutable.
Avatar billede disky Nybegynder
11. december 2001 - 12:23 #20
men gør du det med en StringBuffer kan du sagtens.


f.eks.
public program()
{
  StringBuffer test=new StringBuffer(\"hallo\");
  lavNoget(test);
  System.out.println(\"test = \"+test);
}

public lavNoget(StringBuffer sb)
{
  sb.append(\" hankster\");
}

Så det gør det samme.

Husk brug kun String hvis du IKKE vil ændre på den String.
Avatar billede jakoba Nybegynder
11. december 2001 - 12:27 #21
Pascal er et dejligt sprog. men det er altså ikke Java.

I Pascal svarer en string til  packed array of char;  og man kunne så ændre på bogstaverne (men ikke på længden) i en given streng.

I java er String\'s pr definition konstanter. (Immutable som erikjacobsen sagde) du kan ikke ændre en steng, kun oprette en ny streng med et andet indhold.

klassen stringbuffer svarer mere til det der hedder string i Pascal. og de kan ændres.

mvh JakobA
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester