Zahl in Kommandozeile übergeben

spreng-kopf

Grünschnabel
Hi.....ich habe ein kleines Problem mit meinem Programm.
Es handelt sich um die Wurzelberechnung nach Newton.
Ich möchte das die Zahl vom Benutzer eingegeben werden kann und nicht wie hier im Programm fest sitzt.
Wie ändere ich meine Main Methode um, damit eine Zahl übergeben werden kann?

Code:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Wurzel3 {

    private int iterations; 	    	// Zähler für Iterationen

    public Wurzel3() {
    	iterations = 0;
    }

    public int getIterations() {
    	return iterations;
    }

    double sqrt(double x) {
    	double ug = 1; 	    	    	// Untergrenze
	double og = x; 	    	    	// Obergrenze
    	double approx = (ug + og) / 2;	// Näherung

    	while (approx * approx != x) {
	    iterations++;  	// Wieder ein Durchgang mehr...

	    System.out.println("Iteration " + iterations + ": "
	    	+ ug + " <= " + approx + " <= " + og);

	    double diff = approx * approx - x;

	    if (diff < 0) {
	    	// approx ist zu klein => wird neue Untergrenze
		ug = approx;
	    }
	    else {
	    	// approx ist zu groß => wird neue Obergrenze
		og = approx;
	    }

    	    double saveApprox = approx; // Bisherige Näherung merken
    	    approx = (ug + og) / 2; 	// Neue Näherung berechnen

	    // Gemäß Arithmetik sollte jetzt ug < approx < og gelten:
	    if (approx <= ug || approx >= og) {
		iterations--;	// Letzte Iteration rückgängig machen
	    	System.out.println("Abbruch, da keine bessere Genaugigkeit "
		    + "erzielt werden kann");
		return saveApprox;
	    }
	}

    	// approx * approx ist gleich x
    	System.out.println("Volltreffer!");

    	return approx;
    }

    public static void main(String[] args) {
	Wurzel3 w = new Wurzel3();
        
	double n = 4;

    	// Wert für n auf der Kommandozeile angegeben?
        if (args.length > 0) {
	    // ... dann auswerten und n zuweisen
	    n = Double.parseDouble(args[0]);
	}

	double wurzel = w.sqrt(n);
	double mathSqrt = Math.sqrt(n);
	System.out.println("Wurzel von " + n
    	    + " ist naeherungsweise: " + wurzel
    	    + " (" + w.getIterations() + " Iterationen)");
	System.out.println("Math.sqrt(" + n + ") = " + mathSqrt);
	System.out.println("Differenz = " + Math.abs(wurzel - mathSqrt));
    }

}

Danke.
 
Du hast doch schon die entsprechende Abfrage drin. In args[0] sollte der übergebene Wert drin stehen.

mit:

java Wurzel3 9

bspw. sollte das Programm die 9 als Übergabeparameter verarbeiten ..

Oder meinst du etwas anderes ?

Falls du eine Eingabemöglichkeit mit dem BufferedReader ermöglichen willst, kannst du die BufferedReader.readLine() Methode verwenden .. BufferedReader API

PHP:
BufferedReader input = new BufferedReader (new InputStreamReader(System.in),1);
String inputString = input.readLine();
 
Zuletzt bearbeitet:
Ich will das Programm starten und dann eine Zahl eingeben.
In diesem Programmbesipiel wird nicht nach einer Zahl gefragt sondern direkt die Wurzel aus 4 berechnet.

public static void main(String[] args) {
Wurzel3 w = new Wurzel3();

double n = 4;
 
sprengkopf hat gesagt.:
Code:
	double n = 4;

    	// Wert für n auf der Kommandozeile angegeben?
        if (args.length > 0) {
	    // ... dann auswerten und n zuweisen
	    n = Double.parseDouble(args[0]);
	}
Dann starte dein Program doch mal via:

Code:
java Wurzel3 9

Wenn du von Tastatur bzw stdin einlesen möchtest, hat teppi dur schon den richtigen Tip
gegeben.

Gruß

RedWing
 
Zuletzt bearbeitet:
Das mit BufferedReader hatte ich schon versucht, weiß nur nicht wie ich die Variable n deklarieren muss damit n den Wert der Eingabe bekommt.
 
Kurz zur erläuterung:

BufferedReader hat nix mit kommandozeilen parameter übergabe zu tun.

dadurch dass du eine main methode mit

public static int main( string args[]) {


}

definierst hast du einen String Array, welche die Parameter mit welchen du die funktion aufrufst definiert.

dein argument bekommst du nun mit der folgenden Zeile:

double n;

n=Double.parseDouble(args[0]);

Somit hast du jetzt den wert welchen du per Kommandozeilenparameter übergeben hast in deiner Variablen n.

Wenn ich dich jetzt aber richtig verstehe willst du das Programm starten und in der Dos-Box eine abfrage haben, wie z.B.: "Geben Sie bitte eine Zahl ein, dessen Wurzel berechnet werden soll -> ", oder so was.

Für so etwas würde ich dir den Standard Input Stream der Klasse System empfehlen.

In deinem Fall so etwas:

system.out.print("Geben sie.....soll ->");
int eingabe=system.int.read();

beachte bitte, dass dies nur ein byte einliest (sprich einen wert von 0-255) du musst natürlich noch herausfinden welche Zahl das ist dazu ziehst du davon den ASCII Wert der null ab. Dies kurze beispiel ist nur für einstellige zahlen, wenn du grösser als 10 eingeben möchtest, lass ich dich mal ein wenig knobeln wie das geht (*hüstel, hüstel, byte-buffer, hüstel, hüstel*) ;)


Gruss

Torsten.

P.S.: Bitte die Frage demnächst eindeutiger stellen.
 
Schau mal:

Code:
        ....
        double n = 0;
        
        // Wert für n auf der Kommandozeile angegeben?
        if (args.length > 0) {
            // ... dann auswerten und n zuweisen
            n = Double.parseDouble(args[0]);
        }
        else{
                BufferedReader input = new BufferedReader (new InputStreamReader(System.in),1);
                String inputString = "";
                try{ 
                        System.out.print("Zu berechnende Zahl:? ");
                        inputString = input.readLine();
                }
                catch(IOException e){
                        System.out.println("IOException occured:(");
                        e.printStackTrace();
                }
                n = Double.parseDouble(inputString);
        }
        ....
 
Zurück