Java – die besten Beiträge

Java: Wie kann ich eine Route mit beliebig vielen Zwischenhalten einlesen und im Array ausgeben?

Hallo zusammen.

Es soll ein Programmcode geschrieben werden, bei dem ein Anzahl Zwischenstopps, Start- und Endpunkt angegeben werden müssen. Alle Eingaben müssen im Array gespeichert und später wiedergegeben werden.

Wichtig ist:

  • Erster Wert ist mein Startpunkt, bspw. Köln.
  • Der letzte Arraywert ist mein Endpunkt, bspw. Berlin.

Irgendwas in meinem Code ist leider falsch. Es müssen definitiv zwei Schleifen vorhanden sein.

Könnt ihr mir bei der Korrektur meines Codes bitte helfen?

Besten Dank!

import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    // Diesen Teil nicht anpassen
    Scanner keyScan = new Scanner(System.in);
    System.out.print("Anzahl Zwischenhalte: ");
    int anzahlVias = keyScan.nextInt();
    keyScan.nextLine();
    String [] strecke = new String[anzahlVias + 2];

    System.out.print("Reise von: ");
    // TODO: Start einlesen und im Array strecke speichern
    strecke[0] = keyScan.nextLine();

    System.out.print("Reise nach: ");
    // TODO: Ziel einlesen und im Array strecke speichern
    strecke[strecke.length - 1] = keyScan.nextLine();

    // TODO: Vias einlesen und im Array strecke speichern
    int counter = 0;

    while (counter < strecke.length) {
      for (int i = 0; i < strecke.length; i++) {
        for (int y = 0; y < 3; y++) {
          System.out.print("Via: ");
          strecke[1] = keyScan.nextLine();
          counter++;
        }

        System.out.println("Deine Route: "+ strecke[counter]);
      }

      // TODO: Route ausgeben
    }

    keyScan.close();
  }
}
Java, Array, Programmiersprache

Java ArrayList BUG?

Ich habe eine Klasse "AndererTest", "xyPosition" und eine Klasse "Testerklasse".In der Klasse "AndererTest" wird eine ArrayList namens "abzufragendeKoordinaten" erstellt und außerdem auch ein mehrdimensionales Array "stringarray", welches Strings speichert. Ich möchte die Inhalte des "stringarray" ausgeben, aber in zufälliger Reihenfolge. Voher habe ich in der Klasse "TesterKlasse" - welche quasi hier die Main - Klasse mit der main methode sein soll - strings dem "stringarray" zugeordnet:

Klasse TesterKlasse:

Ausgegeben soll das "stringarray" mit der Methode arrayDurchlaufen(). Ausgegeben wird aber immer nur:

anstatt z.B.:

stringarray[2] [0] = f;
stringarray[1] [1] = "d";
stringarray[0] [2] = "b";
stringarray[2] [2] = "h";
//...

Hier ist der Code zur kritischen Klasse "AndererTest":

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Random;

public class AndererTest {
static Random random = new Random();
    static xyPosition nullnull = new xyPosition(0,0);
    static xyPosition nulleins = new xyPosition(0,1);
    static xyPosition nullzwei = new xyPosition(0,2);
    static xyPosition einsnull = new xyPosition(1,0);
    static xyPosition einseins = new xyPosition(1, 1);
    static xyPosition einszwei = new xyPosition(1, 2);
    static xyPosition zweinull = new xyPosition(2, 0);
    static xyPosition zweieins = new xyPosition(2, 1);
    static xyPosition zweizwei = new xyPosition(2, 2);
    static ArrayList<xyPosition> abzufragendeKoordinaten = new ArrayList<>(Arrays.asList( nullnull, nulleins, nullzwei, einsnull, einseins, einszwei, zweinull, zweieins, zweizwei));

static String[] [] stringarray = new String[3] [3];
static int zufälligeMöglicheyPosition;
static int zufälligeMöglichexPosition;

public int getZufälligeMöglicheyPosition() {
    return zufälligeMöglicheyPosition;
}

public int getZufälligeMöglichexPosition() {
    return zufälligeMöglichexPosition;
}


public static void durchlaufeArray() {
    for (int i = 0; i < 9; i++) {
    int grenzeminuseins = abzufragendeKoordinaten.size() - 1;
   int zufälligerindex = random.nextInt(abzufragendeKoordinaten.size() - 1) + 0;

zufälligeMöglicheyPosition = abzufragendeKoordinaten.get(zufälligerindex).gety();
    
zufälligeMöglichexPosition = abzufragendeKoordinaten.get(zufälligerindex).getx();
abzufragendeKoordinaten.remove(zufälligerindex);

System.out.println("stringarray[" + zufälligeMöglicheyPosition + "] [" + zufälligeMöglichexPosition + "] = " + stringarray[zufälligeMöglicheyPosition] [zufälligeMöglichexPosition]);
 
}
}
}

Der Code zur Klasse xyPosition ist einfach und hier liegt der Fehler bestimmt nicht drin:

public class xyPosition {

static int x;
static int y;
public static Object xyPosition;
    
public xyPosition(int pX, int pY) {
x = pX;
y = pY;
    }

public int getx() { return x; }
public int gety() { return y; }
}

Bilder habe ich hier nur wegen der "nicht mehr genug Zeichen" - Funktion verw.
Biite helft mir, ich sitze schon seit 2 Tagen vor diesem Bug🤬

Bild zum Beitrag
Software, programmieren, Java, Informatik, Programmiersprache, Softwareentwicklung

Java Referenzdatentypen?

Mir ist ein bestimmter Aspekt, und zwar der Sinn einer Referenz noch nciht ganz klar geworden:

Primitiver Datentyp:

int zahl = 8;

Hier wird ja mit der Deklarierung der Variable zahl eine Adresse für einen gerade freien Speicherplatz erzeugt und in diesem Speicherort der Wert der Variable, 8, abgelegt.
So wie in meiner Zeichnung:

Referenzdatentyp:

Mensch mensch1 = new Mensch(16); //16 = pAlter

Hier wird auch mit der Variable einem gerade freien Speicherplatz eine Adresse zugeordnet. Dann wird in dem freien Speicherplatz, glaube ich, nichts (kein Variablen Wert (new Mensch(16) ) ) abgelegt, sondern nur eine komplett andere Adresse. Folgt man dieser Adresse und guckt in dem durch sie verwiesenen Speicherplatz nach, findet man da unseren Variablen - Wert = new Mensch(16).
Wie in meiner Zeichnung hier:

Was ich jetzt nicht so richtig verstehe ist, warum wird unser Variablenwert (unser neues menschen - objekt) unter einer anderen Adresse abgelegt, als der, der der Variable "mensch1"eigentlich zugeordnet wurde? Sprich: Wozu eine Referenz auf eine andere Adresse (ich glaube immer Referenz auf eine andere Adresse, vielleicht ist es aber auch in WIrklichkeit eine Referenz auf das neue Menschen Objekt?)? Warum nicht so wie beim primitiven Datentypen machen, also so wie bei meiner Zeichnung hier unten?:

omg, diese logik - aber es macht mir Spaß, zu programmieren und ich möchte alles unbedingt verstehen !😊

Bild zum Beitrag
Software, Schule, IT, programmieren, Java, Informatik, Programmiersprache, Softwareentwicklung

Informatik "Rätsel"?

Programmiersprache: JavaWie stellt man bei der Datenstruktur Queue Objekte nicht hinten sondern vorne an? Also vom Code her.Kontext/Hintergrund von dieser Frage: Ich habe eine PriorityQueue. Doch dann soll plötzlich ein neues Objekt hinzugefügt werden, welches eine höhere Priorität als alle bereits in der PriorityQueue vorhandenen Objekte hat. (Da das hinzuzufügende Objekt ja die höchste Priorität hätte, müsste es ganz vorne in der PriorityQueue stehen).
Natürlich habe ich mir, bevor ich die Frage hier auf GF stelle, selbst nachgedacht, wie man das Problem lösen könnte. Bis jetzt ist mir aber nur

first = new QueueInhalt(pObject, pPriority);

eingefallen. Ich komme beim setNext(), also wenn der neue, eingefügte, Knoten QueueInhalt seinen Next - Link auf den ursprünglich an derselben Stelle (ganz vorne) gewesenen Knoten QueueInhalt setzt. (Wenn man ein Objekt hinten anstellt, schön nach FIFO halt, hätte ich kein Problem mit dem Setzen der next - links und first - links. Aber vorne anstellen? Keine Ahnung, wie das gehen soll.)
Danke und ein "Hilfreich" schonmal für eure Antworten😀

public void add(ContentTypePerson pObject, int pPriority) {
    QueueInhalt inhaltsobjekt = new QueueInhalt(pObject, pPriority);
    if (first == null) { //Wenn kein Objekt in der Queue vorhanden ist
    first = new QueueInhalt(pObject, pPriority);
    } else if (pPriority > first.getPriority()) {
    first = new QueueInhalt(pObject, pPriority);
//...?    
    }
}
Software, Schule, IT, programmieren, Java, Datenstrukturen, Informatik, Softwareentwicklung, Algorithmen und Datenstrukturen

Meistgelesene Beiträge zum Thema Java