Java

Aus Flinkwiki
Version vom 24. August 2019, 19:41 Uhr von Flinh1 (Diskussion | Beiträge) (Eingabe über die Konsole (Tastatureingabe))
Wechseln zu: Navigation, Suche
Seitenübersicht
Zur Seite "Eclipse"
Zur Seite "Netbeans"
Zur Seite "Kotlin"


Übersetzung von Quellcode in Bytecode

Wenn keine IDE wie Eclipse mit einem Menüpunkt Run zur Verfügung steht, kann man die javaDatei auch auf der Kommandozeile (bash, cmd etc.) übersetzen:

javac Dateiname.java

Es entsteht eine Datei Dateiname.class, die mit dem Befehl

java Dateiname 

(ohne die Endung class) aufgerufen werden kann.


Importieren von Paketen und Klassen

Import einer einzelnen Klasse:

import java.util.Scanner;

Import aller Klassen eines Pakets:

import java.util.*; 

Pakete:

  • java.util // z. B. Klasse Scanner
  • javax.swing // z. B. Klasse JOptionPane // Methode showInputDialog()

Eingabe über die Konsole (Tastatureingabe)

Klasse Scanner

public class Skanner {
    public static void main(String[] args) {
        Scanner eingabe = new Scanner(System.in);
        System.out.println("Geben Sie bitte Ihren Namen ein:");
        String name = eingabe.next();
        System.out.println("Sie heißen also " + name + ".");
    }   
}


Klasse BufferedReader und Methode readLine()

  • InputStreamReader erlaubt die Umsetzung eines Bytestreams in einen Zeichenstream. Bytes werden gelesen und in Zeichen dekodiert.
  • BufferedReader liefert einen gepufferten Eingabe-Stream für Unicode-Zeichen.[1]
  • Die statische Methode readLine() stellt einen formatierten Prompt zur Verfügung und liest dann eine Textzeile von der Konsole.

Beispiel:

import java.io.*;

public class MeineEingabe {
    
    public static void main(String[] args) throws IOException {
        String s;
        
        BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in));
        
        System.out.println("Bitte um Tastatureingabe: ");
        s = eingabe.readLine();
        System.out.println("Ausgabe: " + s);
        
    }
}

Man kann sich auf dieser Grundlage fertige Methoden für die Konsoleneingabe "basteln":

    public static String readString() {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        try {
            return br.readLine();
        } catch (IOException ex) {
            return "";
        }
    }
    
    public static int readInt() {
        try {
            return Integer.parseInt(readString());
        } catch (NumberFormatException ex) {
            return 0;
        }
    }
    
    public static double readDouble() {
        try {
            return Double.parseDouble(readString());
        } catch (NumberFormatException ex) {
            return 0.0;
        }
    }
}

Beispiele für die Verwendung dieser Methoden:

        String eingabe = readString();
        System.out.println("Die Eingabe lautet: " + eingabe);
        
        int intEingabe = readInt();
        System.out.println("Die intEingabe lautet: " + intEingabe);
        
        double doubleEingabe = readDouble();
        System.out.println("Die doubleEingabe lautet: " + doubleEingabe);

(Dank an Hn. K. / javafish.de) </nowiki>


Beispiele

Wörter zählen

package de.kaiguenster.javaintro.wordcount;

import java.io.*;
import java.util.*;

/**
 * Ein einfacher Wortzähler, der aus einem beliebigen {@link InputStream} Wörter zählt. 
 * Wörter sind alle Gruppen von alphabetischen Zeichen. Das führt zum Beispiel beim 
 * abgekürzten "geht's" dazu, dass es als "geht" und "s" gezählt wird.
 * @author Kai
 */
public class WordCount {

    
    private InputStream source;
    private Map<String, Integer> wordCounts = new HashMap<>();
    private int totalCount = 0;
    
    /**
     * Erzeuge ein neues WordCount-Objekt aus einem {@link InputStream}
     * @param source - der Inputstream, aus dem gelesen wird. Sollte auch wirklich 
     * Textdaten enthalten, sonst ist das Ergebnis ungewiss.
     */
    public WordCount(InputStream source){
        this.source = source;
    }
    
    /**
     * Zählt Wörter aus dem InputStream
     */
    public void count(){
        try(Scanner scan = new Scanner(source)){
            scan.useDelimiter("[^\\p{IsAlphabetic}]+");
            while (scan.hasNext()){
                String word = scan.next().toLowerCase();
                totalCount++;
                wordCounts.put(word, wordCounts.getOrDefault(word, 0) + 1);
            }
        }    
    }

    /**
     * @return die Anzahl Wörter im Text
     */
    public int getTotalCount(){
        return totalCount;
    }
    
    /**
     * @return die Menge aller gefundenen Wörter im Text
     */
    public Set<String> getWords(){
        return Collections.unmodifiableSet(wordCounts.keySet());
    }
    
    /**
     * Findet, wie oft ein bestimmtes wort im Text vorkommt.
     * @param word - das Wort, nach dem gesucht wird
     * @return - wie oft das Wort im Text vorkommt
     */
    public int getCount(String word){
        Integer result = wordCounts.get(word);
        return result != null ? result : 0;
    }
    
    /**
     * Die Main-Methode wird ausgeführt, wenn WordCount als Programm aufgerufen wird. 
     * @param args - erwartet wird genau ein Aufrufparameter: ein Dateiname
     * @throws FileNotFoundException - diese Exception wird nie wirklich geworfen, 
     * der Fehler wird vorher abgefangen
     */
    public static void main(String[] args) throws IOException {
        if (args.length != 1) fail("WordCount requires exactly one file name as argument");
        File f = new File(args[0]);
        if (!f.exists()) fail("File does not exist " + f.getAbsolutePath());
        if (!f.isFile()) fail("Not a file " + f.getAbsolutePath());
        if (!f.canRead()) fail("File not readable " + f.getAbsolutePath());
        try(FileInputStream in = new FileInputStream(f)){
            WordCount count = new WordCount(new FileInputStream(f));
            count.count();
            System.out.println("Words in total: " + count.getTotalCount());
            count.getWords().stream().sorted().forEach((word) -> {
                System.out.println(word + ": " + count.getCount(word));
            });
        }
    }    
    
    /**
     * Hilfsmethode zu main: im Fehlerfall schreibt diese Methode eine Fehlermeldung 
     * und beendet das Programm
     * @param message - die Fehlermeldung
     */
    private static void fail(String message){
        System.err.println(message);
        System.exit(1);
    }
}


[2]


Fibonacci

package de.kaiguenster.javaintro.fibonacci;

/**
 * Java-Programm zur Berechnung von Fibonacci-Zahlen.
 * Auruf: java de.kaiguenster.javaintro.fibonacci.Fibonacci <n>. Dabei ist
 * n der Index der gesuchten Fibonacci-Zahl, <code>...Fibonacci 6</code> berechnet
 * die 6. Zahl der Folge: 5
 * @author Kai
 */
public class Fibonacci {

    public static int fibonacci(int n){
        if (n < 0) 
            throw new IllegalArgumentException("Fibonaccizahlen sind für negativen Index nicht definiert.");
        else if (n == 0) 
            return 0;
        else if (n == 1) 
            return 1;
        else
            return fibonacci(n - 1) + fibonacci(n - 2);
    }
    
    public static void main(String[] args) {
        if (args.length != 1) {
            System.out.println("Aufruf: java de.kaiguenster.javaintro.fibonacci.Fibonacci <n>");
            System.exit(1);
        }
        int n = Integer.parseInt(args[0]);
        int result = fibonacci(n);
        System.out.println("Die " + n + ". Fibonacci-Zahl ist: " + result);
    }
}

[3]


Einen String umkehren

/**
 * Programm zum Umkehren von Strings in der Kommandozeile. 
 * @author Kai
 * @version 1.0
 */
package de.kaiguenster.javaintro.reverse;

/**
 *
 * @author Kai
 */
public class Reverse {

    /**
     * Kehrt einen <code>String</code> zeichenweise um. Zum Beispiel wird "Hallo, Welt!" zu "!tleW ,ollaH"
     * @param in der umzukehrende <code>String</code>
     * @return den umgekehrten <code>String</code>
     * @throws IllegalArgumentException wenn in == <code>null</code> ist.
     */
    public static String reverse(String in){
        if (in == null) throw new IllegalArgumentException("Parameter in muss übergeben werden.");
        StringBuilder out = new StringBuilder();
        for (int i = in.length() - 1; i >= 0; i--){
            out.append(in.charAt(i));
        }
        return out.toString();
    }
    
    public static void main(String[] args) {
        if (args.length != 1){
            System.out.println("Aufruf: java de.kaiguenster.javaintro.reverse.Reverse \"<text>\"");
            System.exit(1);
        }
        String reversed = reverse(args[0]);
        System.out.println(reversed);
    }
 
}

[4]


Arbeitswerkzeuge

Eclipse


IntelliJ IDEA

Download für Windows/Mac von

Installation in Ubuntu 18.04[5]:

  1. sudo -H software-properties-gtk[6][7]
  2. Im Fenster "Anwendungen & Aktualisierungen" > "Andere Programme" > "Hinzufügen"
  3. ppa:mmk2410/intellij-idea eingeben
  4. Im Terminal apt-get install intellij-idea-community ausführen.

Maven[8]-Projekt starten:

  1. Create New Project
  2. Maven > Next
  3. GroupId und ArtifactId eintragen (z. B. jeweils "demo") > Next
  4. Projektnamen eintragen, es entsteht dann ein gleichnamiges Verzeichnis

Klasse anlegen:

  1. Im linken Fenster unter Project > [Projektname] > src > main
  2. mit der rechten Maustaste auf java klicken
  3. New > Java Class > [dateiname.java] eintragen, OK

Shortcuts:

  • psmvm = public static void main(String[] args) {}
  • sout = System.out.println();


Netbeans

Zur Seite Netbeans


JShell

Am Eingabeprompt der JShell kann man unkompliziert Codefragmente testen.

Aufruf im Terminal (Linux): jshell

Aufruf unter Windows (cmd): jshell. Die Datei jshell.exe liegt im bin-Verzeichnis der jdk-Installation.


Eingaben nachträglich editieren:

/edit

Importierte Klassen anzeigen:

/imports

Quellen

Links


Youtube


Bücher


|