Programmieraufgabe Hilfeee?

Hallo, ich habe hier eine Programmmieraufgabe, wo ich nicht richtig weiterkommme und hoffe ihr könnt mir da helfen!

Die Aufgabe lautet:

Es sollen drei Klassen geschrieben werden, die den Konzepten StudentTutorium und Sekretariat entsprechen. Implementiert:

  • Die Klasse Student mit folgenden Attributen: name, matrikelnummer.
  • Einen Konstruktor public Student( String name, int matrikel ) für die Klasse Student mit den entsprechenden Übergabeparametern zum Setzen der jeweiligen Attribute.
  • Eine Methode public void ausgeben() in der Klasse Student gibt die Eigenschaften eines Students auf dem Bildschirm aus.

Die Ausgabe muss wie folgt aussehen (die Fragezeichen stehen für die Eigenschaften):


Matrikel Nr.: ?, Name: ?
  • Die Klasse Tutorium mit den Attributen tutorraumNrfach und teilnehmer (dies soll ein Array von Studenten sein).
  • Einen Konstruktor public Tutorium( int kapazitaet, int raumNr, String tutor, String fach )kapazitaet bezeichnet die maximale Anzahl der Studenten in einem Tutorium. Bei der Erzeugung des Tutorium wird das teilnehmer Array mit Null-Referenzen gefüllt und bleibt so, solange keine Studenten aufgenommen wurden.
  • Eine Methode public void ausgeben() in der Klasse Tutorium. Gibt die Eigenschaften eines Tutoriums und eine Liste der teilnehmenden Studenten auf dem Bildschirm aus.

Die Ausgabe muss so aussehen (die Fragezeichen stehen für die Eigenschaften)

 
Tutorium ? bei ? in Raum ? Teilnehmer:
??
??(Hier kommen dann die Studierenden)
  • Die Klasse Sekretariat, zur Verwaltung von Tutorien. Darin sind folgende Methoden zu implementieren:
  1. public static boolean istVoll( Tutorium t ). Überprüft ob noch freie Plätze im Tutorium t vorhanden sind.
  2. public static boolean studentAufnehmen( Tutorium t, Student st ). Nimmt einen übergebenen Student st in dem Tutorium t auf, falls das möglich ist. Die Methode soll zurückgeben, ob die Aufnahme möglich war.

Meine Student class ist schonmal fertig

public class Student {

  String name;

  int matrikelnummer;

  public Student(String name, int matrikelnummer) {

    this.name = name;

    this.matrikelnummer = matrikelnummer;

  }

  public void ausgeben() {

    System.out.println("Matrikel Nr.: " + matrikelnummer + ", Name: " + name);

  }

  public static void main(String[] args) {

    // Erstelle eine Instanz von Student

    Student student = new Student("Leo", 3450);

    // Rufe die Methode ausgeben() auf

    student.ausgeben();

  }

}

Allerdings weiss ich nicht wie ich die anderen Klassen erstellen soll, weil die im Compiler nicht funktionieren, weil die mit der Student Class verbunden sein müssen.

Hat da jemand eine Ahnung wie das geht?

Java, Programmiersprache
Ist dieses Programm so richtig korrigiert?

Hallo, ich habe hier ein Programm, das ich korrigieren muss, das hab ich auch schon gemacht, das Problem liegt aber darin, dass mein Compiler als Ausgabe, diesen Text hat, was an sich auch richtig ist.

"Fips ist jetzt 6

Zusammengerechnet sind unsere Haustiere jetzt 8 Jahre alt

Der Weissbauchigel ist 2 Jahre alt und heisst Freddy. Er wiegt 0.016 kg."

Allerdings zeigt der Compiler, wo ich den für die Abgabe der Hausaufgabe reinschreiben muss, einen anderen Text und zwar.

"Fips ist jetzt 6

Zusammengerechnet sind unsere Haustiere jetzt 8 Jahre alt

Der Chinchilla ist ein Sauegetier und ist6 Jahre alt, heisst Fips. Sie wiegt 2.4 kg.

Der Weissbauchigel ist 2 Jahre alt und heißt Freddy. Er wiegt 0.016 kg."

Das heißt, dass was kursiv fett makiert ist, gehört da nicht hin. Weiß da einer warum ich 2 verschiedene Texte rausbekomme?

Den korrigierten Code findet ihr ganz unten!

Ich hoffe jemand kann mir helfen und bedanke mich im Voraus!

Momentan kompiliert dieses Programm nicht.

Ihre Aufgabe ist es eine neue Java Klasse zu schrieben, sodass die HaustierVerwaltung.java ohne Fehler läuft. 

Schreiben Sie dafür in das Antwortfeld eine passende neue Java Klasse. 

Hinweis: 

  • Die Klasse HaustierVerwaltung darf nicht verändert werden und nicht in das Antwortfeld geschrieben werden.

Hier ist der Inhalt der HaustierVerwaltung.java:

public class HaustierVerwaltung {
    public static void main(String[] args) {
        // deklariere zwei Variablen vom Typ Haustier
        Haustier chinchilla;
  	Haustier weissbauchigel;
        
        // erzeuge zwei Objekte der Klasse Haustier
        chinchilla = new Haustier("Fips", 5);
  	weissbauchigel = new Haustier("Freddy", 2);
  
        
        // weise einigen Attributen der zwei Objekte Werte zu
  	weissbauchigel.gewicht = 0.016;
  	chinchilla.gewicht = 2.4;
        
        // chinchilla wird ein Jahr aelter
        chinchilla.geburtstag();
  	System.out.println(chinchilla.name+" ist jetzt "+chinchilla.alter);
        System.out.println("Zusammengerechnet sind unsere Haustiere jetzt "+Haustier.alterGesamt+" Jahre alt");
        // Ausgabe der Attributwerte der Objekte
  	if(chinchilla.istSaeugetier){
   		System.out.println("Der Chinchilla ist ein Sauegetier und ist"+chinchilla.alter+" Jahre alt, heisst "+chinchilla.name+". Sie wiegt " + chinchilla.gewicht + " kg.");
  	}
        System.out.println("Der Weissbauchigel ist "+weissbauchigel.alter+" Jahre alt und heisst "+weissbauchigel.name+". Er wiegt " + weissbauchigel.gewicht + " kg.");
    }
}

Korrogierter Code:

public class Haustier {
  String name;
  int alter;
  double gewicht;
  boolean istSaeugetier;
  static int alterGesamt = 0;

  public Haustier(String name, int alter) {
    this.name = name;
    this.alter = alter;
    this.istSaeugetier = true;
    this.gewicht = 0.0;
    alterGesamt += alter;
  }

  public void geburtstag() {
    this.alter++;
    alterGesamt++;
  }

  public static void main(String[] args) {
    Haustier chinchilla;
    Haustier weissbauchigel;

    chinchilla = new Haustier("Fips", 5);
    weissbauchigel = new Haustier("Freddy", 2);

    weissbauchigel.gewicht = 0.016;
    chinchilla.gewicht = 2.4;

    chinchilla.geburtstag();
    System.out.println(chinchilla.name + " ist jetzt " + chinchilla.alter);
    System.out.println("Zusammengerechnet sind unsere Haustiere jetzt " + Haustier.alterGesamt + " Jahre alt");
    // Kommentiere die Zeilen aus, die den Chinchilla beschreiben
    /*
    if (chinchilla.istSaeugetier) {
      System.out.println("Der Chinchilla ist ein Säugetier und ist " + chinchilla.alter + " Jahre alt, heißt " + chinchilla.name + ". Er wiegt " + chinchilla.gewicht + " kg.");
    }
    */
    System.out.println("Der Weissbauchigel ist " + weissbauchigel.alter + " Jahre alt und heißt " + weissbauchigel.name + ". Er wiegt " + weissbauchigel.gewicht + " kg.");
  }
}
Java, Programmiersprache
BlueJ Methode für eine private Nachricht?

Hier ist der Code, ich brauche eine Methode mit der ich eine Nachricht an einen User an einen Server senden kann der nur dieser User sieht

public class EchoServer extends Server {

public EchoServer(int port) {

super(port);

System.out.println("Der DBG-ECHO-Server hat die IP " + getIP() + " und lauscht auf Port " + port + "!");

}

public void processNewConnection(String pClientIP, int pClientPort) {

System.out.println("Neue Verbindung von " + pClientIP + " : " + pClientPort + ".");

send(pClientIP, pClientPort, "Herzlich willkommen beim DBG-ECHO-Server, Quit um abzumelden, Everybody für Message an alle");

}

public void processMessage(String pClientIP, int pClientPort, String pMessage) {

if (pMessage.equals("Quit")) {

closeConnection(pClientIP, pClientPort);

}

if (pMessage.substring(0, 9).equals("Everybody")) {

sendToAll(pMessage);

}

System.out.println("Server hat Nachricht \"" + pMessage + "\" vom Client " + pClientIP + ":" + pClientPort + " empfangen.");

send(pClientIP, pClientPort, "Antwort vom DBG-ECHO-Server: Deine Nachricht lautete \"" + pMessage + "\".");

System.out.println("Server hat Nachricht \"" + pMessage + "\" an Client " + pClientIP + ":" + pClientPort + " zurückgesendet.");

//sendToAll(pMessage);

//closeConnection(pClientIP, pClientPort);

}

public void processClosingConnection(String pClientIP, int pClientPort) {

}

public void privateMessage(String pClientIP, int pClientPort, String pMessage) {

if (pMessage.substring(0, 9).equals(pClientIP)) {

System.out.println("User schrieb

send(pMessage);

}

}

public String getIP() {

try {

String ipAdresse = "" + InetAddress.getLocalHost();

String[] hostUndIP = ipAdresse.split("/");

String adressat = hostUndIP[0].trim();

ipAdresse = hostUndIP[1];

return ipAdresse;

}

catch (UnknownHostException e) {

e.printStackTrace();

Java, Code, Programmiersprache, Algorithmus
Ist das ein gutes Programm für String Suche in einer Datei (Java)?
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

public class StringSearchInFile {

    public static void main(String[] args) {
        String filePath = "text.txt"; // Pfad zur Textdatei
        String searchString = "gesuchterString"; // Der zu suchende String

        try {
            FileInputStream fis = new FileInputStream(filePath);
            InputStreamReader isr = new InputStreamReader(fis);
            BufferedReader br = new BufferedReader(isr);

            String line;
            int lineNumber = 1;
            boolean found = false;
            while ((line = br.readLine()) != null) {
                if (line.contains(searchString)) {
                    System.out.println("String gefunden in Zeile " + lineNumber + ": " + line);
                    found = true;
                    break; // Abbruch nach dem ersten Fund
                }
                lineNumber++;
            }

            if (!found) {
                System.out.println("String nicht gefunden.");
            }

            br.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Als Lösung für ein Übungsbeispiel. Es soll das erste Vorkommen eines Text in einer Datei gefunden werden.

Java, Code, Programmiersprache
Minecraft Server crasht beim Start?

Hi,

das hier steht im Log: "

PS F:\minecraft> java -Xmx8192M -Xms7168M -jar server-1.20.2.jar

Starting net.minecraft.server.Main

[12:16:51] [ServerMain/INFO]: Environment: Environment[accountsHost=https://api.mojang.com, sessionHost=https://sessionserver.mojang.com, servicesHost=https://api.minecraftservices.com, name=PROD]

[12:16:52] [ServerMain/INFO]: Loaded 7 recipes

[12:16:52] [ServerMain/INFO]: Loaded 1271 advancements

[12:16:52] [Server thread/INFO]: Starting minecraft server version 1.20.2

[12:16:52] [Server thread/INFO]: Loading properties

[12:16:52] [Server thread/INFO]: Default game type: SURVIVAL

[12:16:52] [Server thread/INFO]: Generating keypair

[12:16:52] [Server thread/INFO]: Starting Minecraft server on [Ip Andresse]

[12:16:52] [Server thread/INFO]: Using default channel type

[12:16:52] [Server thread/WARN]: **** FAILED TO BIND TO PORT!

[12:16:52] [Server thread/WARN]: The exception was: java.net.BindException: Cannot assign requested address: bind

[12:16:52] [Server thread/WARN]: Perhaps a server is already running on that port?

[12:16:52] [Server thread/ERROR]: Encountered an unexpected exception

java.lang.IllegalStateException: Failed to initialize server

       at net.minecraft.server.MinecraftServer.w(SourceFile:680) ~[server-1.20.2.jar:?]

       at net.minecraft.server.MinecraftServer.a(SourceFile:263) ~[server-1.20.2.jar:?]

       at java.lang.Thread.run(Thread.java:833) ~[?:?]

[12:16:52] [Server thread/ERROR]: This crash report has been saved to: F:\minecraft\.\crash-reports\crash-2023-12-01_12.16.52-server.txt

[12:16:52] [Server thread/INFO]: Stopping server

[12:16:52] [Server thread/INFO]: Saving worlds

[12:16:52] [Server thread/ERROR]: Exception stopping the server

java.lang.NullPointerException: Cannot invoke "akq.B_()" because "$$5" is null

       at net.minecraft.server.MinecraftServer.a(SourceFile:539) ~[server-1.20.2.jar:?]

       at net.minecraft.server.MinecraftServer.t(SourceFile:598) ~[server-1.20.2.jar:?]

       at ajn.t(SourceFile:542) ~[server-1.20.2.jar:?]

       at net.minecraft.server.MinecraftServer.w(SourceFile:699) ~[server-1.20.2.jar:?]

       at net.minecraft.server.MinecraftServer.a(SourceFile:263) ~[server-1.20.2.jar:?]

       at java.lang.Thread.run(Thread.java:833) ~[?:?]"

habt ihr Ideen, wie ich das beheben kann?

Danke

Linux, Java, Minecraft, Minecraft Server
Java Programm Gleichungssytem 3. Grades/Cramersche Regel?

Hallo, ich habe ein Programm erstellt, dass mithilfe der Cramerschen Regel ein Gleichungssytem 3. Grades löst (siehe unten) Nur kommt bei dem Ergebnis immer x1=0.0, x2=0.0 und x3=0.0 raus, egal was man eingibt. Ich finde den Fehler einfach nicht, kann mir da bitte jemand weiterhelfen?

LG

import java.util.*;
public class gs3 {
    public static void main(String[] args) {
        Scanner ein = new Scanner(System.in);
        System.out.println("Geben Sie den Koeffizienten des Gleichungssystems ein:");
        double[][] m = new double[3][4];
        for (int i = 0; i < 3; i++) {
            System.out.println("Gleichung " + (i + 1) + ":");
            for (int j = 0; j < 3; j++) {
                System.out.println("Koeffizient x" + (j + 1) + ":");
                m[i][j] = ein.nextDouble();
            }
            System.out.println("Rechte Seite: ");
            m[i][3] = ein.nextDouble();
        }
        double determinanteA = calculateDeterminant(m);
        if (determinanteA == 0) {
            System.out.println("Gleichungssystem nicht lösbar.");
        } else {
            double[] ergebnis = new double[3];
            for (int i = 0; i < 3; i++) {
                double[][] modifiedM = modifyM(m, i);
                double determinantModified = calculateDeterminant(modifiedM);
                ergebnis[i] = determinantModified / determinanteA;
            }
            System.out.println("Lösung: x1 = " + ergebnis[0] + ", x2 = " + ergebnis[1] + ", x3 = " +
                ergebnis[2]);
        }
        ein.close();
    }
    private static double calculateDeterminant(double[][] m) {
        double determinante = 0.0;
        determinante = m[0][0] * (m[1][1] * m[2][2] - m[1][2] * m[2][1]) -
            m[0][1] * (m[1][0] * m[2][2] - m[1][2] * m[2][0]) +
            m[0][2] * (m[1][0] * m[2][1] - m[1][1] * m[2][0]);
        return determinante;
    }
    private static double[][] modifyM(double[][] m, int column) {
        double[][] modifiedM = new double[3][3];
        for (int i = 0; i < 3; i++) {
            for (int j = 0, k = 0; j < 3; j++) {
                if (j != column) {
                    modifiedM[i][k++] = m[i][j];
                }
            }
        }
        return modifiedM;
    }
}

Computer, Programm, programmieren, Java, Array, codieren, Codierung, Informatik, Programmiersprache
Java: Wieso funktioniert der Zähler vom Stack nicht?

Außer folgender Klasse gibt es noch eine Klasse Queue und Stack. Kann mir jemand erklären, warum die Münzen des 1 und 2 Euro sowie des 50 Cents Stapels funktionieren und die des 20 und 10 Cent Stapels nicht? Danke.

package muenzen;

import java.util.*;

public class muenzen {
  public static int muenze;
  public static int ausgabe, zaehler, zaehler2, zaehler3, zaehler4, zaehler5;
  public static double wert2, wert;

  static Scanner sc = new Scanner(System.in);
  static Stack<Integer> muenzen = new Stack<>();
  static Stack<Integer> zehncent = new Stack<>();
  static Stack<Integer> zwanzigcent = new Stack<>();
  static Stack<Integer> fuenfzigcent = new Stack<>();
  static Stack<Integer> eineuro = new Stack<>();
  static Stack<Integer> zweieuro = new Stack<>();
  
  public static void stapelerstellen() {
    for (int i = 0; i < 20; i++) {
      System.out.println("Welchen Wert hat die Münze? (10 Cent/ 20 Cent/ 50 Cent/ 1 Euro/ 2 Euro)");
      muenze = sc.nextInt();

      if (muenze == 1) {
        eineuro.push(muenze);
      }
      else if (muenze == 2) {
        zweieuro.push(muenze);
      }
      else if (muenze == 10) {
        zehncent.push(muenze);
      }
      else if (muenze == 20) {
        zwanzigcent.push(muenze);
      }
      else if (muenze == 50) {
        fuenfzigcent.push(muenze);
      }
      else {
        System.out.println("Ungültige Eingabe. Bitte probieren Sie es erneut.");
      }
    }
  }

  public static void stapelausgabe() {
    zaehler = 0;
    zaehler2 = 0;
    zaehler3 = 0;
    zaehler4 = 0;
    zaehler5 = 0;

    while (!eineuro.isEmpty() || !zweieuro.isEmpty() || !zehncent.isEmpty() || !zwanzigcent.isEmpty() || !fuenfzigcent.isEmpty() ) {
      while (!eineuro.isEmpty()) {
        eineuro.pop();
        zaehler = zaehler + 1;
      }

      wert = zaehler;
      System.out.println("Auf dem 1€ Stapel liegen/liegt " + zaehler + " Münze(n). Er hat somit einen Wert von " + wert + "€");

      while (!zweieuro.isEmpty()) {
        zweieuro.pop();
        zaehler2 = zaehler2 + 1;
      }

      wert = zaehler2 * 2;
      System.out.println("Auf dem 2€ Stapel liegen/liegt " + zaehler2 + " Münze(n). Er hat somit einen Wert von " + wert + "€");

      while (!fuenfzigcent.isEmpty()) {
        fuenfzigcent.pop();
        zaehler3 = zaehler3 + 1;
      }

      wert = zaehler3 * 50 / 100;
      wert2 = wert * 100;
      System.out.println("Auf dem 50 Cent Stapel liegen/liegt " + zaehler3 + " Münze(n). Er hat somit einen Wert von " + wert + "€ oder " + wert2 + " Cent");

      while (!zwanzigcent.isEmpty()) {
        zwanzigcent.pop();
        zaehler4 = zaehler4 + 1;
      }

      wert = zaehler4 * 20 / 100;
      wert2 = wert * 100;
      System.out.println("Auf dem 20 Cent Stapel liegen/liegt " + zaehler4 + " Münze(n). Er hat somit einen Wert von " + wert + "€ oder " + wert2 + " Cent");

      while (!zehncent.isEmpty()) {
        zehncent.pop();
        zaehler5 = zaehler5 + 1;
      }

      wert = zaehler5 * 10 / 100;
      wert2 = wert * 100;
      System.out.println("Auf dem 10 Cent Stapel liegen/liegt " + zaehler5 + " Münze(n). Er hat somit einen Wert von " + wert + "€ oder " + wert2 + " Cent");
    }
  }

  public static void main(String[] args) {
    stapelerstellen();
    stapelausgabe();
  }
}
programmieren, Java, Eclipse, Programmiersprache, Zähler, stack
Wieso findet mein Programm die Cookies nicht(Java, Selenium)?

Hallo,ich arbeite grad an einem Programm und zwar an einem Automatischen Login weil ich das bald im Büro brauch deswegen benutzte ich aktuell als Testseite phase6.deIch greife auf die Website zu das ist kein Problem auch innerhalb dort kann ich alles steuern login ausführen auf buttons klicken etc. Doch das kann ich erst machen wenn die Cookies akzeptiert sind und mein Programm findet egal mit welchem Code die Cookies der Website nicht, wenn ich sie manuell anklicke geht der rest wieder ohne probleme, aber die Cookies machen mir zuschaffenKann mir da jemand helfen, was für Cookies das sind und wie ich darauf zugreife habe es schon mit dem xpath, cssSelector, name, id alles versucht import org.openqa.selenium.By;

Das ist mein aktueller Code(keine Cookie abfrage aktuell drin da ich testen wollte ob wenn ich manuell draufklicke dann buttons gefunden werden

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.*;

import java.util.Set;
import java.util.concurrent.TimeUnit;


public class EdgeLogin {
    public static void main(String[] args) {
        // Setze den Pfad zum Microsoft Edge WebDriver
        System.setProperty("webdriver.edge.driver", "C:\\Users\\A020451\\EigeneDateien\\EdgeLogin\\msedgedriver.exe");

        // Erzeuge eine neue Instanz des EdgeDriver
        WebDriver driver = new EdgeDriver();

        // Navigiere zur Phase6-Website
        driver.get("https://www.phase6.de");



        try {
            TimeUnit.SECONDS.sleep(5);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }



        // Maximiere das Browserfenster
        driver.manage().window().maximize();

        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }


        driver.findElement(By.cssSelector(".p6-icon-login")).click();


    }
}

Das ist der HTML-Code von dem Button auf der main html seite

<button id="acceptAllCookies" class="btn btn-primary" onclick="setGdprCookieAll();closeThisModal()" xpath="1">
::before
<span class="icon_check hide"></span>
::after
</button>

HTML, Java, Programmiersprache, Selenium
Wie mache ich daraus ein Strucktogramm?
import java.util.Scanner;
public class ChristmasTreeMain {
  Scanner scanner = new Scanner(System.in);
  int Tage;
  public static void main(String args[]) {
    ChristmasTreeMain tannenbaum = new ChristmasTreeMain();
    tannenbaum.inputTage();
    tannenbaum.drawTop(tannenbaum.Tage);
    tannenbaum.drawMiddle(tannenbaum.Tage);
    tannenbaum.drawBottom(tannenbaum.Tage);
  }
  public void inputTage() {
    boolean isInputValid = false;
    do {
      System.out.println("Bitte geben Sie einen Tage zwischen 1 und 24 ein:");
      while (!scanner.hasNextInt()) {
        System.out.println("Ungueltige Eingabe, geben Sie eine Zahl zwischen 1 und 24 ein.");
        scanner.next();
      }
      Tage = scanner.nextInt();
      if (Tage >= 1 && Tage <= 24) {
        isInputValid = true;
      } else {
        System.out.println("Ungueltige Eingabe, geben Sie eine Zahl zwischen 1 und 24 ein.");
      }
    } while (!isInputValid);
    scanner.close();
  }
  public void drawTop(int Tage) {
    for (int i = 2; i <= Tage; i++) {
      System.out.print(" ");
    }
    System.out.print("ii");
    System.out.println();
  }
  public void drawMiddle(int Tage) {
    int Dots = 0;
    for (int Tag = 1; Tag <= Tage; Tag++) {
       
      if (Tag > 2) {
        Dots += 2;
      }
   
      if (Tag > 1) {
   
        for (int i = 0; i < Tage - Tag; i++) {
          System.out.print(" ");
        }
   
        System.out.print("i/");
        for (int i = 0; i < Dots; i++) {
          System.out.print(".");
        }
        System.out.print("\\i");
   
        System.out.println();
      }
    }
  }
  public void drawBottom(int Tage) {
    for (int r = 1; r <= Tage; r++) {
      System.out.print("--");
    }
    System.out.println();
    for (int l = 2; l <= Tage; l++) {
      System.out.print(" ");
    }
    System.out.print("||");
  }
}
Java, Programmiersprache, Struktogramm

Meistgelesene Fragen zum Thema Java