基于链表数组的实现-不编译的打印方法
Linked List Array Based Implementation- Print Method Not Compiling
对于一项作业,我们之前使用节点 class 实现了基于数组的链表,但是,她要求所有学生在不使用节点 class 的情况下重做此作业。除了我的 printList 方法之外,我的一切都按预期工作 - 你能回顾一下我的 printList 方法并让我知道你的想法吗?下面是 class 和 driver.
链表Class
public class LinkedListArray {
int size;
int maxSize;
int arrayVal[];
public LinkedListArray()
{
this.size = 10;
}
public LinkedListArray(int list)
{
if(list < 0)
maxSize = 20;
else
maxSize = list;
size = 0;
arrayVal = new int[maxSize];
}
public int size(){
return size;
}
public boolean isEmpty() {
return (size() == 0);
}
public boolean isFull(){
return (size() == maxSize);
}
public void addHead(int value){
if(! this.isFull()){
for(int i = size; i > 0; i--)
arrayVal[i] = arrayVal[i - 1];
arrayVal[0] = value;
size++;
}else
System.out.println("The List is Full.");
}
public void addTail(int value){
if(! this.isFull()){
arrayVal[size] = value;
size++;
}else
System.out.println("The List is Full.");
}
public int removeHead() {
if(! this.isEmpty())
{
int value = arrayVal[0];
for(int i = 0; i < size -1; i++){
arrayVal[i] = arrayVal[i+1];
}
size--;
return value;
}else
System.out.println("The List is Empty.");
return arrayVal[size];
}
public int removeTail(){
if(!isEmpty()){
size--;
}else
System.out.println("The List is Empty.");
return arrayVal[size];
}
public String printList(){
String listString = new String();
if(! this.isEmpty())
return "The List is Empty.";
for(int i = 0; i < size; i++) {
listString += arrayVal[i];
if(i < size -1) {
listString += ", ";
}
}
return "Elements in the List: " + listString;
}
}
Driver Class
public class ProgramDriver {
public static void main(String[] args) {
LinkedListArray lla = new LinkedListArray(10);
System.out.println("Size of List: " + lla.size());
System.out.println("Is the list empty?: " + lla.isEmpty());
System.out.println("Is the list full?: " + lla.isFull());
lla.addHead(4);
lla.addHead(5);
lla.addTail(10);
lla.addTail(9);
lla.addTail(7);
lla.addTail(2);
lla.addHead(8);
lla.addHead(1);
lla.addTail(3);
lla.addTail(6);
lla.printList();
System.out.println("Size of List: " + lla.size());
System.out.println("Is the list empty?: " + lla.isEmpty());
System.out.println("Is the list full?: " + lla.isFull());
lla.removeHead();
lla.removeTail();
System.out.println("Size of List: " + lla.size());
System.out.println("Is the list empty?: " + lla.isEmpty());
System.out.println("Is the list full?: " + lla.isFull());
lla.printList();
}
}
首先:Whosebug 不是代码审查网站。不要只是 post 编写代码并询问人们的想法。 (为此查看 https://codereview.stackexchange.com/)
因此,在提出这样的问题时,非常有帮助 指明您看到的是什么行为,以及以何种方式不是您所期望的。这样我们就可以帮助您解决您实际遇到的具体问题 运行。
也就是说,这显然是一个问题:
if(! this.isEmpty())
return "The List is Empty.";
如果列表不为空,为什么会说“The List is Empty.”?我猜你想删除那里的 !
。
除此之外,如果您最终在列表中包含很多项目,则循环中的字符串连接会变得昂贵。你应该避免它。查看 String.join()
或 StringBuilder
.
对于一项作业,我们之前使用节点 class 实现了基于数组的链表,但是,她要求所有学生在不使用节点 class 的情况下重做此作业。除了我的 printList 方法之外,我的一切都按预期工作 - 你能回顾一下我的 printList 方法并让我知道你的想法吗?下面是 class 和 driver.
链表Class
public class LinkedListArray {
int size;
int maxSize;
int arrayVal[];
public LinkedListArray()
{
this.size = 10;
}
public LinkedListArray(int list)
{
if(list < 0)
maxSize = 20;
else
maxSize = list;
size = 0;
arrayVal = new int[maxSize];
}
public int size(){
return size;
}
public boolean isEmpty() {
return (size() == 0);
}
public boolean isFull(){
return (size() == maxSize);
}
public void addHead(int value){
if(! this.isFull()){
for(int i = size; i > 0; i--)
arrayVal[i] = arrayVal[i - 1];
arrayVal[0] = value;
size++;
}else
System.out.println("The List is Full.");
}
public void addTail(int value){
if(! this.isFull()){
arrayVal[size] = value;
size++;
}else
System.out.println("The List is Full.");
}
public int removeHead() {
if(! this.isEmpty())
{
int value = arrayVal[0];
for(int i = 0; i < size -1; i++){
arrayVal[i] = arrayVal[i+1];
}
size--;
return value;
}else
System.out.println("The List is Empty.");
return arrayVal[size];
}
public int removeTail(){
if(!isEmpty()){
size--;
}else
System.out.println("The List is Empty.");
return arrayVal[size];
}
public String printList(){
String listString = new String();
if(! this.isEmpty())
return "The List is Empty.";
for(int i = 0; i < size; i++) {
listString += arrayVal[i];
if(i < size -1) {
listString += ", ";
}
}
return "Elements in the List: " + listString;
}
}
Driver Class
public class ProgramDriver {
public static void main(String[] args) {
LinkedListArray lla = new LinkedListArray(10);
System.out.println("Size of List: " + lla.size());
System.out.println("Is the list empty?: " + lla.isEmpty());
System.out.println("Is the list full?: " + lla.isFull());
lla.addHead(4);
lla.addHead(5);
lla.addTail(10);
lla.addTail(9);
lla.addTail(7);
lla.addTail(2);
lla.addHead(8);
lla.addHead(1);
lla.addTail(3);
lla.addTail(6);
lla.printList();
System.out.println("Size of List: " + lla.size());
System.out.println("Is the list empty?: " + lla.isEmpty());
System.out.println("Is the list full?: " + lla.isFull());
lla.removeHead();
lla.removeTail();
System.out.println("Size of List: " + lla.size());
System.out.println("Is the list empty?: " + lla.isEmpty());
System.out.println("Is the list full?: " + lla.isFull());
lla.printList();
}
}
首先:Whosebug 不是代码审查网站。不要只是 post 编写代码并询问人们的想法。 (为此查看 https://codereview.stackexchange.com/)
因此,在提出这样的问题时,非常有帮助 指明您看到的是什么行为,以及以何种方式不是您所期望的。这样我们就可以帮助您解决您实际遇到的具体问题 运行。
也就是说,这显然是一个问题:
if(! this.isEmpty())
return "The List is Empty.";
如果列表不为空,为什么会说“The List is Empty.”?我猜你想删除那里的 !
。
除此之外,如果您最终在列表中包含很多项目,则循环中的字符串连接会变得昂贵。你应该避免它。查看 String.join()
或 StringBuilder
.