Akash Tawade Ответов: 3

Я получаю nullpointerexception в своем коде..не знаю, что не так в этом коде


Я получаю исключение нулевого указателя...не знаю, что не так в этом коде...как его решить.

Что я уже пробовал:

import java.util.Scanner;

class Node
{
	private int data;
	private Node next;
	

	
	public Node(int d , Node n)
	{
		data = d;
		next = n;
	}
	
	public void setData(int d)
	{
		data = d;
	}
	
	public void setNext(Node n)
	{
		next = n;
	}
	
	public int getData()
	{
		return(data);
	}
	
	public Node getNext()
	{
		return(next);
	}
}

class Linkedlist
{
	private int size;
	private Node start;
	
	public Linkedlist()
	{
		size = 0;
		start = null;
	}
	
	public void insetAtfirst(int val)
	{
		Node n = new Node(val,start);
		
		n.setData(val);
		n.setNext(start);
		
		start = n;
		size++;
	}
	
	public void viewlist()
	{
		Node t;
		
		t = start;
		
		for(int i=1;i<=size;i++)
		{
			System.out.println(" " + t.getData());
			t = t.getNext();
		}
	}
	
	public void deleteAltNode()
	{
		
		Node t1;
		
		t1 = start;
		
		for(int i=1;i<=size;i++)
		{
			System.out.println(" " + t1.getData());
			t1 = t1.getNext().getNext();
			
		}
		
		
		size--;
		
	
		
		
	}
}



public class Delete_alternate_node 
{

	
	public static void main(String[] args)
	{
		Scanner sc = new Scanner(System.in);

		Linkedlist l = new Linkedlist();
		
		System.out.println("Enter the no of node ");
		int k = sc.nextInt();
		
		for(int i=1;i<=k;i++)
		{
			System.out.println("Enter the elements for linkedlist");
			int val = sc.nextInt();
			l.insetAtfirst(val);
		}
		
		System.out.println();
		l.viewlist();
		
		System.out.println();
		l.deleteAltNode();
		
	
		
	}

}

3 Ответов

Рейтинг:
25

CPallini

Логика самого deleteAltNode метод неправильный. Попробуй

import java.util.Scanner;

class Node
{
  private int data;
  private Node next;

  public Node(int d , Node n)
  {
    data = d;
    next = n;
  }

  public void setData(int d)
  {
    data = d;
  }

  public void setNext(Node n)
  {
    next = n;
  }

  public int getData()
  {
    return(data);
  }

  public Node getNext()
  {
    return(next);
  }
}

class Linkedlist
{
  private int size;
  private Node start;

  public Linkedlist()
  {
    size = 0;
    start = null;
  }

  public void insertAtfirst(int val)
  {
    Node n = new Node(val,start);

    n.setData(val);
    n.setNext(start);

    start = n;
    size++;
  }

  public void viewlist()
  {
    Node t;

    t = start;

    while ( t != null )
    {
      System.out.print(" " + t.getData());
      t = t.getNext();
    }
    System.out.println();
  }

  public void deleteAltNode()
  {
    Node node;
    node = start;
    while ( node != null )
    {
      Node next = node.getNext();
      if ( next != null)
      {
        node.setNext (next.getNext());
        --size;
      }
      node = node.getNext();
    }
  }
}

public class Delete_alternate_node
{
  public static void main(String[] args)
  {
    Scanner sc = new Scanner(System.in);

    Linkedlist l = new Linkedlist();

    System.out.println("Enter the no of node ");
    int k = sc.nextInt();

    for(int i=1;i<=k;i++)
    {
      System.out.println("Enter the elements for linkedlist");
      int val = sc.nextInt();
      l.insertAtfirst(val);
    }
    System.out.print("list before alternate nodes deletion: ");
    l.viewlist();

    System.out.print("list after alternate nodes deletion: ");
    l.deleteAltNode();

    l.viewlist();
  }
}


Akash Tawade

Идеальное решение Большое вам спасибо @CPallini

CPallini

Добро пожаловать.

Рейтинг:
0

OriginalGriff

Это одна из самых распространенных проблем, которые нам задают, и это также та, на которую мы меньше всего готовы ответить, но вы больше всего готовы ответить сами.

Позвольте мне просто объяснить, что означает ошибка: вы пытались использовать переменную, свойство или возвращаемое значение метода, но оно содержит null - что означает, что в переменной нет экземпляра класса.
Это немного похоже на карман: у вас есть карман в рубашке, который вы используете, чтобы держать ручку. Если вы сунете руку в карман и обнаружите, что там нет ручки, вы не сможете подписать свое имя на листе бумаги - и вы получите очень смешные взгляды, если попытаетесь! Пустой карман дает вам нулевое значение (здесь нет ручки!), поэтому вы не можете сделать ничего, что обычно делали бы, когда вы извлекли свою ручку. Почему он пуст? Вот в чем вопрос - может быть, вы забыли взять ручку, когда уходили из дома сегодня утром, или, возможно, вы оставили ручку в кармане вчерашней рубашки, когда снимали ее вчера вечером.

Мы не можем сказать, потому что нас там не было, и, что еще важнее, мы даже не можем видеть вашу рубашку, не говоря уже о том, что находится в кармане!

Вернемся к компьютерам, и вы каким - то образом сделали то же самое-и мы не можем увидеть ваш код, а тем более запустить его и узнать, что содержит null, когда это не должно быть.
But you can - and your IDE will help you here. Run your program in the debugger and when it fails, the debugger will show you the line it found the problem on. You can then start looking at the various parts of it to see what value is null and start looking back through your code to find out why. So put a breakpoint at the beginning of the method containing the error line, and run your program from the start again. This time, execution will stop before the error, and let you examine what is going on by stepping through the code looking at your values. Exactly how you use the debugger will depend on the IDE you are using, but a quick google for the name of your IDE plus "debugger tutorial" should get you the info you need.

Но мы не можем этого сделать - у нас нет вашего кода, мы не знаем, как его использовать, если бы он у нас был, у нас нет ваших данных. Так что попробуйте - и посмотрите, сколько информации вы можете узнать!


Рейтинг:
0

Patrice T

Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что должен делать ваш код, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.
Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]

http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jdb.html[^]
https://www.jetbrains.com/idea/help/debugging-your-first-java-application.html[^]

Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.