2016-11-04 8 views
1

Schreiben Sie eine Methode mit dem Namen randomWalk, die einen zufälligen eindimensionalen Spaziergang durchführt und jede erreichte Position und die während des Laufs erreichte maximale Position meldet. Der Random Walk sollte bei Position 0 beginnen. Bei jedem Schritt sollten Sie die Position entweder um 1 erhöhen oder verringern (mit gleicher Wahrscheinlichkeit). Der Spaziergang stoppt, wenn 3 oder -3 getroffen wird. Die Ausgabe sollte wie folgt aussehen:Falscher Ausgang - Warum?

position = 0 
position = 1 
position = 0 
position = -1 
position = -2 
position = -1 
position = -2 
position = -3 
max position = 1 

Mein Code:

public static void randomWalk() { 
    Random rand = new Random(); 
    int position = 0; 
    int max = 0; 
    System.out.println("position = " + position); 
    while (position != 3 && position != -3) { 
     int randomNumber = rand.nextInt(2) * 2 - 1; 
     position = position - randomNumber; //why the minus? 
     max = Math.max(max , position); 
     System.out.println("position = " + position); 
    } 
    System.out.println("max position = " + max); 
} 

Ich hatte zunächst das Pluszeichen statt auf das Minuszeichen, und 3 4 Ausgänge waren falsch (Bild angehängt). Hat es etwas mit der Ausgabekonsole zu tun oder ist mein Code irgendwo falsch? With minus sign

With plus sign

+1

A + würde dort genauso gut funktionieren ... es ist nicht klar, wie sie eine bestimmte Ausgabe erwarten, wenn Sie Zufallszahlen verwenden. Aber Sie haben uns nicht das * Ende * dieser Ausgabe gezeigt - vielleicht überprüft es wirklich nur die maximale Position? –

+0

Während ich denke, dass Ihre Frage ziemlich vollständig ist, verstehe ich nicht, was mit dem Code falsch ist? Es verringert sich um eins oder erhöht sich um eins, wenn man die Ausgabe beurteilt, also was ist da falsch? – SomeJavaGuy

+1

@KevinEsche Genau mein Problem da, sollte es mit dem + Zeichen gut funktionieren aber trotzdem ist die Ausgabe falsch. Ich weiß nicht, wie sie die Ausgabe überprüfen, da es sich um Zufallszahlen handelt. –

Antwort

0

I hatte zunächst die Plus-Zeichen statt das Minuszeichen und 3 aus 4 Ausgänge waren falsch (Bild angehängt). Hat es etwas mit der Ausgabekonsole zu tun oder ist mein Code irgendwo falsch?

Es war nicht "falsch", die Anforderungen gegeben, die wir von wissen. Die Variable max verfolgt den maximalen Wert, der erreicht wurde. Es ist zwangsläufig eine positive Zahl. Die höchste erreichte positive Zahl war 1, bevor die Ausgangsbedingung -3 erreicht wurde.

Ihre Implementierung funktioniert gleich gut, unabhängig von plus oder minus randomNumber. Nur die Richtung der Wege wird umgedreht, das ist alles. Sie können dies leicht beobachten, indem Sie die Random Instanz mit einem Seed initialisieren, z. B. new Random(1), und dann einen Lauf mit Plus und Minus versuchen. Einer von ihnen wird 3 und der andere -3 erreichen und bei jedem Schritt entgegengesetzte Richtungen einnehmen.

Bei einer zweiten Lesung sehe ich jetzt, dass Sie wahrscheinlich das Programm durch eine Art von Richter-System laufen, und mit "inkorrekt" meinen Sie, die gedruckten Werte sind Gegensätze dessen, was von diesem Richter erwartet wird. Das Ändern des Plus-Minuszeichens behebt das aus dem oben erläuterten Grund. Egal, welches Zeichen Sie verwenden, ich glaube nicht, dass Ihr Programm falsch ist. Die verborgene Anforderung, ein bestimmtes Zeichen zu verwenden, ist unangemessen und unnatürlich, da ob Plus oder Minus irrelevant im Sinne des Zufallsprinzips ist.