在方法中使用linkedlist给出';无法解析';错误,java
我有以下在方法中使用linkedlist给出';无法解析';错误,java,java,Java,我有以下snake.snakeMove(点、左方向、右方向、上方向、下方向、点大小)
snake.snakeMove(点、左方向、右方向、上方向、下方向、点大小)在Board.java中,我使用private SnakeLinkedList snake=new SnakeLinkedList()初始化了snake代码>。然而,在我的SnakeLinkedList类中,snakeMove方法给了我一个错误snake无法解决
public void snakeMove(int dots, boolean left, boolean right, boolean up, boolean down, final int SIZE) {
for (int z = dots; z >0; z--) {
snake.getJoint(z).setX(snake.getJoint(z-1).getX());
}
if(left) {
snake.getHead().setX(snake.getHead().getX() - SIZE);
}
if(right) {
snake.getHead().setX(snake.getHead().getX() + SIZE);
}
if(up) {
snake.getHead().setY(snake.getHead().getY() - SIZE);
}
if(down) {
snake.getHead().setY(snake.getHead().getY() + SIZE);
}
}
如何访问snake或在snake linkedlist上执行操作而不发生错误
SnakeLinkedList.java:
package com.zetcode;
import java.awt.Color;
public class SnakeLinkedList {
SnakeNode head = null;
public void addHead(int x, int y, Color c) {
head = new SnakeNode(x, y, c);
}
public void addJoint(int x, int y, Color c) {
SnakeNode newJoint = new SnakeNode(x, y, c);
newJoint.setNext(head.getNext());
head.setNext(newJoint);
}
public void addTail(Color c) {
SnakeNode curr = head;
while (curr.getNext() != null) {
curr = curr.getNext();
}
SnakeNode newJoint = new SnakeNode(curr.getX() + 10, curr.getY() + 10, c);
curr.setNext(newJoint);
}
public SnakeNode getHead() {
return head;
}
public SnakeNode getJoint(int i) {
SnakeNode curr = head;
for (int k = 0; k < i; k++) {
curr = curr.getNext();
}
return curr;
}
public void addFirst(SnakeNode node) {
node.setNext(head);
head = node;
}
public void addLast(SnakeNode node) {
if (head == null) {
head = node;
return;
}
SnakeNode curr = head;
while (curr.getNext() != null) {
curr = curr.getNext();
}
curr.setNext(node);
}
public void snakeMove(int dots, boolean left, boolean right, boolean up,
boolean down, final int SIZE) {
for (int z = dots; z >0; z--) {
this.getJoint(z).setX(this.getJoint(z-1).getX());
}
if(left) {
this.getHead().setX(this.getHead().getX() - SIZE);
}
if(right) {
this.getHead().setX(this.getHead().getX() + SIZE);
}
if(up) {
this.getHead().setY(this.getHead().getY() - SIZE);
}
if(down) {
this.getHead().setY(this.getHead().getY() + SIZE);
}
}
BOARD.JAVA中的相关代码片段:
private SnakeLinkedList snake = new SnakeLinkedList();
private Color[] colours = {Color.BLUE, Color.YELLOW, Color.GREEN};
public void actionPerformed(ActionEvent e) {
if (inGame) {
checkApple();
checkCollision();
snake.snakeMove(dots, leftDirection, rightDirection, upDirection, downDirection, DOT_SIZE);
//move();
}
repaint();
}
您需要使用SnakeLinkedList
中的getHead()
方法中的head
访问列表,并确保在调用addHead()
方法之前分配了head
此外,我还添加了checkif(head==null)返回在snakeMove()
中进行code>以确保头部不为空
像这样
public void snakeMove(int dots, boolean left, boolean right, boolean up, boolean down, final int SIZE) {
if (head == null) return;
for (int z = dots; z >0; z--) {
getJoint(z).setX(snake.getJoint(z-1).getX());
}
if(left) {
getHead().setX(snake.getHead().getX() - SIZE);
}
if(right) {
getHead().setX(snake.getHead().getX() + SIZE);
}
if(up) {
getHead().setY(snake.getHead().getY() - SIZE);
}
if(down) {
getHead().setY(snake.getHead().getY() + SIZE);
}
}
,及更新
public SnakeNode getJoint(int i) {
SnakeNode curr = head;
for (int k = 0; k < i && curr !=null ; k++) {
curr = curr.getNext();
}
return curr;
}
publicsnakenodegetjoint(inti){
蛇形管电流=水头;
对于(int k=0;k
您需要使用SnakeLinkedList
中的getHead()
方法中的head
访问列表,并确保在调用addHead()
方法之前分配了head
此外,我还添加了checkif(head==null)返回在snakeMove()
中进行code>以确保头部不为空
像这样
public void snakeMove(int dots, boolean left, boolean right, boolean up, boolean down, final int SIZE) {
if (head == null) return;
for (int z = dots; z >0; z--) {
getJoint(z).setX(snake.getJoint(z-1).getX());
}
if(left) {
getHead().setX(snake.getHead().getX() - SIZE);
}
if(right) {
getHead().setX(snake.getHead().getX() + SIZE);
}
if(up) {
getHead().setY(snake.getHead().getY() - SIZE);
}
if(down) {
getHead().setY(snake.getHead().getY() + SIZE);
}
}
,及更新
public SnakeNode getJoint(int i) {
SnakeNode curr = head;
for (int k = 0; k < i && curr !=null ; k++) {
curr = curr.getNext();
}
return curr;
}
publicsnakenodegetjoint(inti){
蛇形管电流=水头;
对于(int k=0;k
方法中存在问题,getJoint
。除非您选中curr.getNext()=null
,您将从调用getJoint(z).setX(snake.getJoint(z-1).getX())
中获得NullPointerException
按如下方式操作:
public SnakeNode getJoint(int i) {
SnakeNode curr = head;
for (int k = 0; k < i && curr.getNext()!=null; k++) {
curr = curr.getNext();
}
return curr;
}
publicsnakenodegetjoint(inti){
蛇形管电流=水头;
对于(int k=0;k
方法中存在问题,getJoint
。除非您选中curr.getNext()=null
,您将从调用getJoint(z).setX(snake.getJoint(z-1).getX())
中获得NullPointerException
按如下方式操作:
public SnakeNode getJoint(int i) {
SnakeNode curr = head;
for (int k = 0; k < i && curr.getNext()!=null; k++) {
curr = curr.getNext();
}
return curr;
}
publicsnakenodegetjoint(inti){
蛇形管电流=水头;
对于(int k=0;k
当您声明SnakeLinkedList
对象时,它与方法所在的类是同一个类?您能否共享导致此问题的完整代码段?从这个问题上看,你在哪里声明了这些方法,以及你在这些变量中使用了什么修饰符并不十分明显。不,这个方法在不同的类中,即board.java@sc0der@AjayKrChoudhary我无法将整个代码放入其中的原因是,该方法位于SnakeLinkedList类中,而snake的初始化是在另一个名为board.java的类中完成的,在该类中调用该方法。@如果该类是静态的,则可以通过类名访问这些元素;如果列表不是静态的,则可以通过实例访问这些元素静态在声明SnakeLinkedList
对象的地方,该对象与该方法所在的类是同一个类?能否共享导致此问题的完整代码段?从这个问题上看,你在哪里声明了这些方法,以及你在这些变量中使用了什么修饰符并不十分明显。不,这个方法在不同的类中,即board.java@sc0der@AjayKrChoudhary我无法将整个代码放入其中的原因是,该方法位于SnakeLinkedList类中,而snake的初始化是在另一个名为board.java的类中完成的,在该类中调用该方法。@如果该类是静态的,则可以通过类名访问这些元素;如果列表不是静态的,则可以通过实例访问这些元素通过@sc0der实现正确方法后解决了我的问题非常感谢这通过@sc0der实现正确方法后解决了我的问题非常感谢这些建议不供进一步讨论;此对话已结束。评论不用于扩展讨论;这段对话已经结束。