ich bin wirklich seit 2 Tagen an einem Problem für die Uni.
Ich möchte folgende Aufgabe lösen:
Programmieren Sie die Klasse List<K> aus der Vorlesung.
a) Implementieren sie dabei die folgenden Methoden wie in der Vorlesung beschrieben:
public String toString() {...}
public boolean isEmpty() {...}
public void insertFirst(K elem) {...}
b) Erweitern Sie Ihre Klasse List<K> um die folgenden Methoden:
Abfragen der Anzahl der Elemente in der Liste:
public int size() {...}
Die Methode gibt die Anzahl der in der Liste gespeicherten Objekte zurück.
Abfragen eines Elements an einer bestimmten Position:
public K get(int pos) {...}
Die Methode liefert das Objekt an der Stelle pos zurück. Falls gilt (pos < 0 pos >= size()) soll ein Objekt der folgenden Runtime-Exception geworfen werden: java.lang.IndexOutOfBoundsException
Hinzufügen eines Elements an einer bestimmten Position:
public void add(K elem) {...}
Die Methode hängt das Objekt elem an die bestehende Liste hinten an. Falls gilt (elem==null) soll ein Objekt der folgenden Runtime-Exception geworfen werden: java.lang.NullPointerException
Testen Sie Ihre neuen Methoden ausführlich in der main-Methode der Klasse Main.
Testen Sie die Klasse List mit der Klasse Account als den Typ-Parameter. Fügen Sie 2 Accounts hinzu und geben die Liste auf der Konsole aus. Prüfen Sie vor und nach dem Hinzufügen der Elemente den Rückgabewert der Methode isEmpty(). Fügen Sie einen weiteren Account mit Hilfe der Methode insertFirst(...) vorne in der Liste ein. Überprüfen Sie die Korrektheit indem Sie die Liste erneut auf der Konsole ausgeben.
c)Ersetzen Sie das Account Array in der Klasse Cashmachine durch Ihre eigene Klasse List. Passen Sie ihre Klasse Cashmachine entsprechend an.
d) Implementieren Sie die Methode java.util.Iterator<K> iterator() {...} unter Verwendung einer geeigneten (inneren) Klasse wie in der Vorlesung besprochen. Testen Sie Ihren Iterator ausführlich!
Ich hände an der add Methode, sie funktioniert einfach nicht ( habe die ganze Klasse schon 2 mal neu geschrieben aber ich komme nicht darauf)
Erstmal die funktionierenden Klassen:
Quellcode
- package A4.bin;
- public class Account {
- private int accountNumber;
- private float overdraft; //Dispokredit des Kontos
- private float bankDeposit; //die Höhe des Kontoguthabens
- private int pin = 1234;
- public Account(int accNumber, float dispo, float guthaben){
- accountNumber= accNumber;
- overdraft = dispo;
- bankDeposit = guthaben;
- }
- public float getoverdraft(){
- return overdraft;
- }
- public float getbankDeposit(){
- return bankDeposit;
- }
- public int getAccountNumber() {
- return accountNumber;
- }
- public void setAccountNumber(int accountNumber) {
- this.accountNumber = accountNumber;
- }
- public void setOverdraft(float dispo){
- this.overdraft = dispo;
- }
- public void setBankDeposit(float guthaben){
- this.bankDeposit = guthaben;
- }
- public int getPin(){
- return pin;
- }
- @Override
- public String toString() {
- return ("Accountnummer:" + this.accountNumber + " Guthaben: " + this.bankDeposit + " Dispo:" + this.overdraft);
- }
- }
Quellcode
- package A4.bin;
- public class Main {
- public static void main(String[] args) throws NullPointerException {
- Account acc1 = new Account(5, 1.22f, 4.55f);
- Account acc2 = new Account(9, 7.66f, 9.44f);
- try {
- List<Account> test = new List<Account>();
- test.insertFirst(acc2);
- System.out.println("add aufruf:");
- test.add(acc1);
- System.out.println(test.isEmpty());
- System.out.println("size aufruf:");
- System.out.println(test.size());
- System.out.println("get(1) aufruf:");
- System.out.println(test.get(1));
- System.out.println("get(2) aufruf:");
- System.out.println(test.get(2));
- } catch (NullPointerException exc) {
- System.out.println("GROßerfehler");
- }
- }
- }
Und mein Problemfall: ( habe die add auf 2 arten Implementiert und den einen Fall auskommentiert)
Java-Quellcode
- package A4.bin;
- import java.lang.*;
- import java.util.Collections;
- import java.util.Iterator;
- public class List<K> implements Iterable<K> {
- int size = 0;
- private ListNode head;
- private class ListNode {
- ListNode next;
- K data;
- void setData(K data) {
- this.data = data;
- }
- ListNode getNext(){
- if (next != null){
- return next;
- }
- }
- boolean hasNext(){
- if (head.next != null){
- return true;
- }else{
- return false;
- }
- }
- void setNext(ListNode next) {
- this.next = next;
- }
- public boolean isEmpty() {
- return head == null;
- }
- public K getData(){
- return this.data;
- }
- }
- @Override
- public String toString() {
- ListNode l = head;
- StringBuilder sb = new StringBuilder();
- System.out.println("a");
- while (l != null) {
- sb.append("<" + l.data + ">");
- l = l.next;
- }
- return sb.toString();
- }
- public void insertFirst(K elem) {
- ListNode newHead = new ListNode();
- newHead.setData(elem);
- newHead.setNext(this.head);
- this.head = newHead;
- }
- public boolean isEmpty() {
- return head == null;
- }
- public int size() {
- size = 0;
- ListNode tempHead = this.head;
- System.out.println("size1");
- while (tempHead != null) {
- System.out.println("size2");
- tempHead = tempHead.next;
- size++;
- }
- return size;
- }
- public K get(int pos) throws IndexOutOfBoundsException {
- System.out.println(head.data);
- K x = null;
- System.out.println("test1");
- ListNode tempHead = this.head;
- if (pos > 0 || pos <= size()) {
- System.out.println(tempHead.data);
- System.out.println("test2");
- for (int i = 0; i < pos; i++) {
- System.out.println("test3" + this.head.data);
- tempHead = tempHead.next;
- System.out.println("test4");
- }
- } else {
- throw new IndexOutOfBoundsException();
- }
- System.out.println("letztes get");
- // System.out.println(tempHead.data);
- return tempHead.data;
- }
- /* public void add(K elem) throws NullPointerException {
- ListNode addHead = new ListNode();
- addHead.setData(elem);
- System.out.println(head.data);
- System.out.println(addHead.data);
- for(int i =1; i< size(); i++){
- head = head.next;
- if( head.next == null ){
- head.setNext(addHead);
- break;
- }
- }
- */
- public void add(K elem) {
- ListNode temp = new ListNode();
- temp.setData(elem);
- ListNode iterating = head;
- if (head == null) {
- head = temp;
- return;
- }
- for (; iterating.hasNext(); iterating = iterating.getNext())
- ;
- iterating.setNext(temp);
- class myIterator implements Iterator<K> {
- public ListNode current;
- public myIterator() {
- current = head;
- }
- @Override
- public boolean hasNext() {
- if (current != null) {
- return current.hasNext();
- }
- return false;
- }
- @Override
- public K next() {
- ListNode temp = current;
- current = current.getNext();
- return temp.getData();
- }
- @Override
- public void remove() {
- throw new UnsupportedOperationException();
- }
- }
- }
- @Override
- public Iterator<K> iterator() {
- return new myIterator();
- }
- }
Mit dieser Klasse, die mir ein Kommilitone gegeben hat funktioniert mein Programm super ( bei ihm heißt die ListNode, innerData) wäre echt super wenn mir jemand meinen fehler zeigen könnte. ICh weiß echt nichtmehr weiter
Java-Quellcode
- import java.util.*;
- public class List<K> implements Iterable<K> {
- innerData head;
- public List() {
- head = null;
- }
- public class innerData {
- K data;
- innerData next;
- public innerData(K newData) {
- data = newData;
- next = null;
- }
- public void setNext(innerData newNext) {
- next = newNext;
- }
- public innerData getNext() {
- if (next != null) {
- return next;
- }
- return null;
- }
- public boolean hasNext() {
- if (next == null) {
- return false;
- }
- return true;
- }
- public String toString() {
- return data.toString() + " " + next.toString();
- }
- public K getData() {
- return data;
- }
- }
- public class myIterator implements Iterator<K> {
- public innerData current;
- public myIterator() {
- current = head;
- }
- @Override
- public boolean hasNext() {
- if (current != null) {
- return current.hasNext();
- }
- return false;
- }
- @Override
- public K next() {
- innerData temp = current;
- current = current.getNext();
- return temp.getData();
- }
- @Override
- public void remove() {
- throw new UnsupportedOperationException();
- }
- }
- public String toString() {
- if (head != null) {
- return head.toString();
- }
- return null;
- }
- public boolean isEmpty() {
- if (head == null) {
- return true;
- }
- return false;
- }
- public void insertFirst(K newElement) {
- innerData temp = new innerData(newElement);
- if (head != null) {
- temp.setNext(head);
- }
- head = temp;
- }
- public int size() {
- int dataSize = 0;
- innerData iterating = head;
- while (iterating != null) {
- dataSize++;
- iterating = iterating.getNext();
- }
- return dataSize;
- }
- public K get(int pos) {
- innerData iterating = head;
- int i;
- for (i = 0; i < pos && iterating != null; i++, iterating = iterating
- .getNext())
- ;
- return iterating.getData();
- }
- public void add(K newElement) {
- innerData temp = new innerData(newElement);
- innerData iterating = head;
- if (head == null) {
- head = temp;
- return;
- }
- for (; iterating.hasNext(); iterating = iterating.getNext())
- ;
- iterating.setNext(temp);
- }
- @Override
- public Iterator<K> iterator() {
- return new myIterator();
- }
- }
THX