Java – die neusten Beiträge

Mit BlueJ programmieren?

Hallo alle zusammen,

ich sitze gerade schon seit fast anderthalb Stunden an diesen drei Aufgaben und weiß einfach nicht weiter. Kann mir jemand helfen, der mit BlueJ Erfahrung hat?

Vielen Dank im Voraus.

Hier die Aufgaben:

/**Projekt: ReihungMax01_roh
 * Klasse : Reihung
 * @author: thh
 * @version: 13.5.14/2.11.12
 */
public class Reihung {
  // Objektvariablen deklarieren
  int anzahl = 19;
  double[] platz = new double[anzahl]; //Reihung deklarieren; wird 19 Kommazahlen 
  // als Werte erhalten; 
  /** 
   * Konstruktor fuer Objekte der Klasse Reihung */
  public Reihung() {
    // gesamte Reihung initialisieren, indem ... 
    for (int i = 0; i < anzahl; i++) {     // alle Inhalte der Reihung festgelegt werden
      platz[i] = 100 + 200*Math.random(); // <-- 5.
    }
  }
  
  /** die Gesamtzahl der Elemente
   * in der Reihe ausgeben */
  public int gibAnzahl() {
    return anzahl;
  }

  /** ein bestimmtes Element der Reihung ausgeben
   * die Nr. des gewuenschten Elementes angeben */
  public double gibPlatz(int i) {
    if (i < anzahl && i >= 0) { 
      return platz[i]; 
    }
    else { 
      return -888.888; 
    }
  } 
   
  /** Aufgabe 1:
   * setzt fuer zwei Elemente der Reihung platz neue Werte fest.
   * Das Element mit dem Index 5 in Reihung platz[ ] wird auf 555.55 gesetzt
   * Das Element mit Index 9 auf der Wert 99.99  */
   
  /** Aufgabe 1:
   * setzt ein bestimmtes Element der Reihung platz[ ] auf einen
   * neuen vorzugebenden Wert. 
    Schreibe nun für i den Index des Elements, welches verändert werden soll
    und für wert den Wert der eingesetzt werden soll*/
   
  /** Aufgabe 2: 
   * sucht das Maximum in der Reihung platz[ ] 
   * und meldet diesen Wert als Antwort */
   
  /** Aufgabe 3: 
   * sucht den Index, an dem das Maximum in der Reihung platz[ ] steht 
   * und meldet diesen Index */
}

/* 
 * 2. Beschreibe deine Idee in Worten. 
 *  Erstelle den Rumpf dieser Methode, die das Maximum in der Reihung 
 *  platz sucht und als Antwort zurueckgibt. 
 *  Achte auf die Farbunterlegung beim Schreiben neuer Methoden.
 *  Erkennst du im Quelltext die Idee/den Algorithmus wieder?
 * 
 * 3. Entwirf und implementiere eine Methode, die den Index nennt,
 *  an dem das Maximum steht. 
 *  Was ist der Unterschied zu Aufg.2?
 *  
 * 4. ** platz[i] = 100 + 200*Math.random();
 *  Hierdurch werden Zahlen zwischen 100.0 und 299.99999 zufaellig erzeugt.
 *  Welche Werte koennen die Elemente der Reihung annehmen, wenn
 *  Z.18 lautet:   platz[i] = 500*Math.random() + 200 ;  ?
 *  *** Z.18 lautet: platz[i] = 13 + i*Math.random() + 20*i ; ?
 * 5. Kopieren (auf Dateiebene ausserhalb von BlueJ) das gesamte
 *  Projekt-Verzeichnis und gib der Kopie einen neuen Namen wie ReihungMax02.
 *  Oeffne dieses Projekt und arbeite im neuen Projekt weiter. 
 */
Computer, programmieren, Java, BlueJ, Informatik

Java wo liegt der Fehler?

Hallo gutefrage-Community,

ich habe unten gezeigten Quellcode verfasst und dabei keinerlei Fehlermeldungen oder Exceptions erhalten. Am Ende kommt aber irgendwie trotzdem nicht heraus, was herauskommen soll.

Was ich erwarte:

Aus einem JTextField erhält man einen String "input" wie z.B. 2x+5=10x-3. Dieser wird zuerst beim "=" gesplittet. Daraus erhält man ein Array mit zwei Strings: 2x+5 und 10x-3. Diese beiden Arrays sollen nun an allen "+" und "-" gesplittet werden. Deshalb wird eine Schleife zweimal durchlaufen und dabei im ersten Durchlauf der erste und im zweiten Durchlauf der zweite String verarbeitet. Danach wird bei jeder Zahl mit "x" das "x" entfernt und ein boolean auf true gesetzt. Was am Ende herauskommen soll:

Drei Arrays (int num[], boolean isFactorOfVar[] und boolean isOnRightSide[]), die immer dem gleichen Index entsprechen, also: num[0] gehört zu isFactorOfVar[0] und zu isOnRightSide[0], num[1] gehört zu isFactorOfVar[1] und zu isOnRightSide[1] usw. Dabei soll num[] der Zahl entsprechen, isFactorOfVar, ob ein x am Ende entfernt wurde und isOnRightSide[], ob sich diese Zahl auf der rechten Seite des "=" befindet. Hier ist das am Anfangsbeispiel 2x+5=10x-3 gezeigt:

  • num[0] = 2; isFactorOfVar[0] = true; isOnRightSide[0] = true
  • num[1] = 5; isFactorOfVar[1] = false; isOnRightSide[1] = true
  • num[2] = 10; isFactorOfVar[2] = true; isOnRightSide[2] = false
  • num[3] = 3; isFactorOfVar[3] = false; isOnRightSide[3] = false

Was herauskommt:

  • num[0] = 2; isFactorOfVar[0] = true; isOnRightSide[0] = nicht angezeigt
  • Fehlermeldung

Mein Code:

Fehlermeldung:

Bild zum Beitrag
Computer, Technik, programmieren, Java, Informatik, Programmiersprache, Algorithmus

Wie viele Objekte der Klasse User werden insgesamt in Arbeitsspeicher durch main-Methode erzeugt?

Hallo,

bei dieser Fragestellung komme ich nicht weiter. Kann mir jemand sagen, wie man es lösen müsste?

Die Fragestellung lautet:

Wie viele Objekte der Klasse User werden insgesamt in Arbeitsspeicher durch main-Methode erzeugt?

public class User{
       private String name;
       private User[] friends;
       private int numFriends;
      
       public User() {
               friends = new User[100];
       }

       public User(String name) {
               this();
               this.name = name;
       }

       public void addFriend(User u){
               if (numFriends < friends.length){
                   friends[numFriends] = u;
                   ++numFriends;
               }
       }       

       public void addFriend(String name){
               addFriend(new User(name));              
       }

}

-------------------------------------------------------------------

public class Facebook{
  public static void main(String[] args){
       User alex = new User("Alex");
       alex.addFriend(new User("Friedrich"));
       alex.addFriend("Wilhelm");
      
       User lena = new User();
       lena.addFriend("Alex");
 }
}

Die Antwortmöglichkeiten sind:

  • 5
  • 3
  • 2
  • 4

Kann mir bitte jemand helfen?

programmieren, Java

Java eigne Klasse (Bücher ausleihen)?

Hi, also ich soll eine Klasse erstellen nach folgenden Kriterien:

Erstmal sry für den vielen Text, wollte nicht , dass durch das Zusammenfassen mögliche wichtige Informationen verloren gehen ;)

Nun sieht mein Ansatz bis jetzt so aus:

public class Book {
    private String author;
    private String title;
    private LocalDate returnDate;
    private String status;
    public Book(String author, String title, String Status) throws IllegalArgumentException{
        setAuthor(author);
        setTitle(title);
        setReturnDate(returnDate);
        setStatus(status);
    }
    private static boolean checkAuthor(String author){
        return (author.matches("[a-zA-ZäÄöÖüÜß ]") && author.length() >= 2);
    }
    private static boolean checkTitle(String title){
        return (title.length() >= 1 && title.length() < 10);
    }
    public static boolean checkReturnDate(LocalDate returnDate){
        return (  );
    }
    public static boolean checkStatus(String status){
        return (status.equals("rent") || status.equals("not rent"));
    }
    public final void setAuthor(String author) throws IllegalArgumentException{
        if(!checkAuthor(author)){
            throw new IllegalArgumentException("author not valid: "+ author);
        }
        this.author = author;
    }
    public final void setTitle(String title) throws IllegalArgumentException{
        if(!checkTitle(title)){
            throw new IllegalArgumentException("title not valid: "+ title);
        }
        this.title = title;
    }
    private void setReturnDate(LocalDate returnDate) throws IllegalArgumentException{
        if(!checkReturnDate(returnDate)){
            DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd.MM.yyyy");
            throw new IllegalArgumentException("Return Date not valid: " + returnDate.format(dtf));
        }
        this.returnDate = returnDate;
    }
    private void setStatus(String status){
        if(!checkStatus(status)){
            throw new IllegalArgumentException("Status not valid:" + status);
        }
        this.status = status;
    }

Mir fehlt noch eine Check Methode für LocalDate returnDate, hier bin ich nicht so ganz weiter gekommen.

Nun war meine Idee eine Unterklasse zu erstellen die von der Klasse Book erbt. In dieser soll dann der ganze Vorgang mit Ausleihen usw geschehen . Macht dies so Sinn?

Sollte ich dann returnDate erst in dieser erstellen?

Bild zum Beitrag
programmieren, Java, Informatik

[JavaFX] Spinner so einstellen, dass er nicht leer bleiben darf?

Wenn ich einen IntegerSpinner leer lasse und das Feld verlasse, bekomme ich eine NullPointerException, da logischer Weise nichts im Spinner steht.

Ich möchte den Spinner so einstellen, dass er mindestens eine Zahl beinhalten muss und maximal zweistellig sein darf. Ich meine damit nicht den Mindest- oder Maximalwert. Beispiel:

""    - leer;                 so ists falsch
"1"   - nicht leer;           so ists richtig
"11"  - nicht leer;           so ists richtig
"111" - mehr als zwei Zahlen; so ists falsch

Ich hatte schon mal sehr lange dieses Problem.

Nun möchte ich entweder auch eine eigene Fehlermeldung für diese NullPointerException haben (um z. B. .requestFocus() zu machen) oder einfach die Eingaben blockieren, wenn es, wie oben beschrieben, falsch gemacht wurde.

Mit regex kann ich schon mal einstellen, dass der Spinner eine rote Farbe bekommt (als Hinweis), wenn ein non-Integer eingegeben wurde oder zu wenige bzw. zu viele Zahlen eingegeben wurden:

if (!options_Spinner_StartInterval_seconds.getEditor().getText().matches("^-?\\d+$") || !options_Spinner_StartInterval_seconds.getEditor().getText().matches("^-?\\d.{0,2}$"))
    options_Spinner_StartInterval_seconds.setStyle("-fx-focus-color: #f00;");

Wenn ich aber die Anzahl der Zahlen im Spinner überprüfe, kann ich kein

spinner.requestFocus();

machen - ich kann den Spinner trotzdem verlassen.

Computer, programmieren, Java, JavaFX, Regulärer Ausdruck

Android App löscht Session automatisch bei onDestroy?

Ich habe eine App, wo man sich anmelden muss.

Die SessionID wird in der Login Activity empfangen und gespeichert. Wenn ich auf einer anderen Activity bin, hole ich die SessionID aus den ShaPref und hänge sie an den Header. Dann erhalte ich einen Response. Alles funktioniert einwandfrei.

Aber sobald ich die App schließe und den Login überspringe, dann wird ja die SessionID wieder aus den ShaPref geholt und an den Header gehängt.

Die SessionID ist weiterhin vorhanden! Dies prüfe ich anhand des Toast und Logs.

Aber ich erhalte den Response, dass ich ausgeloggt sei. Und die Session ist komplett leer.

Meine Vermutung ist:

Das die SessionID nur der Ort ist, wo die Datei mit den Werten gespeichert ist. Also das ich die SessionID an den Header hänge und dann weiß die Seite, welche Datei benutzt werden soll. Aber wenn man aus der App herausgeht, löscht Android automatisch diese Datei. Doch die SessionID-Adresse bleibt bestehen.

Fragen:

  • Wie kann ich die App schließen, ohne dass Android die Datei löscht?
  • Wo wird die Session auf dem Handy gespeichert? Ich kann es ja am PC einsehen.
  • Wie kann ich verhindern, dass Androids onDestroy etc. die Datei löscht?

Und wie kann ich dafür sorgen, dass Android bei onDestroy etc. die Datei löscht?

Wenn ich angemeldet sein möchte und ich herausgehe und wieder rein, bleibt die SessionID. Aber auf der Webseite ist sie leer. Aber wenn ich nicht angemeldet sein möchte, dann wird die ShaPref gelöscht und dann soll auch die Datei gelöscht werden.

Ich hoffe, ihr habt eine Lösung, wie man die automatische Löschung von dieser Datei bei Verlassen der App verhindert.

Ich danke euch im Voraus.

App, programmieren, Java, Android, session, Speicherort, Android Studio

wie könnte ich diesen Java Code kürzer/besser machen?

Hangman in Java

Wie könnte man so einen Code kürzer machen ?

public class hangiman {
    public static void main(String[] args) {
        System.out.println("Starting game");

        String notUsed = "abcdefghijklmnopqrstuvwxyz";

        String[] words = new String[]{"computer", "mouse", "screen", "display", "language"};

        String randomWord = words[(int) (Math.random() * words.length)];

        System.out.println("The word has " + randomWord.length() + " letters.");

        char[] letters = new char[randomWord.length()];

        Arrays.fill(letters, '.');
        int lives = 3;

        Scanner scanner = new Scanner(System.in);

        while (lives > 0) {
            System.out.print("Lives: ");

            for (int i = 0; i < lives; i++) {
                System.out.print("♥");
            }
            System.out.println();

            System.out.println("Input: ");

            String input = scanner.nextLine();

            char letter = input.charAt(0);


            boolean isGuessCorrect = false;
            for (int i = 0; i < randomWord.length(); i++) {
                char l = randomWord.charAt(i);

                if (l == letter) {
                    letters[i] = l;
                    isGuessCorrect = true;
                }
            }
            if (!isGuessCorrect) {
                lives = lives - 1;
            }
            boolean isGameFinished = true;

            System.out.print("Word: ");


            for (char c : letters) {
                if (c == '.') {
                    isGameFinished = false;
                }
                System.out.print(c);
            }
            System.out.println();

            notUsed = notUsed.replace(letter, '.');
            System.out.println("Not used " + notUsed);

            System.out.println("----------------------------------");

            if (isGameFinished) {
                System.out.println("You won!");
                break;
            }
        }
        if (lives == 0) {
            System.out.println("You lost! The word was: " + randomWord);
        }
        System.out.println("Exiting game");
    }
}

Computer, programmieren, Java, Informatik

Meistgelesene Beiträge zum Thema Java