damit kann ich eine char in einem String ersetzen:
public static void main(String[] args) {
double zahl = 11.12;
String s = String.valueOf(zahl);
char c = ',';
String s2 = s.replace('.', c);
System.out.println("Euro: " + s2);
}
}```
Meine Frage liegt in dieser Zeile:
```String s2 = s.replace('.', c);```
Warum muss ich hier neue String Variable deklarieren und in dieser meinen ersten String speichern? Warum kann ich meinen ersten String nicht gleich ausgeben? Die s Variable wird ja vor dem Ausgeben in der Konsole verändert, aber wenn ich die ausgebe, dann sehe ich keine Veränderungen.
PS: wie kann man Java Code hier einfügen?
Hmm ich sehe gerade, dass ich auch so machen kann:
System.out.println("Euro: " + s);```
So muss ich neuen String nicht erzeugen, aber warum muss ich die Änderungen nochmal abspeichern, werden die nicht automatisch gespeichert?
Hi!
Die Funktion replace liefert als Rückgabewert eine Referenz auf den veränderten String. D.h. der Ursprungsstring (in Deinem Fall s) wird nie geändert.
Wie Till schon gesagt hat es liefert dir eine neue Referenz, weil einen String kann man nicht ändern.
Javacode kannst du derzeit nur mit [ highlight=java ] machen bei Antworten sollte auch nen Button dafür sein. Die kurzen Tags sind irgendwie kaputt gegangen werden aber noch gemacht
ich bin jetzt beim Thema OOP und habe ein Programm geschrieben mit dem man Umfang und Fläche von einem Rechteck berechnen kann. Ich wollte jetzt fragen ob mein Programm ok ist, oder ob man es an einigen Stellen verbessern kann/sollte. Vieleicht kann man die main() Methode besser schreiben? Falls ja, wie?
Eine Frage hätte ich noch, wo ist der Unterschied zwischen valueOf und parseDouble? Ich kann mit beiden Methoden mein String umwandeln.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class OOPFlachenberechnung {
public static void main(String[] args) throws IOException {
System.out.println("Flaechenberechnung");
//Eingabe
BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Bitte Seite A eingeben: ");
Double a = Double.parseDouble(eingabe.readLine());
System.out.println("Bitte Seite B eingeben: ");
Double b = Double.parseDouble(eingabe.readLine());
Rechteck rechteck = new Rechteck();
//Ausgabe
rechteck.setUmfang(a, b);
System.out.println("Der Umfang beträgt: "+rechteck.getUmfang());
rechteck.setFlaeche(a, b);
System.out.println("Die Fleache beträgt: "+rechteck.getFlaeche());
if(rechteck.isQuadrat())
{
System.out.println("Das ist ein Quadrat.");
}
else
{
System.out.println("Das ist kein Quadrat.");
}
}
}
class Rechteck{
double seiteA, seiteB;
void setUmfang(double seiteA, double seiteB){
this.seiteA = seiteA;
this.seiteB = seiteB;
}
double getUmfang(){
return 2*seiteA + 2*seiteA;
}
void setFlaeche(double seiteA, double seiteB){
this.seiteA = seiteA;
this.seiteB = seiteB;
}
double getFlaeche(){
return seiteA * seiteB;
}
boolean isQuadrat(){
if(seiteA==seiteB){
return true;
}
else
{
return false;
}
}
}
ok, und wegen meinem Programm, ist es ok so? Dass ich BufferedReader und InputStreamReader dort verwendet habe, war das ok, oder sollte man für eine Eingabe irgendwas anderes nehmen?
Zum ersten: Man muss genau hinschauen valueOf liefert einen Double zurück, parseDouble ein double. Das wichtige hier ist die Groß- und kleinschreibung. Double ist die Wrapperklasse zu double - dazu hab ich im Java-Forum mel einen FAQ-Beitrag geschrieben. Ich hab den eben auch ins [Wiki](http://wiki.coding-community.net/wiki/Primitivtypen und Wrapperklassen) kopiert. Demnach benötigt man normalerweise parseDouble.
Zum Zweiten: Das ist schon ok, einfacher geht es allerdings mit java.util.Scanner. Beispiel:
//...
System.out.println("Bitte Seite A eingeben: ");
Double a = Double.parseDouble(eingabe.nextLine());
System.out.println("Bitte Seite B eingeben: ");
Double b = Double.parseDouble(eingabe.nextLine());```