Zahlen Abstand zur Null bestimmen

Diskutiere Zahlen Abstand zur Null bestimmen im Allgemeine Java-Themen Bereich.
J

Javlipse

Hallo, ich habe eine für könner wahrscheinliche einfache Frage:
wie kann ich in Java den Abstand einer Zahl zur null bestimmen und beim kleinsten Abstand dann einen System.out.println ausfüren lassen?
Also ich habe eine schleife, die immerneue Zahlen generiert und in demselben int speichert, aus diesen Zahlen möchte ich die kleinste herausfinden und dann outprinten lassen
 
H

httpdigest

Der "Abstand" einer Zahl X zur Zahl 0 ist doch die Zahl X selbst... oder wie jetzt? Und wenn du den "absoluten Abstand" willst, dann eben Math.abs(X).
 
J

Javlipse

Der "Abstand" einer Zahl X zur Zahl 0 ist doch die Zahl X selbst... oder wie jetzt? Und wenn du den "absoluten Abstand" willst, dann eben Math.abs(X).
ja das schon, ich brauche nur eine Möglichkeit die zu vergleichen....

Quasi wie bei blackjack: Meine schleife erstellt erst Spieler und gibt dann per Math.random jedem Spieler eine zufällige Zahl int z.
Jedoch ist die Zahl nirgends gespeichert, weil nach dem ersten Spieler der int z dem nächsten Spieler die nächste zufällige Zahl hinschreibt.
Nun muss ich aber irgendwie vergleichen wer am nähesten bei der 21 ist...
Dafür habe ich mir gedacht 21 - z zu rechnen und dann das den Spieler, dessen Zahl am nähesten bei der 0 ist gewinnen zu lassen...
 
J

JustNobody

Was genau ist denn Deine Absocht?

Wenn Du damit einen Spieler auswählen willst, dann nimm doch einfach eine Zufallszahl zwischen 1 und n (bei n Spielern) um dann so gewählten Spieler zu wählen.

Ansonsten kannst Du das in einer Schleife machen und du merkst dir den bisher kleinsten Abstand / spieler. Wenn dann bei einem Spieler der Abstand kleiner ist, ersetzt du die Werte ... Das wäre sowas wie ein generischer Vorgang.
 
H

httpdigest

Wenn du einfach nur den Spieler mit der höchsten Punktezahl haben willst, der noch weniger als 21 Punkte oder genau 21 Punkte hat, dann filtere die heraus, die höher als 21 Punkte haben und sortiere einfach alle Spieler absteigend nach Punktezahl:
Java:
import static java.util.Comparator.comparing;
import static java.util.stream.Stream.of;
import java.util.Optional;
import java.util.stream.Stream;
public class Player {
  private String name;
  private int value;
  public Player(String name, int value) {
    this.name = name;
    this.value = value;
  }
  public static Player player(String name, int value) {
    return new Player(name, value);
  }
  public int getValue() {
    return value;
  }
  public static Optional<Player> playerNearestTo(int limit, Stream<Player> allPlayers) {
    return allPlayers
        .filter(p -> p.value <= limit)
        .sorted(comparing(Player::getValue).reversed())
        .findFirst();
  }
  @Override
  public String toString() {
    return name + " (" + value + ")";
  }

  // Test
  public static void main(String[] args) {
    System.out.println(
        playerNearestTo(21, of(
           player("a", 7),
           player("b", 11),
           player("c", 19),
           player("d", 28))));
  }
}
 
MoxxiManagarm

MoxxiManagarm

Wenn es um Blackjack geht ist das doch fast unsinnig? Jemand mit 22 Punkten (1 Punkt Abstand) hat verloren, dann ist er doch nicht besser als jemand mit 18 Punkten (3 Punkte Abstand). Und wenn alle über 21 sind dann hat keiner gewonnen, auch nicht der mit 22 Punkten, aus meiner Sicht.

Also ist der Ansatz mit filter auf < 21, dann suche geringsten Abstand (21 - punkte) wie von httpdiggest angedeudet schon am sinnvollsten, nur dass ich halt keinen Gewinner küren würde, sofern der filter eine leere Liste erzeugt. Dann hat das Haus gewonnen ;-)
 
J

Javlipse

Also mein Problem ist, dass alles über schleifen läuft und dem Spieler die Zahl nicht wirklich zugeordent ist, sondern nur geschrieben ist: Sysout ("Player " + player + " hat eine " v "gezogen. Score: " + v");
V ist dabei eine Math.random zahl, die durch die schleife generiert wird und player eine Zahl die bis n ausfsteigt.
 
J

JustNobody

Also welche Daten du wie speicherst, ist doch dir überlassen.

Wenn Du also jetzt feststellen solltest, dass Du die Daten noch brauchen kannst, dann merkst Du diese einfach. Das ist ja relativ problemlos.

Daher sehe ich zwei Möglichkeiten:
a) Du schaffst dir Strukturen, in denen Du die Daten speicherst um diese dann auszuwerten.
b) Du merkst Dir nur die Informationen, die wichtig sind. Das könnte jetzt also sowas sein wie:
- neue Variablen vor Schleife, die speichern: Aktuell höchste Summe und ggf. aktuell gewinnender Spieler.
- In der Schleife kannst Du dann diese Ausgabe machen. Wenn v > hoechsteSumme ist, dann hoechsteSumme = v und gewinnenderSpieler = player.

Dann kannst Du nach der Schleife Ausgeben: gewonnen hat <gewinnenderSpieler> mit <hoechsteSumme>. (evtl. prüfen, ob dies überhaupt gesetzt wurde. Bei BlackJack hatten evtl. alle > 21 und keiner hat gewonnen .. bzw. die Bank als letzter "Spieler" spielt nur eine Karte und hat dann mit der Karte gewonnen ...
 
J

Javlipse

Also welche Daten du wie speicherst, ist doch dir überlassen.

Wenn Du also jetzt feststellen solltest, dass Du die Daten noch brauchen kannst, dann merkst Du diese einfach. Das ist ja relativ problemlos.

Daher sehe ich zwei Möglichkeiten:
a) Du schaffst dir Strukturen, in denen Du die Daten speicherst um diese dann auszuwerten.
b) Du merkst Dir nur die Informationen, die wichtig sind. Das könnte jetzt also sowas sein wie:
- neue Variablen vor Schleife, die speichern: Aktuell höchste Summe und ggf. aktuell gewinnender Spieler.
- In der Schleife kannst Du dann diese Ausgabe machen. Wenn v > hoechsteSumme ist, dann hoechsteSumme = v und gewinnenderSpieler = player.

Dann kannst Du nach der Schleife Ausgeben: gewonnen hat <gewinnenderSpieler> mit <hoechsteSumme>. (evtl. prüfen, ob dies überhaupt gesetzt wurde. Bei BlackJack hatten evtl. alle > 21 und keiner hat gewonnen .. bzw. die Bank als letzter "Spieler" spielt nur eine Karte und hat dann mit der Karte gewonnen ...


Jaa, genau das was in b steht ist mein Ziel, jedoch weiß ich nicht, wie ich das Codetechnisch umsetzte, dass hoechsteSumme immer zur höchsten Summe überschrieben wird....
Wenn alle über 21 haben kommt "Everybody Lost", damit brauche ich keine Bank
 
T

temi

Hast du Arrays schon kennengelernt?

Dann wäre z.B. folgendes sinnvoll (Variante a)
Java:
int[] summeSpieler = new int[anzahlSpieler]; // Array zum Speichern der Summe jedes Spielers

//...

summeSpieler[aktuellerSpieler - 1] += geradeGezogeneKarte; // Beachte, dass der erste Index im Array 0 ist
 
Thema: 

Zahlen Abstand zur Null bestimmen

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben