Ausführen durch einen Tastendruck?

Hallo,

ich bin neu in Java und versuche jetzt, mein erstes kleines Spiel zu programmieren. Dafür muss sich aber das zu steuernde Objekt, sobald die Taste 'w' 's' 'a' oder 'd' gedrückt wird, solange in die jeweilige Richtung bewegen, bis eine andere Taste gedrückt wird. Allerdings kenne ich nur die Bedingung 'view.keyPressed()' oder '!view.keyPressed()'. Dennoch geht das mit diesen Bedingungen natürlich nicht. Könnte mir jemand helfen.

LG

PS: Hier der Code den ich bisher geschrieben habe:

import sas.*;
import java.awt.Color;

class SnakeTest {
  View view;
  Rectangle Hintergrund;
  Rectangle B1;
  Rectangle B2;
  Rectangle B3;
  Rectangle B4;
  Circle Points;
  Rectangle Snake;

  SnakeTest() {
    int x = Tools.randomNumber(70, 730);
    int y = Tools.randomNumber(70, 730); // Randomizer
    view = new View(800, 800);
    Hintergrund = new Rectangle(0, 0, 800, 800, new Color(0, 0, 153));
    B1 = new Rectangle(0, 0, 800, 50, new Color(153, 153, 153));
    B2 = new Rectangle(0, 0, 50, 800, new Color(153, 153, 153));
    B3 = new Rectangle(0, 750, 800, 50, new Color(153, 153, 153));
    B4 = new Rectangle(750, 0, 50, 800, new Color(153, 153, 153));
    Points = new Circle(x, y, 10, new Color(204, 0, 0));
    Snake = new Rectangle(360, 360, 40, 40, new Color(255, 102, 0)); // Erstellung

    while (!view.keyPressed('q')) {
      Snake.move(0, -2);

      if (view.keyPressed('w')) {
        Snake.move(0, -2);
      }

      if (view.keyPressed('s')) {
        Snake.move(0, 2);
      }

      if (view.keyPressed('d')) {
        Snake.move(2, 0);
      }

      if (view.keyPressed('a')) {
        Snake.move(-2, 0);
      } // Steuerung

      if (B1.intersects(Snake)) {
        new Text(380, 10, "ENDE", Color.RED);
        view.wait(400);
        System.exit(0);
      }

      if (B2.intersects(Snake)) {
        new Text(380, 10, "ENDE", Color.RED);
        view.wait(400);
        System.exit(0);
      }

      if (B3.intersects(Snake)) {
        new Text(380, 10, "ENDE", Color.RED);
        view.wait(400);
        System.exit(0);
      }

      if (B4.intersects(Snake)) {
        new Text(380, 10, "ENDE", Color.RED);
        view.wait(400);
        System.exit(0);
      } // Beendigung bei Fehler

      view.wait(10);
    } // Spielschleife

    new Text(380, 10, "ENDE", Color.RED);
    view.wait(400);
    System.exit(0); // Beendigung bei Tastendruck
  }
}
Computer, Schule, programmieren, Java
Java Zufallszahlen ohne Zurücklegen?

Für ein Teil eines größeren Projekts muss in in Java eine bestimmte Menge an Zufallszahlen erstellen, wobei sich keine doppeln darf.

Zuerst erstelle ich das neue Objekt "zufallszahl" der Klasse "Random".

In der äußeren For-Schleife wird dann für den Index "a" des Arrays "zufallsPosition[]" eine Zufallszahl erzeugt.

Die innere For-Schleife startet ebenfalls beim Anfangswert und läuft solange die Zählvariable "b" kleiner als die Summe aus dem aktuellen "a" und dem Startwert ist. Somit werden alle Indizes durchlaufen, die durch die vorherigen Durchgänge der äußeren For-Schleife schon eine Zufallszahl besitzen.

In der While Schleife wird dann geschaut, ob der Wert des Index "a" (also der oben erzeugten Zufallszahl) dem jeweiligen Wert des Index "b", also den vorherigen Zufallszahlen entspricht. Ist dies der Fall, bekommt das Array an der Stelle "a" eine neue Zufallszahl zugewiesen. Dies passiert (zumindest theoretisch) solange die aktuelle Zufallszahl "a" der aus der inneren For-Schleife "b" entspircht.

Es würde also bedeuten, dass er immer eine neue Zufallszahl erstellt, wenn diese schon im Array vorhanden ist.

Leider funktioniert das nicht und ich weiß selbst nach längerem Überlegen nicht warum :-(

Dann habe ich mal testweise das "==" in der While-Schleife durch ein "!=" ersetzt, d.h. es wird immer eine neue Zufallszahl erstellt bis sie der vorherigen entspricht, was überraschender Weise funktioniert (beispielsweise haben dann alle Indizes den Wert 4).

Code:

"==" in der While Schleife (so, wie es im Code steht)

"!=" in der While Schleife, funktioniert wie gewünscht.

Vielen Dank für Eure Hilfe!

Bild zum Beitrag
Computer, programmieren, Java, Informatik
Java - Arrays, Getter und Setter?

Und zwar muss ich in einem Programm zwei Pizzen anlegen, mit jeweils zwei verschiedenen Preisen und Durchmessern: Als Beispiel: sagen wir mal Pizza 0 ist eine Pizza Margherita mit 26cm Durchmesser für 4€ und mit 30cm Durchmesser für 6€, und Pizza 1 ist eine Pizza Salami mit 30cm für 5€ und mit 32cm für 7€.

Das ganze soll über mehrere Klassen und mit Konstruktoren/Gettern und Settern laufen. Ist nicht weiter schwer, jedoch habe ich da ein Problem: Für die Pizzen an sich habe ich ein Array angelegt mit der Länge 2. Für die Durchmesser und Preise jeweils ein Array mit 4 Stellen. Die ersten beiden Stellen dieser Arrays gehören Pizza 0, die letzten beiden Pizza 1.

Um die Werte zu speichern habe ich ganz einfach über den Konstruktor den gesamten Array mit den Durchmessern/Preisen übergeben. Der Durchmesser Array hätte dann in diesem Fall folgende Werte: 26, 28, 30, 32.

Um die Werte auszugeben, habe ich dann sowas geschrieben wie pizza[0].getDurchmesser(0 und 1) und pizza[1].getDurchmesser(2 und 3). Die Ziffern in den Klammern sind die jeweilige Stelle im Durchmesser-/Preis Array.

Mein Problem ist nun, dass das Array, das Durchmesser/Preise speichert, 4 Stellen lang ist. Man könnte problemlos als Ausgabe pizza[0].getDurchmesser(2) schreiben, womit die Margherita einen Durchmesser von 30cm hätte, obwohl sie nur 26 oder 28 haben darf. Ich frage mich, ob mein Lösungsweg dennoch so passt und man einfach falsche Ausgaben im Code vermeiden soll, oder ob es eine bessere Lösung gibt, mit der sowas nicht vorkommen kann. Ein anderer Weg fällt mir allerdings leider nicht ein (bin nicht wirklich der erfahrenste Programmierer).

Ich hoffe, dass mir jemand helfen kann!

Computer, programmieren, Java, Informatik
Java- "Verbindungsaufbau abgelehnt"?

Hallo, hier der Code erstmal :

package EmailSending;

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class SendEmail555
{
    public static void main(String [] args){
        String to = "z";//change accordingly
        String from = "y"; //change accordingly
        String host = "x";//or IP address

        //Get the session object
        Properties properties = System.getProperties();
        properties.setProperty("mail.smtp.host", host);
        Session session = Session.getDefaultInstance(properties);

        //compose the message
        try{
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(from));
            message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));
            message.setSubject("Ping");
            message.setText("Hello, this is example of sending email  ");

            // Send message
            Transport.send(message);
            System.out.println("message sent successfully....");

        }catch (MessagingException mex) {mex.printStackTrace();}
    }
}

Und dann kommt diese Fehlermeldung :

com.sun.mail.util.MailConnectException: Couldn't connect to host, port: xyz; timeout -1;
 nested exception is:
   java.net.ConnectException: Verbindungsaufbau abgelehnt
   at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2209)
   at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:740)
   at javax.mail.Service.connect(Service.java:366)
   at javax.mail.Service.connect(Service.java:246)
   at javax.mail.Service.connect(Service.java:195)
   at javax.mail.Transport.send0(Transport.java:254)
   at javax.mail.Transport.send(Transport.java:124)
   at EmailSending.SendEmail555.main(SendEmail555.java:29)
Caused by: java.net.ConnectException: Verbindungsaufbau abgelehnt
   at java.base/sun.nio.ch.Net.connect0(Native Method)
   at java.base/sun.nio.ch.Net.connect(Net.java:579)
   at java.base/sun.nio.ch.Net.connect(Net.java:568)
   at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:588)
   at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327)
   at java.base/java.net.Socket.connect(Socket.java:633)
   at java.base/java.net.Socket.connect(Socket.java:583)
   at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:359)
   at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:238)
   at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2175)
   ... 7 more

Was habe ich falsch gemacht ? Immer kommt dieser Fehler, der Verbindungsaufbau würde abgelehnt werden...

PC, Computer, IT, programmieren, Java, Informatik
Was ist Falsch, Java-Swing?

Hallo,

Möchte, dass wenn man auf "Schreiben" klickt zum ActionListener kommt und dann auf einen neuen JFrame seinen Text schreiben kann, aber irgendwie geht das nicht, funktioniert das mit den Parametern nicht ?

  1. Klasse (beinhaltet main)
package Swing;

import javax.swing.*;

public class Menubar {

    static JMenuItem item1, item2, item3; // 2 Items für Menü

    public Menubar() {
        String text;
        JFrame frame = new  JFrame("Fenstertext");
        frame.setSize(800, 600);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setResizable(false);
        frame.setLocationRelativeTo(null); // Mitte
        frame.setLayout(null);
        frame.requestFocus();

        JMenuBar bar = new JMenuBar();
        JMenu menu = new JMenu("Datei");// Bekommt Items, Beispiel auf File klicken ist Menu,namens "Datei" darunter dann Item

        item1 = new JMenuItem("Neu"); // 1. Itemname
        item1.addActionListener(new MenuHandler());
        item2 = new JMenuItem("Beenden");
        item2.addActionListener(new MenuHandler());
        item3 = new JMenuItem("Schreiben");
        item3.addActionListener(new MenuHandler());


        menu.add(item1);
        menu.addSeparator();  // Strich für Abtrennung (organisierter)
        menu.add(item2);
        menu.addSeparator();
        menu.add(item3);

        bar.add(menu); // Menu zu Bar hinzufügen
        frame.setJMenuBar(bar); // Setzen, da nur eine bar...
        frame.setVisible(true);

    }

    public static void main(String[] args) {

        new Menubar();

    }

}

2 Klasse :

package Swing;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.Scanner;

public class MenuHandler implements ActionListener {


    @Override
    public void actionPerformed(ActionEvent e) {
// WAS SOLL PASSIEREN ?

        if (e.getSource() == Menubar.item1) { // Ein bestimmtes Item ?
            System.out.println("Neu...");
        } else if (e.getSource() == Menubar.item2) {
            System.exit(0); // Programm beenden
        } else if (e.getSource() == Menubar.item3) {
            JFrame neuer = new JFrame();
            File file1 = new File("src/textSpeichern.txt");
            neuer.setSize(800, 600);
            neuer.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            neuer.setResizable(false);
            neuer.setLocationRelativeTo(null); // Mitte
            neuer.setLayout(null);
            neuer.requestFocus();

            neuer.setVisible(true);

            System.out.println("Was möchtest du schreiben?");
            Scanner scanner = new Scanner(System.in);
            String as = scanner.next();
            JPanel panel = new JPanel();
            JLabel label = new JLabel(as);
            panel.add(label);
            neuer.add(panel);
        }

    }
}

Warum geht das nicht ???

Danke für die Antworten bzw. die Hilfe ! :)

Computer, programmieren, Java, Informatik
Verkapselung von Klasse?

Hallo Coder-Freunde,

meine Freundin hat in einer Übung für die Uni folgende Java-Aufgabe zu lösen:

// ähnlich java.io.File.listFiles(), gibt aber nicht ein Array sondern ein Filez-Objekt zurück, das die File-Objekte des Directory als List<File> verkapselt

public static Filez create(File directory);

Folgendes haben wir bisher gemacht:

class Filez {

public Filez() {

this.list = new ArrayList<File>();

}

public static Filez create(File directory) { // File directory ist ein Objekt mit dem Pfad zum zu durchsuchenden Verzeichnis.

//List<File> list = new ArrayList<File>();

File[] filesAndDirs = directory.listFiles();

// Daten aus Array werden zu Liste hinzugefügt

for(int i = 0; i < filesAndDirs.length; i++) {

list.add(i, filesAndDirs[i]);

System.out.println(i + ": " + list.get(i));

}

return XXXXX; // Hier hängt's... wie soll eine Liste als Filez-Objekt zurückgegeben werden?

}

}

Mir persönlich erschließt sich die Formulierung "[... gibt ein] Filez-Objekt zurück, das die File-Objekte des Directory als List<File> verkapselt" nicht. Wie soll eine Methode als Returnwert ein Filez-Objekt vom Typ list zurückgeben?

Wir stehen hier auf dem Schlauch, bitte Hilfe!

UPDATE:

Antwort, falls jemand ein ähnliches Problem hat: Konstruktor erstellen!

public Filez() {} oder public Filez(List<File> attrList) { this.list = attrList; }

Return von create() ist dann das gesamte Objekt.

Computer, programmieren, Java, OOP Programmierung

Meistgelesene Beiträge zum Thema Java