LString-Klasse, die verknüpfte Listen verwendet, um Zeichenfolgen zu erstellen, java

Ich habe Probleme beim Schreiben einescompareTo() undcharAt() -Methoden für ein verknüpftes Listenobjekt, das Zeichenfolgen erstellt. Die Klasse mit dem NamenLString enthält einen Konstruktor und einige andere Methoden. Es wird mit einer anderen Datei ausgeführt, die ihre Fähigkeit als Builder für verknüpfte Listenzeichenfolgen testet. Die folgende Fehlermeldung wird angezeigt:

    Running constructor, length, toString tests (10 tests)
Starting tests: ..........
Time: 0.000
OK! (10 tests passed.)

Running compareTo and equals tests (18 tests)
Starting tests: EEEEEEEE.EEE.E....
Time: 0.016

There were 12 failures:
1) t21aTestCompareTo[0](LStringTest$LStringCompareToTest)
java.lang.AssertionError: compareTo of "abc" and "abd" wrong expected:<-1> but was:<0>
        at org.junit.Assert.fail(Assert.java:88)
        at org.junit.Assert.failNotEquals(Assert.java:743)
        at org.junit.Assert.assertEquals(Assert.java:118)
        at org.junit.Assert.assertEquals(Assert.java:555)
        at LStringTest$LStringCompareToTest.t21aTestCompareTo(LStringTest.java:259)
        ... 9 more
2) t22aTestEquals[0](LStringTest$LStringCompareToTest)
java.lang.AssertionError: equals of "abc" and "abd" wrong expected:<false> but was:<true>
        at org.junit.Assert.fail(Assert.java:88)
        at org.junit.Assert.failNotEquals(Assert.java:743)
        at org.junit.Assert.assertEquals(Assert.java:118)
        at LStringTest$LStringCompareToTest.t22aTestEquals(LStringTest.java:269)
        ... 9 more
3) t21aTestCompareTo[1](LStringTest$LStringCompareToTest)
java.lang.IndexOutOfBoundsException: bad index
        at LString.charAt(LString.java:91)
        at LString.compareTo(LString.java:64)
        at LStringTest$LStringCompareToTest.t21aTestCompareTo(LStringTest.java:259)
        ... 9 more
4) t22aTestEquals[1](LStringTest$LStringCompareToTest)
java.lang.NullPointerException
        at LString.equals(LString.java:79)
        at LStringTest$LStringCompareToTest.t22aTestEquals(LStringTest.java:269)
        ... 9 more
5) t21aTestCompareTo[2](LStringTest$LStringCompareToTest)
java.lang.IndexOutOfBoundsException: bad index
        at LString.charAt(LString.java:91)
        at LString.compareTo(LString.java:64)
        at LStringTest$LStringCompareToTest.t21aTestCompareTo(LStringTest.java:259)
        ... 9 more
6) t22aTestEquals[2](LStringTest$LStringCompareToTest)
java.lang.AssertionError: equals of "a" and "ab" wrong expected:<false> but was:<true>
        at org.junit.Assert.fail(Assert.java:88)
        at org.junit.Assert.failNotEquals(Assert.java:743)
        at org.junit.Assert.assertEquals(Assert.java:118)
        at LStringTest$LStringCompareToTest.t22aTestEquals(LStringTest.java:269)
        ... 9 more
7) t21aTestCompareTo[3](LStringTest$LStringCompareToTest)
java.lang.IndexOutOfBoundsException: bad index
        at LString.charAt(LString.java:91)
        at LString.compareTo(LString.java:64)
        at LStringTest$LStringCompareToTest.t21aTestCompareTo(LStringTest.java:259)
        ... 9 more
8) t22aTestEquals[3](LStringTest$LStringCompareToTest)
java.lang.AssertionError: equals of "abc" and "abcd" wrong expected:<false> but was:<true>
        at org.junit.Assert.fail(Assert.java:88)
        at org.junit.Assert.failNotEquals(Assert.java:743)
        at org.junit.Assert.assertEquals(Assert.java:118)
        at LStringTest$LStringCompareToTest.t22aTestEquals(LStringTest.java:269)
        ... 9 more
9) t22aTestEquals[4](LStringTest$LStringCompareToTest)
java.lang.AssertionError: equals of "B" and "a" wrong expected:<false> but was:<true>
        at org.junit.Assert.fail(Assert.java:88)
        at org.junit.Assert.failNotEquals(Assert.java:743)
        at org.junit.Assert.assertEquals(Assert.java:118)
        at LStringTest$LStringCompareToTest.t22aTestEquals(LStringTest.java:269)
        ... 9 more
10) t21aTestCompareTo[5](LStringTest$LStringCompareToTest)
java.lang.AssertionError: compareTo of "BB" and "Ba" wrong expected:<-1> but was:<0>
        at org.junit.Assert.fail(Assert.java:88)
        at org.junit.Assert.failNotEquals(Assert.java:743)
        at org.junit.Assert.assertEquals(Assert.java:118)
        at org.junit.Assert.assertEquals(Assert.java:555)
        at LStringTest$LStringCompareToTest.t21aTestCompareTo(LStringTest.java:259)
        ... 9 more
11) t22aTestEquals[5](LStringTest$LStringCompareToTest)
java.lang.AssertionError: equals of "BB" and "Ba" wrong expected:<false> but was:<true>
        at org.junit.Assert.fail(Assert.java:88)
        at org.junit.Assert.failNotEquals(Assert.java:743)
        at org.junit.Assert.assertEquals(Assert.java:118)
        at LStringTest$LStringCompareToTest.t22aTestEquals(LStringTest.java:269)
        ... 9 more
12) t22aTestEquals[6](LStringTest$LStringCompareToTest)
java.lang.NullPointerException
        at LString.equals(LString.java:79)
        at LStringTest$LStringCompareToTest.t22aTestEquals(LStringTest.java:269)
        ... 9 more

Test Failed! (12 of 18 tests failed.)

Test failures: abandoning other phases.

DasLString Klasse soll Javas @ imitierString undStringBuilder, aber mit verknüpften Listen anstelle von Arrays. Ich bin ein wenig verwirrt, wie man das @ benutthis Stichwort. Innerhalb dercompareTo() Methode unten, ich stelle mir vor mitthis Wenn dieses LStrings-Zeichen in diesem Index dem LString-Zeichen des Arguments in demselben Index entspricht, geben Sie 0 zurück. "

Ich verweise auf diese Seite, bin mir aber nicht sicher, wie ich sie effizient schreiben soll:http: //docs.oracle.com/javase/7/docs/api/java/lang/String.html#compareTo%28java.lang.String%2

Ich möchtecompareTo(), um 0 zurückzugeben, wenn die LStrings genau dieselben Zeichen haben, einen Wert kleiner als Null, wenn dieser LString lexikografisch kleiner als ein anderer LString ist, und einen Wert größer als Null, wenn sein lexikografisch größer ist.

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

public class LString    {

     node   front;
     int size;

    //Creating a node class
     private    class   node {
          char data;
          node next;

          public    node (){
          }

          public    node    (char   newData){
                this.data = newData;
          }

          public    node    (char   newData,    node newNext){
                this.data = newData;
                this.next = newNext;
          }


     }
    //Constructors
     public LString(){
          this.size =   0;
          this.front =  null;
     }
     public LString(String original)    {
          this.size = original.length();
          if (original  !=  ""){

              this.front =  new node(original.charAt(0));
              node curr = this.front;

              for   (int i =1; i <  original.length(); i++) {
                    curr.next = new node(original.charAt(i));
                    curr = curr.next;
              }
          }



     }

   // Length method, returns the length of LString
     public int length()    {
        return this.size;
    }

    // compareTo method, compares this LString to anotherLString, returns 0 if equal,
   // -1 if lexicogrpahically less, and 1 if lexicographically greater
    public int compareTo(LString anotherLString)    {
      int total = 0;
      for (int i = 0; i < anotherLString.length(); i++) {
         total += this.charAt(i) - anotherLString.charAt(i);
      }
        return total;

        //}
        //return this.length()-anotherLString.length();
    }

   // a boolean equals method that returns true if LString and other are the same, false if not
    public boolean  equals(Object other)    {
        if  (other == null  ||  !(other instanceof LString)) {
            return false;
        }
        else {
            LString otherLString    = (LString)other;
         if (this.front.data == otherLString.front.data) {

               return true;
         }
        }
      return true;
    }

   // charAt returns the character of LString at the argument index
    public char charAt(int index)   {

        if ((index < 0) || (index >= this.length())) {
         throw new IndexOutOfBoundsException("bad index");
      }
      return this.front.data;
    }

Die fraglichen Methoden sind in diesem Code noch nicht abgeschlossen. Jeder Rat, der versucht Java zu lernen, ist willkommen.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage