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.