tutorials.de Buch-Aktion 05/2012
Seite 1 von 3 123 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
34
ZUGRIFFE
1131
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Johnny8519 Johnny8519 ist offline Mitglied
    Registriert seit
    Dec 2009
    Beiträge
    24
    public static void main(String[] args) {
    String a = JOptionPane.showInputDialog("Bitte geben Sie den Titel des ersten Buches ein");
    String b = JOptionPane.showInputDialog("Bitte geben Sie den Autor des ersten Buches ein");
    String c = JOptionPane.showInputDialog("Bitte geben Sie die ISBN Nummer des ersten Buches ein");
    String d = JOptionPane.showInputDialog("Bitte geben Sie den Preis des ersten Buches ein");
    int e = Integer.parseInt(c);
    double f = Double.parseDouble(d);
    Book book = new Book(a,b,e,f);
    String g = JOptionPane.showInputDialog("Bitte geben Sie den Titel des zweiten Buches ein");
    String h = JOptionPane.showInputDialog("Bitte geben Sie den Autor des zweiten Buches ein");
    String i = JOptionPane.showInputDialog("Bitte geben Sie die ISBN Nummer des zweiten Buches ein");
    String j = JOptionPane.showInputDialog("Bitte geben Sie den Preis des zweiten Buches ein");
    int k = Integer.parseInt(i);
    double l = Double.parseDouble(j);
    Book book2 = new Book(g,h,k,l);
    String m = JOptionPane.showInputDialog("Bitte geben Sie den Titel des zweiten Buches ein");
    String n = JOptionPane.showInputDialog("Bitte geben Sie den Autor des zweiten Buches ein");
    String o = JOptionPane.showInputDialog("Bitte geben Sie die ISBN Nummer des zweiten Buches ein");
    String p = JOptionPane.showInputDialog("Bitte geben Sie den Preis des zweiten Buches ein");
    int q = Integer.parseInt(o);
    double r = Double.parseDouble(p);
    Book book3 = new Book(m,n,q,r);
    String sortierung = javax.swing.JOptionPane.showInputDialog
    ("Nach was sollen die Bücher sortiert werden?\r Titel=1,Autor=2,ISBN=3,Preis=4");
    int x = Integer.parseInt (sortierung);


    neue klasse

    private String titel;
    private String autor;
    private int isbn;
    private double preis;

    public Book (String name, String autor, int isbn, double preis) {
    this.titel = titel;
    this.autor = autor;
    this.isbn = isbn;
    this.preis = preis;

    soweit bin ich erstmal gekommen aber ich weis nicht wie ich das weitermachen muss, so das mir die eingaben alphabetisch bzw. nach größe der zahl sowohl aufsteigend als auch absteigend ausgegeben werden kann
    wenn mir da jemand helfen könnte wäre super
    Geändert von Johnny8519 (23.12.09 um 16:05 Uhr)
     

  2. #2
    Kai008 Kai008 ist offline Mitglied Brillant
    Registriert seit
    May 2008
    Ort
    Brunn/Geb. (Niederösterreich)
    Beiträge
    944
    Blog-Einträge
    1
    Ich würde ganz einfach ne Schleife und ne ArrayList nehmen, und je nach dem richtig einreihen. (add(int, Object)).
    Nach Strings ordnet man per compareTo bzw. compareToIgnoreCase.
    Und du musst bei der ISBN-Nr. noch die Minus entfernen lassen, bevor du es zu Integer parst. (z. B. "978-3-907080-55-9").

    Ach ja, die Java-Tags sind nicht zur Zierde da, und die Variablennamen in der main würde ich überarbeiten. (Event. Array.)
    Außerdem würde ich bei m - p nach den dritten Buch fragen, sonst könnte das recht verwirrend sein.
     

  3. #3
    Johnny8519 Johnny8519 ist offline Mitglied
    Registriert seit
    Dec 2009
    Beiträge
    24
    Ja das mit dem dritten buch hab ich schon reingeschrieben
    aber könntest du mir nen beispiel geben für die schleife, verstehe das nicht so ganz?
     

  4. #4
    Kai008 Kai008 ist offline Mitglied Brillant
    Registriert seit
    May 2008
    Ort
    Brunn/Geb. (Niederösterreich)
    Beiträge
    944
    Blog-Einträge
    1
    Habs nicht ausgiebig getestet, aber denke so in etwa sollte es hinhauen:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    
    package core;
     
    import java.util.ArrayList;
    import java.util.List;
     
    import javax.swing.JOptionPane;
     
    public class Main
    {
        private static final byte BOOKS_TO_SORT = 3;
        
        private static final byte SORT_BY_TITLE = 1;
        private static final byte SORT_BY_ARTIST = 2;
        private static final byte SORT_BY_ISBN = 3;
        private static final byte SORT_BY_PRICE = 4;
        
        private static List<Book> sortedList;
     
        static
        {
            sortedList = new ArrayList<Book>();
        }
        public static void main(String[] args)
        {
            Book[] books = new Book[BOOKS_TO_SORT];
            for(byte loopCounter = 1; loopCounter <= BOOKS_TO_SORT; loopCounter++)
            {
                String title = JOptionPane.showInputDialog("Bitte geben Sie den Titel des "+loopCounter+". Buches ein.");
                String artist = JOptionPane.showInputDialog("Bitte geben Sie den Author des "+loopCounter+". Buches " +
                        "ein.");
                String isbn = JOptionPane.showInputDialog("Bitte geben Sie die ISBN Nummer des "+loopCounter+". Buches" +
                        " ein.");
                String price = JOptionPane.showInputDialog("Bitte geben Sie den Preis des "+loopCounter+". Buches ein.");
                
                long filteredLongISBN = filterAndParseStringToLong(isbn, '-');
                double floatingPointPrice = Double.parseDouble(price);
                
                books[loopCounter - 1] = new Book(title, artist, filteredLongISBN, floatingPointPrice);
            }
            String sortTyp = JOptionPane.showInputDialog("Nach welcher Kathegorie sollen die Bücher sortiert werden?" +
                    System.getProperty("line.separator") +
                    "(Titel = 1, Autor = 2, ISBN = 3, Preis = 4)");
            byte byteSortTyp = Byte.parseByte(sortTyp);
                    
            for(Book book:books)
                setBookInRow(book, byteSortTyp);
     
            for(Book book:sortedList)
            {
                String s = book.getTitle() + " - " + book.getArtist() + " - " + book.getISBN() + " - " +
                book.getPrice();
                System.out.println(s);
            }
        }
        private static void setBookInRow(Book book, byte sortTyp)
        {
            if(sortedList.size() == 0)
                sortedList.add(book);
            else
            {
                int positionToAdd = 0;
                boolean breakLoop = false;
                
                if(sortedList.size() == 0)
                    sortedList.add(book);
                {
                    for(byte loopCounter = 0, size = (byte) sortedList.size(); (loopCounter < size) && (!breakLoop);
                    loopCounter++)
                    {
                        Book loopBook = sortedList.get(loopCounter);
                        
                        if(sortTyp == SORT_BY_ARTIST ^ sortTyp == SORT_BY_TITLE)
                        {
                            String lexicographicalCompareString = null;
                            if(sortTyp == SORT_BY_TITLE)
                            {
                                lexicographicalCompareString = book.getTitle();
                                if(lexicographicalCompareString.compareTo(loopBook.getTitle()) <= 0)
                                {
                                    positionToAdd = loopCounter;
                                    breakLoop = true;
                                }
                            }
                            else if(sortTyp == SORT_BY_ARTIST)
                            {
                                lexicographicalCompareString = book.getArtist();
                                if(lexicographicalCompareString.compareTo(loopBook.getArtist()) <= 0)
                                {
                                    positionToAdd = loopCounter;
                                    breakLoop = true;
                                }
                            }
                        }
                        else if(sortTyp == SORT_BY_ISBN)
                        {
                            long isbn = book.getISBN();
                            if(isbn < loopBook.getISBN())
                            {
                                positionToAdd = loopCounter;
                                breakLoop = true;
                            }
                        }
                        else if(sortTyp == SORT_BY_PRICE)
                        {
                            double price = book.getPrice();
                            if(price < loopBook.getPrice())
                            {
                                positionToAdd = loopCounter;
                                breakLoop = true;
                            }
                        }
                    }
                }
                sortedList.add(positionToAdd, book);            
            }
        }
        private static long filterAndParseStringToLong(String stringToFilter, char charToRemove)
        {
            String result = null;
            for(byte b = 0, strSize = (byte) stringToFilter.length(); b < strSize; b++)
            {
                char c = stringToFilter.charAt(b);
                if(c != charToRemove)
                {
                    String s = String.valueOf(c);
                    if(result != null)
                        result+= s;
                    else
                        result = s;
                }
            }
            return(Long.parseLong(result));
        }
        private static class Book
        {
            private String title;
            private String artist;
            private long isbn;
            private double price;
            
            public Book(String title, String artist, long filteredLongISBN, double floatingPointPrice)
            {
                super();
                this.title = title;
                this.artist = artist;
                this.isbn = filteredLongISBN;
                this.price = floatingPointPrice;
            }
            private String getTitle()
            {
                return(title);
            }
            private String getArtist()
            {
                return(artist);
            }
            private long getISBN()
            {
                return(isbn);
            }
            private double getPrice()
            {
                return(price);
            }
        }
    }
     

  5. #5
    Johnny8519 Johnny8519 ist offline Mitglied
    Registriert seit
    Dec 2009
    Beiträge
    24
    vielen dank werd das gleich mal testen
     

  6. #6
    Johnny8519 Johnny8519 ist offline Mitglied
    Registriert seit
    Dec 2009
    Beiträge
    24
    Ja das funktioniert super, allerdings fehlt mir noch die Eingabe ob es absteigend oder aufsteigend sortiert werden soll. Aber vielen dank
     

  7. #7
    Kai008 Kai008 ist offline Mitglied Brillant
    Registriert seit
    May 2008
    Ort
    Brunn/Geb. (Niederösterreich)
    Beiträge
    944
    Blog-Einträge
    1
    nP, das ist eh auch einfach. Eine zusätzliche JOptionPane, und je nach Ergebniss eventuell die Prüfung umdrehen.
    Falls du irgend eine Zeile nicht kapierst, frag ruhig.
     

  8. #8
    Johnny8519 Johnny8519 ist offline Mitglied
    Registriert seit
    Dec 2009
    Beiträge
    24
    Ja zeile 21 was gibt die mir an?
     

  9. #9
    Kai008 Kai008 ist offline Mitglied Brillant
    Registriert seit
    May 2008
    Ort
    Brunn/Geb. (Niederösterreich)
    Beiträge
    944
    Blog-Einträge
    1
    Das schreibt eine neue Instance in die Variable. Die Variable ist nur ein "Platzhalter" für eine Instance im RAM, aber natürlich muss man auch eine Instance mit new erstellen und in die Variable die Instance "schreiben", also der Variable sagen auf welche Instance sie verweißen soll.

    Falls du aber den static-Constructor drum herum meinst, der Code darin wird beim ersten Zugriff auf die Klasse ausgeführt (egal ob per Instance wie ne neue Erzeugung, oder per statische Methode), kann aber natürlich nur auf statische Methoden und Variablen zugreifen, da zu den Zeitpunkt noch keine Instance existieren kann.
     

  10. #10
    Johnny8519 Johnny8519 ist offline Mitglied
    Registriert seit
    Dec 2009
    Beiträge
    24
    wie kann ich das denn einstellen so das ich nur die titel oder den preis in rihenfolge ausgegeben bekomme?
     

  11. #11
    Johnny8519 Johnny8519 ist offline Mitglied
    Registriert seit
    Dec 2009
    Beiträge
    24
    bin echt nicht der fuchs in programmieren und finde das auch nicht so einfach nazuvolziehen wie du das gemacht hast
     

  12. #12
    Johnny8519 Johnny8519 ist offline Mitglied
    Registriert seit
    Dec 2009
    Beiträge
    24
    müsste eigentlich auch die ausgaben in einer gesonderten klasse book augegeben bekommen
     

  13. #13
    Kai008 Kai008 ist offline Mitglied Brillant
    Registriert seit
    May 2008
    Ort
    Brunn/Geb. (Niederösterreich)
    Beiträge
    944
    Blog-Einträge
    1
    Zeile 50:

    Code java:
    1
    
    String s = book.getTitle() + " - " + book.getArtist() + " - " + book.getISBN() + " - " + book.getPrice();

    Diese Zeile erstellt den String, der ausgegeben wird.

    Zuerst mal die Variablen, die angeben ob Name oder Author ausgegeben wird. (Am einfachsten unter die alten Typangabe unte Zeile 15 mit Leerzeilen zum
    zusammenfügen):

    Code java:
    1
    2
    
    private static final boolean OUTPUT_WAS_NAMES = true;
    private static final boolean OUTPUT_WAS_ARTIST = false;

    oder umgekehrt.

    Dann unter Zeile 47 (ohne den obrigen) die Abfragen:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    if(OUTPUT_WAS_NAMES ^ OUTPUT_WAS_ARTIST)
    {
        for(Book book:sortedList)
        {
            String s = null;
            if(OUTPUT_WAS_NAMES)
                s = book.getTitle();
            else
                s = book.getArtist();
            System.out.println(s);
        }
    }
    else
        throw new Error("Illegal Output-Mode selected. (Non Output or both Output selected, possible is only " +
                "XOR Output Mode.");

    Kannst du natürlich (was imho sogar besser wäre) am Anfang der main hinpflastern (gemeint ist die Prüfung und natürlich nicht die Schleife), aber hier ist sie finde ich schöner aufgehoben.

    bin echt nicht der fuchs in programmieren und finde das auch nicht so einfach nazuvolziehen wie du das gemacht hast
    Deshalb sage ich ja, du sollst jede nicht-klare Zeile hinterfragen, sollst ja auch was lernen. Sonst wärst du im "Kostenlosen Stellenangebots-Forum" besser aufgehoben.

    müsste eigentlich auch die ausgaben in einer gesonderten klasse book augegeben bekommen
    Sorry, das verstehe ich nicht. System.out.println(Object) gibt aus, und die befinde sich in der Main.


    Edit: Hoppla, 2 Bugs gefixt. *schäm*
    Geändert von Kai008 (23.12.09 um 18:25 Uhr)
     

  14. #14
    Johnny8519 Johnny8519 ist offline Mitglied
    Registriert seit
    Dec 2009
    Beiträge
    24
    damit meinte ich das wir 2 klassen brauchen wobei die eingaben in der klasse bocksorter gemacht werden sollen und die ausgabe in der klasse bock gegeben werden sollen
     

  15. #15
    Johnny8519 Johnny8519 ist offline Mitglied
    Registriert seit
    Dec 2009
    Beiträge
    24
    was sagt mir den das was du mir zuletzt geschickt hast? versteh ich nicht und die letzte zeile wird auch rot angezeigt.
     

Ähnliche Themen

  1. if abfrage im while schleife
    Von mckani im Forum PHP
    Antworten: 5
    Letzter Beitrag: 05.03.06, 22:21
  2. ABfrage gesucht / Zählen von variablen Namen
    Von PhoenixDH im Forum Relationale Datenbanksysteme
    Antworten: 3
    Letzter Beitrag: 20.05.05, 21:01
  3. where abfrage und while schleife
    Von scrotum im Forum PHP
    Antworten: 6
    Letzter Beitrag: 03.08.03, 17:32
  4. SQL Abfrage + Schleife
    Von dPo2000 im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 15.07.02, 12:35
  5. IF - Abfrage in Schleife
    Von d4k4 im Forum PHP
    Antworten: 5
    Letzter Beitrag: 14.06.02, 11:52