Я новичок в программировании и работаю над проектом, с которым я надеялся получить помощь.Спецификации проекта следующие:
Реализация строки символов ADT в виде класса LinkedString с использованием связанного списка символов.Включите следующие конструкторы и методы LinkedString:
LinkedString (значение char [])
Выделяет новый список связанных символов, чтобы он представлял последовательность символов, в настоящее время содержащуюся в аргументе массива символов.
LinkedString (String original)
Инициализирует новый список связанных символов, чтобы он представлял ту же последовательность символов, что и аргумент.
char charAt (int index)
Возвращает значение символа по указанному индексу.Первый символ в связанной строке символов находится в нулевой позиции.
LinkedString concat (LinkedString str)
Объединяет указанную связанную символьную строку в конец этой связанной символьной строки.
boolean isEmpty ()
Возвращает true, если и только если length () равно 0.
int length ()
Возвращает длину этогосвязанная строка символов.
Подстрока LinkedString (int beginIndex, int endIndex)
Возвращает новую связанную строку символов, которая является подстрокой этой связанной строки символов.
Реализуйте LinkedString, чтобы он имитировал класс Java String.Например, позиции символов должны начинаться с нуля.Кроме того, следите за количеством символов в строке с переменной с именем size;длина должна быть определена без обхода связанного списка и подсчета узлов.Не забудьте включить класс Test, который создает один или несколько объектов LinkedString и вызывает каждый метод в ADT LinkedString.
Итак, у меня есть три класса: класс LinkedString, класс Node и LinkedStringTestкласс, который запускает основной метод.Пока это то, что у меня есть для класса LinkedString:
public class LinkedString {
private int size; //var keeps track of number of characters
private Node head;
public LinkedString(){ //no argument constructor
head = null;
size = 0;
}
public LinkedString(char[] value){
if(value.length == 0)
return;
Node node = new Node(value[0]);
head = node;
size++;
Node current = head;
for(int nodeIndex = 1; nodeIndex < value.length; nodeIndex++){
node = new Node (value[nodeIndex]);
current.next = node;
size++;
}
}
public LinkedString(String original){
if(original.length() == 0)
return;
Node node = new Node(original.charAt(0));
head = node;
size++;
Node current = head;
for(int nodeIndex = 1; nodeIndex < original.length(); nodeIndex++){
node = new Node(original.charAt(nodeIndex));
current.next = node;
current = current.next;
size++;
}
}
public char charAt(int index){
Node current = head;
for(int nodeIndex = 0; nodeIndex < size; nodeIndex++){
if(nodeIndex == index){
return current.item;}
else{
current = current.next;
}
}
}
public LinkedString concat(LinkedString str){
if(str.head == null){
return this;
}
else if(head == null){
size = str.length();
return str;
}
else{
Node current = head;
while(current.next != null)
current = current.next;
current.next = str.head;
size += str.length();
return this;
}
}
public boolean isEmpty(){
return length() == 0;
}
public int length(){
return size;
}
public LinkedString substring(int beginIndex, int endIndex){
String substr = " ";
for(int nodeIndex = beginIndex; nodeIndex <= endIndex; nodeIndex++)
substr += charAt(nodeIndex);
LinkedString linkedSubstring = new LinkedString(substr);
return linkedSubstring;
}
}
Это мой класс узла:
public class Node {
char item;
Node next;
public Node() {
setItem(' ');
setNext(null);
}
public Node(char newItem) {
setItem(newItem);
setNext(null);
}
public Node(char newItem, Node newNext) {
setItem(newItem);
setNext(newNext);
}
public Node(Node newNext) {
setItem(' ');
setNext(newNext);
}
public void setItem(char newItem) {
item = newItem;
}
public void setNext(Node newNext) {
next = newNext;
}
public char getItem() {
return item;
}
public Node getNext() {
return next;
}
}
А это мой класс LinkedStringTest:
import java.util.Scanner;
public class LinkedStringTest {
public static void main (String args[]){
Scanner sc = new Scanner(System.in);
char[] chars = {'H', 'e', 'l', 'l', 'o'};
LinkedString list1 = new LinkedString(chars);
System.out.print("The original string is ");
System.out.println(chars);
System.out.println("Is the list empty? " + list1.isEmpty());
System.out.println("The characters length: " + list1.length());
System.out.println("Enter the position of a character and press Enter: ");
int pos1 = sc.nextInt();
System.out.println("The character at position " + pos1 + " is " + list1.charAt(pos1));
System.out.println("Enter a string: ");
String strng1 = sc.next();
LinkedString list2 = new LinkedString(strng1);
System.out.println("The string is " + list2);
System.out.println("That string concatanated with the original string is " + list1.concat(list2));
System.out.println("Enter the starting and ending index of part of a string ");
int start = sc.nextInt();
int end = sc.nextInt();
System.out.println("The substring from " + start + " to " + end + " is " + list1.substring(start,end));
}
}
Это вывод, который я получаю, когда запускаю тестовый класс:
run:
The original string is project2.LinkedString@55f96302
Hello
Is the list empty? false
The characters length: 5
Enter the position of a character and press Enter:
2
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - missing return statement
at project2.LinkedString.charAt(LinkedString.java:64)
at project2.LinkedStringTest.main(LinkedStringTest.java:28)
C:\Users\Im\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 47 seconds)
Как вы можете видеть, когда я вхожу в индексную позицию (в данном случае число 2), я получаю сообщения об ошибках.Первая ошибка (строка 64) в начале моего метода charAt.Вторая ошибка (строка 28) связана с методом main, где я пытаюсь отправить целое число (в данном случае число 2) в метод charAt.
Что не так с моим методом charAt (), который не позволяет вернуть символ в запрошенной позиции индекса?
Кроме того, почему, когда я пытался распечатать список объектов1 в началеиз основного метода я получил только адрес ссылки вместо самого значения?
System.out.print("The original string is " + list1);
System.out.println(chars);
Я знаю, что у меня много проблем с этой программой, и я заранее благодарю вас за любую помощь, которую вы можете получить.чтобы дать мне.