Java – die neusten Beiträge

Verkettete Listen in Java CD?

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.LinkedList;
import java.util.Random;

public class PlaylistReader {
    public static void main(String[] args) {
        LinkedList<Titel> playlist = new LinkedList<Titel>();
        BufferedReader br = null;
        
        try {
            br = new BufferedReader(new FileReader("titel.txt"));
            String name = br.readLine(); // Name der CD aus erster Zeile
            String line = "";
            while ((line = br.readLine()) != null) {
                String[] parts = line.split(";");
                int cdNr = Integer.parseInt(parts[0].replaceAll("\\D+", ""));
                int trackNr = Integer.parseInt(parts[1]);
                String interpret = parts[2];
                String title = parts[4];
                String duration = parts[5];
                
                Titel t = new Titel(cdNr, trackNr, interpret, name, title, duration);
                playlist.add(t);
            }
            br.close();
            Random rand = new Random();
            int index = rand.nextInt(playlist.size());
            Titel zufallstitel = playlist.get(index);
            System.out.println(zufallstitel.getName());
            System.out.println("CD " + zufallstitel.getCdNr());
            System.out.println("Titel Nr.: " + zufallstitel.getTrackNr());
            System.out.println("Interpret: " + zufallstitel.getInterpret());
             System.out.println("Titel: " + zufallstitel.getTitle());
            System.out.println("Spielzeit: " + zufallstitel.getDuration());
        } catch (Exception e) {
            System.out.println("Fehler beim Einlesen der Datei: " + e.getMessage());
        }
    }
}

public class Titel {
    private int cdNr;
    private String duration;
    private String interpret;
    private String name;
    private String title;
    private int trackNr;

    public Titel(int cdNr, int trackNr, String interpret, String name, String title, String duration) {
        this.cdNr = cdNr;
        this.trackNr = trackNr;
        this.interpret = interpret;
        this.name = name;
        this.title = title;
        this.duration = duration;
    }

    public int getCdNr() {
        return cdNr;
    }
    public void setCdNr(int cdNr) {
        this.cdNr = cdNr;
    }
    
    public String getDuration() {
        return duration;
    }
    
    public void setDuration(String duration) {
        this.duration = duration;
    }
    
    public String getInterpret() {
        return interpret;
    }

    public void 
        setInterpret(String interpret) {
        this.interpret = interpret;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
   
    public int getTrackNr() {
        return trackNr;
    }

    public void setTrackNr(int trackNr) {
        this.trackNr = trackNr;
    }
}
Java, Programmiersprache

Greenfoot/Schiffe-versenken: Wieso schießt der Gegner mehrmals?

Hey, bei meinem Java-Code für Greenfoot spielt man selbst gegen den Computer, der, nachdem man selbst geschoßen hat, auch einen zufälligen Schuss setzt.

Der Gegner schießt momentan allerdings mehrmals. Hat jemand eine Idee, woran das liegt? 🙂

import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot und MouseInfo)
import java.util.*;

/**
 * Ergänzen Sie hier eine Beschreibung für die Klasse Schiff.
 * 
 * @author (Ihr Name) 
 * @version (eine Versionsnummer oder ein Datum)
 */
public class Schiff extends Actor {
  public Schiff(String image) {
    setImage(image);
  }

  /**
   * Act - tut, was auch immer Schiff tun will. Diese Methode wird aufgerufen, 
   * sobald der 'Act' oder 'Run' Button in der Umgebung angeklickt werden. 
   */
  public void act() {
    mausKlick();
  }

  public void mausKlick() {
    if (Greenfoot.mouseClicked(this)) {
      int xPos = Greenfoot.getMouseInfo().getX();
      int yPos = Greenfoot.getMouseInfo().getY();
      ((Schiffeversenken)this.getWorld()).addObject(new Treffer(), xPos, yPos);
    }
    else if (Greenfoot.mouseClicked(((Schiffeversenken)this.getWorld()).rechts)) {
      int xPosi = Greenfoot.getMouseInfo().getX();
      int yPosi = Greenfoot.getMouseInfo().getY();
      ((Schiffeversenken)this.getWorld()).addObject(new KeinTreffer(), xPosi, yPosi);
      gegner();
    }
  }

  public void gegner() {
    int[] xKoordinate = new int[7];
    int[] yKoordinate = new int[7];
    int x = 0;

    for (int i = 67; i < 326; i = i + 43) {
      xKoordinate[x] = i;
      x++;
    }

    int y = 0;

    for (int i = 154; i < 398; i = i + 40) {
      yKoordinate[y] = i;
      y++;
    }

    Random random = new Random();
    int xIndex = random.nextInt(7);
    int yIndex = random.nextInt(7);
    int zufallx = xKoordinate[xIndex];
    int zufally = yKoordinate[yIndex];
    List<Schiff> schiffe = getWorld().getObjectsAt(zufallx, zufally, Schiff.class);

    if (!schiffe.isEmpty()) // Wenn ein Schiff gefunden wurde
    {
      ((Schiffeversenken)this.getWorld()).addObject(new Treffer(), zufallx, zufally); // Füge ein Treffer-Objekt hinzu
    }
    else // Wenn kein Schiff gefunden wurde
    {
      ((Schiffeversenken)this.getWorld()).addObject(new KeinTreffer(), zufallx, zufally); // Füge ein NichtTreffer-Objekt hinzu
    }
  }
}
programmieren, Java, Code, Programmiersprache, Greenfoot

Ist dieses Struktogramm passend für mein Merge-Sort Code?

Ist das folgende Struktogramm, welches ich erstellt habe, passend zu meinem Java Merge-Sort Code oder muss ich noch was nachbessern?

Code:

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

public class MergeSortWithMetrics {
  // Zähler für Sortierschritte
  static long comparisons = 0;
  static long assignments = 0;

  public static void main(String[] args) {
    // Konfiguration: Array-Größe und Zahlbereich
    int arraySize = 10000; // Größe des Arrays
    int numberRange = 214748647; // Bereich der Zufallszahlen (0 bis numberRange)
    boolean ArrayAusgebenAn = false;
    boolean StatistikenAn = true;
    
    // Zufälliges Array erstellen
    int[] array = generateRandomArray(arraySize, numberRange);
    if (ArrayAusgebenAn){
      System.out.println("Unsortiertes Array:");
      System.out.println(Arrays.toString(array));
    }
    
    // Zeitmessung starten
    long startTime = System.currentTimeMillis();
    // MergeSort aufrufen
    int[] sortedArray = mergeSort(array);
    // Zeitmessung beenden
    long endTime = System.currentTimeMillis();
    // Sortiertes Array ausgeben
    if (ArrayAusgebenAn){
    System.out.println("Sortiertes Array:");
    System.out.println(Arrays.toString(sortedArray));
    }
    
    // Statistiken ausgeben
    if (StatistikenAn){
    System.out.println("Sortierschritte:");
    System.out.println("Vergleiche: " + comparisons);
    System.out.println("Zuweisungen: " + assignments);
    System.out.println("Zeitmessung: " + (endTime - startTime) + " ms");
    }
    
  }

  // Funktion, um ein zufälliges Array zu generieren
  public static int[] generateRandomArray(int size, int range) {
    Random random = new Random();
    int[] array = new int[size];
    for (int i = 0; i < size; i++) {
      array[i] = random.nextInt(range);
    }
    return array;
  }

  // MergeSort-Algorithmus
  public static int[] mergeSort(int[] array) {
    if (array.length <= 1) {
      return array;
    }

    // Array in zwei Hälften teilen
    int mid = array.length / 2;
    int[] left = Arrays.copyOfRange(array, 0, mid);
    int[] right = Arrays.copyOfRange(array, mid, array.length);

    // Rekursive Sortierung der Hälften
    left = mergeSort(left);
    right = mergeSort(right);
    // Zusammenfügen der sortierten Hälften
    return merge(left, right);
  }

  // Merge-Funktion: Zwei sortierte Arrays zusammenfügen
  public static int[] merge(int[] left, int[] right) {
    int[] merged = new int[left.length + right.length];
    int i = 0, j = 0, k = 0;

    // Elemente vergleichen und in das neue Array einfügen
    while (i < left.length && j < right.length) {
      comparisons++;
      if (left[i] <= right[j]) {
        merged[k++] = left[i++];
      } else {
        merged[k++] = right[j++];
      }
      assignments++;
    }

    // Restliche Elemente hinzufügen
    while (i < left.length) {
      merged[k++] = left[i++];
      assignments++;
    }
    while (j < right.length) {
      merged[k++] = right[j++];
      assignments++;
    }
    return merged;
  }
}

Bild zum Beitrag
Java, Array, Algorithmus, Struktogramm

Warum wird JButton in Java nicht angezeigt?

Ich programmiere Gerade ein Java Projekt und bin auf das Problem gestoßen das der JButton im secountPanel nicht angezeigt wird.

Das ist mein Code:

package com.testProjekte;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class PrimzahlenRechnerMitGUI {
    static JButton backButton = new JButton("Zurück");

    public static void main(String[] args) {
        loadGUI();
    }

    public static void loadGUI() {
        JFrame mainFrame = new JFrame("Primzahl Rechner");
        mainFrame.setResizable(false);
        mainFrame.setSize(450,300);
        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        mainFrame.setLocationRelativeTo(null);

        JPanel mainPanel = new JPanel(new GridBagLayout());
        JPanel secountPanel = new JPanel(new GridBagLayout());
        JPanel thirtPanel = new JPanel(new GridBagLayout());

        GridBagConstraints gbc = new GridBagConstraints();
        gbc.insets = new Insets(5, 5, 5, 5);

        CardLayout cardLayout = new CardLayout();
        JPanel cardPanel = new JPanel(cardLayout);

        //main Panel Start
        JButton chooseRange = new JButton("Bereich Eingeben");
        chooseRange.setPreferredSize(new Dimension(chooseRange.getPreferredSize().width + 20, 30));
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.anchor = GridBagConstraints.NORTHWEST;
        mainPanel.add(chooseRange, gbc);


        JButton chooseNumber = new JButton("Nummer eingeben");
        chooseNumber.setPreferredSize(new Dimension(chooseNumber.getPreferredSize().width + 20, 30));
        gbc.gridx = 1;
        gbc.gridy = 0;
        gbc.anchor = GridBagConstraints.EAST;
        mainPanel.add(chooseNumber, gbc);

        //main Panel end


        //secount Panel Start
        backButton.setPreferredSize(new Dimension(100, 30));
        backButton.setBackground(Color.RED);
        JLabel reangeText = new JLabel("Gib einen Bereich ein");

        JTextField startRange = new JTextField();
        startRange.setPreferredSize(new Dimension(100,30));

        JTextField endRange = new JTextField();
        endRange.setPreferredSize(new Dimension(100,30));

        JButton checkRangeButton = new JButton("Prüfen");

        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.anchor = GridBagConstraints.NORTHWEST;
        gbc.fill = GridBagConstraints.NONE;
        secountPanel.add(backButton, gbc);

        gbc.gridx = 0;
        gbc.gridy = 1;
        secountPanel.add(reangeText, gbc);

        gbc.gridx = 0;
        gbc.gridy = 3;
        secountPanel.add(startRange, gbc);

        gbc.gridx = 0;
        gbc.gridy = 4;
        secountPanel.add(endRange, gbc);

        gbc.gridx = 0;
        gbc.gridy = 5;
        secountPanel.add(checkRangeButton, gbc);
        //secount Panel end


        //thirt Panel start
        backButton.setPreferredSize(new Dimension(100, 30));
        backButton.setBackground(Color.RED);
        JLabel numberText = new JLabel("Gib eine Zahl ein");

        JButton checkNumberButton = new JButton("Prüfen");

        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.anchor = GridBagConstraints.WEST;
        thirtPanel.add(backButton, gbc);


        thirtPanel.add(numberText);
        thirtPanel.add(checkNumberButton);
        //thirt Panel end

        cardPanel.add(mainPanel, "MainPanel");
        cardPanel.add(secountPanel, "SecountPanel");
        cardPanel.add(thirtPanel, "ThirtPanel");

        chooseRange.addActionListener(e -> cardLayout.show(cardPanel, "SecountPanel"));
        chooseNumber.addActionListener(e -> cardLayout.show(cardPanel, "ThirtPanel"));
        backButton.addActionListener(e -> cardLayout.show(cardPanel, "MainPanel"));

        mainFrame.add(cardPanel);
        mainFrame.setVisible(true);
    }
}
App, Java, Code, Eclipse, Programmiersprache, Swing, Java Swing

Meistgelesene Beiträge zum Thema Java