This question already has answers here:
What is a NullPointerException, and how do I fix it?
(12 answers)
Closed 7 years ago.
Here is the exact error message:
Exception in thread "main" java.lang.NullPointerException
at Application.main(Application.java:22)
I've tried to fix it with what I know... what am I doing wrong?
My code:
public class Application {
private String guitarMaker;
public void setMaker(String maker) {
guitarMaker = maker;
}
public String getMaker() {
return guitarMaker;
}
public static void main (String[] args) {
Application[] guitarists;
guitarists = new Application[1];
guitarists[0].setMaker("Example maker");
System.out.println("My guitar maker is " + guitarists[0].getMaker());
}
}
new Application[1] creates an array of one element, and all elements in that array (in this case, "all the elements" is "that only element") are null by default. That means that guitarist[0] is null, and calling setMaker on it will result in the NullPointerException.
You need to instantiate a guitarist and set assign it to guitarist[0]:
guitarist[0] = new Application();
public class Application {
private String guitarMaker;
public void setMaker(String maker) {
guitarMaker = maker;
}
public String getMaker() {
return guitarMaker;
}
public static void main (String[] args) {
Application[] guitarists;
guitarists = new Application[1];
guitarists[0] = new Application(); //need to create a new object
guitarists[0].setMaker("Example maker");
System.out.println("My guitar maker is " + guitarists[0].getMaker());
}
}
You were calling a method on a null object. The new Application[1] just creates an array after that you need to make new objects in each index of the array
you have to initialise array with size and call new Application() instead of new Application[1] something like:
Application[] guitarists = new Application[1];
guitarists[0] = new Application();
guitarists[0].setMaker("Example maker");
System.out.println("My guitar maker is " + guitarists[0].getMaker());
Related
This question already has answers here:
What is a NullPointerException, and how do I fix it?
(12 answers)
Closed 7 years ago.
Say I have the class:
package school;
public class SchClass {
private Student[] students;
private int numStudents = 0;
public SchClass() {
}
public void addStudent(Student s) {
this.students[this.numStudents] = s;
this.amountStudents++;
}
}
and I am trying to run this in another class:
import school.SchClass;
import school.Student;
import school.Tutor;
public class JavaTesting {
public static void main(String[] args) {
Student s = new Student();
Tutor t = new Tutor();
SchClass shc = new SchClass();
sch.setTutor(t);
sch.addStudent(s);
}
}
When I do this, it reports this NullPointerException:
Exception in thread "main" java.lang.NullPointerException
at school.SchClass.addStudent(SchClass.java:8)
at javatesting.JavaTesting.main(JavaTesting.java:10)
What is wrong? I'm sure I coded this perfect but it still reports an error.
member students is null
public class SchClass {
private Student[] students = new Student[ size ];
private int numStudents = 0;
public SchClass() {
}
public void addStudent(Student s) {
this.students[this.numStudents] = s;
this.amountStudents++;
}
}
and it will work only untils amountStudents < size, then execption will occur so better is
public class SchClass {
private List< Student > students = new ArrayList< Student >();
public SchClass() {
}
public void addStudent(Student s) {
this.students.add( s );
}
}
Read about the Collection framework. If you want dynamic "arrays" you may use List<T>
Arrays are not dynamic.
Also, you have numerous errors in your class. What is for example this.amountStudents++ supposed to do? Furthermore I am surprised that your code does not already fail at sch.setTutor(t);, since you do not have declared a variable called sch. Did you mean shc?
This question already has answers here:
What is a NullPointerException, and how do I fix it?
(12 answers)
Closed 8 years ago.
been struggling with this problem since a couple of hours. Including looking through the previous questions answered. (Im really new in Java, basicly started a couple of days ago)
it keeps giving me NullpointerExceptions between Register.läggTillhund(nyHund); in the first class and hundRegister.add(nyHund); in the second class.
I have no idea what might be causing them. Does anyone have Ideas?
The purpose of the code (when finished) is to add an object from the 3rd class, into a list in the secondclass using the firstclass as the "main program".
Thanks for the help!
Oskar
First Class (Main)
public class testning {
public static void main(String[] args) {
Hund nyHund = new Hund("Daisy", 13, "labrador", 22.3);
System.out.println(nyHund.toString());
System.out.println(nyHund);
Register.läggTillHund(nyHund);
}
}
Second Class:
import java.util.ArrayList;
public class Register {
private static ArrayList<Hund> hundRegister;
public static void läggTillHund(Hund nyHund){
hundRegister.add(nyHund);
System.out.println(nyHund);
}
public Register(){
hundRegister = new ArrayList<Hund>();
}
}
Third Class
public class Hund {
private String namn;
private int ålder;
private double vikt;
private String ras;
public Hund(String hundnamn, int hundålder, String hundras, double hundvikt) {
this.namn = hundnamn;
this.ålder = hundålder;
this.ras = hundras;
this.vikt = hundvikt;
}
public String getNamn() {
return namn;
}
public int getÅlder() {
return ålder;
}
public double getSvanslängd() {
if ("tax".equals(ras)){
return 3.7;
}else{
return ((vikt*ålder)/10);
}
}
public String toString() {
return namn + "\n" + ålder + "\n"+ras+"\n"+vikt+"\n"+getSvanslängd();
}
}
You're accessing static method. In this case constructor never working. Use private static ArrayList<Hund> hundRegister = new Arraylist<>() ;and delete the constructor. To see what's going on add System.out.println line to construct and you'll see it will never works
This question already has answers here:
What is a NullPointerException, and how do I fix it?
(12 answers)
Closed 8 years ago.
I'm trying to create a card game. It has 3 classes, "PlayingCard", "DeckOfPlayingCards" and "Game".
public class PlayingCard {
private String rank;
private String suit;
public void setRankAndSuit(String rank, String suit) {
this.rank = rank;
this.suit = suit;
}
public String getRankAndSuit() {
return rank + " of " + suit;
}
}
public class DeckOfPlayingCards extends PlayingCard {
// Array of playing card objects
static PlayingCard[] deck = new PlayingCard[2];
DeckOfPlayingCards() { // This is my line 11 BTW
deck[0].setRankAndSuit("1", "S");
deck[1].setRankAndSuit("2", "S");
}
}
public class Game extends DeckOfPlayingCards {
public static void main(String[] args) {
DeckOfPlayingCards newDeck = new DeckOfPlayingCards(); // This is my
// line 6
System.out.println(deck[0].getRankAndSuit());
}
}
Everything compiles fine, but when I run it, I get a Exception in thread "main" java.lang.NullPointerException at DeckOfPlayingCards.<init>(DeckOfPlayingCards.java:11) at Game.main(Game.java:6)
As I understand, this exception is thrown when I'm trying to access something which is null. I simplified the program to see where the problem is, but I still can't figure it out. I initialized the array of 2 elements before I called them, so I don't know what is wrong. Please help me
static PlayingCard [] deck = new PlayingCard[2];
means you initialized an array of but elements haven't been initialized yet
so initialize them like
deck[0] = new PlayingCard();
deck[1] = new PlayingCard();
deck[0].setRankAndSuit("1","S");
This question already has answers here:
What is a NullPointerException, and how do I fix it?
(12 answers)
Closed 8 years ago.
I am following the ebook Big Java Late Objects - and I have problem resolving on of the tasks. It is about inheritance. There is Question class and one sub ChoiceQuestion class that extends it.
But when I run the code in my testclass it calls the null exception and I don't know why.
Exception in thread "main" java.lang.NullPointerException
at ChoiceQuestion.addChoice(ChoiceQuestion.java:12)
at TestClass.main(TestClass.java:21)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Here are my classes:
public class Question {
private String text;
private String answer;
/**
* Constructs a queston with empty question and answer.
*/
public Question(){
text = "";
answer = "";
}
//=============Setter methods============
public void setText(String questionText){
text = questionText;
}
public void setAnswer(String correctResponse){
answer = correctResponse;
}
//==============Getter Methods=============
public boolean checkAnswer(String response){
return answer.equals(response);
}
public void display(){
System.out.println(text);
}
}
And here is my subclass:
class ChoiceQuestion extends Question {
private ArrayList<String> choices;
//=========Methods==============
public void addChoice(String choice,boolean correct){
choices.add(choice);
if(correct){
//convert choices.size() to string
String choiceString = "" + choices.size();
this.setAnswer(choiceString);
}
}
public void display(){
// Display the question text
super.display();
// Display the answer choices
for(int i=0;i<choices.size();i++){
int choiceNumber = i + 1;
System.out.println(choiceNumber + ": " + choices.get(i));
}
}
}
And my test Class:
import java.util.Scanner;
public class TestClass {
public static void presentQuestion(Question q){
q.display();
System.out.println("Your answer: ");
Scanner in = new Scanner(System.in);
String response = in.nextLine();
System.out.println(q.checkAnswer(response));
}
public static void main(String[] args) {
Question first = new Question();
first.setText("James Gosling");
first.setAnswer("James Gosling");
ChoiceQuestion second = new ChoiceQuestion();
second.setText("In which country was the inventor of Java born? ");
second.addChoice("Austria", false);
second.addChoice("Canada",true);
second.addChoice("Denmark",false);
second.addChoice("United States",false);
presentQuestion(first);
presentQuestion(second);
}
}
Object choices is never initialized.
In Java, objects must be initialized before you can use them. That's why an attempt to call choices.add(choice) yields such an exception.
It is often a good idea to initialize member objects in constructors.
In this case, it looks like you should write a constructor for ChoiceQuestion and initialize your choices ArrayList there.
class ChoiceQuestion extends Question {
private ArrayList<String> choices;
ChoiceQuestion(){
choices = new ArrayList<>();
}
//...
Write private ArrayList choices = new ArrayList();
In the class when you declared it.
You need to initialize your list before use:
private List<String> choices = new ArrayList<String>();
The choices member is never initialized, so the first time you try to access it, you fail with a NullPointerException. You could, for example, initialize it in the class definition:
class ChoiceQuestion extends Question {
private ArrayList<String> choices = new ArrayList<>();
// Rest of the class
I am trying to creating objects in a loop.
while executing this i am getting NullPointer Exception like below::
Exception in thread "main" java.lang.NullPointerException
at Test1.main(Test1.java:14)
Test1.java
public class Test1 {
public static void myMethod(int i)
{
System.out.println("calling #"+ i+"time");
}
public static void main(String arg [])
{
for(int i = 0;i<=999;i++)
{
Test1 obj[] = null;
obj[i] = new Test1();
obj[i].myMethod(i);
}
}
}
Is this the correct way of creating objects in a loop?
You haven't created any array yet. Just initialize the array before the loop -
Test1 obj[] = new Test1[1000];
for(int i = 0;i<=999;i++)
{
//Test1 obj[] = null; // <----------- don't want this here
The array hasn't yet been created.
Test1 obj[] = new Test1[1000];
You're getting the error because the the array is pointing to null, and hasn't been initialized.