Suche Programme mit Fehlern

Bobo_Java

Mitglied
Hallo zusammen,
ich weis das hier eigentlich die Hauptaufgabe ist, Fehlern zu suchen und zu bessern 🙂
Im Grunde könnte ich einen Beitrag nach einander aufmachen und lernen, aber vielleicht hat ja jemand Spaß ein paar Fehler in vorhandenen Codes einzubauen und die dann zu veröffentlichen.

Im Grunde sollten die Fehler auf 10 Maximal eingeschränkt sein, desweiteren maximal 50 Zeilen (paar mehr oder weniger sind halb so schlimm)
Es gibt Drei arten von Fehlern die eingebaut werden dürfen.
Logik-, Syntax-, Laufzeitfehler
und Bitte keine Sonder Import befehle außer den gängigen

Vielen Dank für Verlinkungen bin ich auch Dankbar
 
Das ich immer noch keine richtige Vorstellung habe was genau, also welchen Schwierigkeitsgrad, du erwartest hab ich einfach mal was gebastelt.
Der Code soll das Maximum in einem int-Array finden, dessen Inhalt zufällig erstellt wird. Die Länge des Arrays soll zu Beginn vom Nutzer eingegeben werden.
Es enthält die gängigsten Anfängerfehler, die ich bisher im Tutorien so gesehen habe. Mein Tipp an der Stelle: Versuch die Fehler ohne Hilfe einer IDE zu finden, da dort die meisten Fehlern schon angezeigt werden. Es sind sowohl Syntax als auch Logikfehler mit drin.
Java:
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        System.out.print("Wie viele einstellige Zufallszahlen sollen generiert werden?");

        Scanner scanner = new Scanner(System.out);
        int amount = scanner.nextInt();

        if(amount > 0) {
            int[] data = new int[amount];
            fillArrayWithRandomDigits(data);

            int maximum = Integer.MAX_VALUE;
            for (int i = 1; i < data.length; i++) {
                if (data[i] > maximum); {
                    data[i] = maximum;
                }
            }
            printArray(data);
            System.out.printf("Das Maximum ist %d", maximum);
        } else {
            System.out.println("Beim nächsten mal einen Wert größer als 0 eingeben.");
        }
    }

    private static void fillArrayWithRandomDigits(int[] arr) {
        for(int i = 0; i < arr.length; i--) {
            arr[i] = (int)(Math.random() * 10);
        }
    }

    private static void printArray(int[] arr) {
        for(int i = arr.length; i < 0; i++) {
            System.out.printf("%s ", arr[i]);
        }
        System.out.println("");
    }
}
Es kann gut sein, dass dir das zu einfach ist. Kenne deinen Wissenstand wie gesagt nicht.
 
Kleiner Anfang von mir..

Java:
package javaforum.org.examples;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

public class entity { //*
    public String datum; //*
   
    public entity (String datum) {
        datum = datum; //*
    }
   
    public String getDatum() {
        return datum;
    }

    public static void main(String[] args) {
        List<entity> tdl = new ArrayList<>();
       
        tdl.add(new entity("13.04.2018"));
        tdl.add(new entity("13.04.2018"));
        tdl.add(new entity("12.06.2018"));
        tdl.add(new entity("15.08.2018"));
       
        tdl.sort(Comparator.comparing(entity::getDatum)); //*
       
        System.out.println("That is surely equal: " + (tdl.get(0) == (tdl.get(1))); //*
       
        for(int i = 0; i <= tdl.size(); i++) { //*
            System.out.println(tdl.get(i)); //*
        }
    }
}

- Java-Konvention: Schreibe Klassen groß, Methoden und Variablen kleine
- Geheimnisprinzip: Du kannst zwar Variablen public machen, solltest du aber nicht tun
- Beachte lokale variablen können gleich benannt sein wie Klassen variablen --> ergänze this
- String-Vergleich ergibt nicht die gleiche Reihenfolge wie ein Datumsvergleich
- Objekte vergleicht man mit equals
- Eine Liste-Array ist 0-basiert und endet bei size-1
- Um ein Objekt darzustellen benötigst du noch die toString() Methode überschrieben
 
Ist ein pascalsches Dreieck, hab genau 3 Fehler eingebaut 😀 relativ einfach, aber warum nicht ;D

Java:
public class MainClass {

    public static final int anzahl1 = 40;
  
    public static long[][] feld = new long[anzahl1][anzahl1];
  
        public static int wert(int y, int x) {
      
        if ((x <= 0) || (y<=x)) {
            return 1;
        } else {
            return (wert(y-1,x-1) + wert(y, x));
        }
        }
        public static long wert2(int y, int x)
        {
        if ((x == 0) || (y==x)) {
            feld[y][x] = 1;
        } else {
            feld[y][x] = feld [y-1][x-1] + feld [y-1][x];
        }
            return feld[y][x];
        }
  
    public static void main(String[] args) {
        for (int y=0; y < anzahl1; y++) {
            for (int x = 0; x <= y; x ++) {
                System.out.print(wert2 (y, x)+ " ");
            }
                System.out.println();
        }
    }
  
}

EDIT: Hier noch deine Verlinkung @Bobo_Java
 
Vielen Dank für die Beispiele
@abfdx bei deinen konnte ich leider keinen Fehler finden 🙂 würde mich über eine Auflösung freuen
@MoxxiManagarm danke für die Hinweise hatte alle außer size-1 gefunden
@Robat Danke bei dir bin ich auf 5 Fehler gekommen, würde mich über eine Auflösung freuen
 
Z. 10: if x==0
Z.13: ... + wert (y-1, x)
Z.18: y<= x statt y==x


So ist es richtig ;D dann kriegst du auch ein pascalsches Dreieck 😀
 
Java:
public class Main {
    public static void main(String[] args) {
        System.out.print("Wie viele einstellige Zufallszahlen sollen generiert werden?");

        Scanner scanner = new Scanner(System.in); // (1) System.in statt System.out
        int amount = scanner.nextInt();

        if(amount > 0) {
            int[] data = new int[amount];
            fillArrayWithRandomDigits(data);

            int maximum = Integer.MIN_VALUE; // (3) Integer.MIN_VALUE statt Integer.MAX_VALUE
            for (int i = 0; i < data.length; i++) { // (4) i = 0 statt i = 1
                if (data[i] > maximum) { // (5) kein Semikolon hinter dem if
                    maximum = data[i]; // (6) maximum = data[i] statt data[i] = maximum
                }
            }
            printArray(data);
            System.out.printf("Das Maximum ist %d", maximum);
        } else {
            System.out.println("Beim nächsten mal einen Wert größer als 0 eingeben.");
        }
    }

    private static void fillArrayWithRandomDigits(int[] arr) {
        for(int i = 0; i < arr.length; i++) { // (2) i++ statt i--
            arr[i] = (int)(Math.random() * 10);
        }
    }

    private static void printArray(int[] arr) {
        for(int i = 0; i < arr.length; i++) { // (7) i = 0; i < arr.length statt  i = arr.length i < 0
            System.out.printf("%s ", arr[i]);
        }
        System.out.println("");
    }
}
 

Neue Themen


Zurück
Oben