0

I am new in Java, I am practicing Strings but when i run this it throws NullPointeException

I have defined a constructor, which has value of String s1,stopCodon,startCodon.
it takes value of s1 but not stopCodon,startCodon
when i put value in instance variable it works fine Please explain little bit so that it help me...

/* package codechef; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;

/* Name of the class has to be "Main" only if the class is public. */
class Codechef
{   
        String s1;
        String startCodon;
        String stopCodon;
    public static void main (String[] args) throws java.lang.Exception
    {
        // your code goes here
        //String s1;
        //String startCodon;
        //String stopCodon;
        Codechef test1 = new Codechef();
        test1.testSimpleGene();
    }
     public void testSimpleGene(){
           System.out.println("Gene Strand is = " + s1); 
           System.out.println("Gene1 is = " + findSimpleGene(s1));
           System.out.println("Gene2 is = " + findSimpleGene(s1,startCodon,stopCodon));
     }
     private String findSimpleGene(String dna,String x,String y){
           String dnaResult  = "";
           int startIndex = dna.toUpperCase().indexOf(x);
           if (startIndex == -1){
               return "";            
            }
           int stopIndex = dna.toUpperCase().indexOf(y,startIndex+3);
           if (stopIndex == -1){
               return "";            
            } 
           //System.out.println(startIndex +" Part2 "+ (stopIndex));   
            if((stopIndex - startIndex)%3 == 0){
            dnaResult = dna.substring(startIndex,stopIndex+3);
           }
           return dnaResult;
        }
        public String findSimpleGene(String dna){
           String dnaResult  = "";
           int startIndex = dna.indexOf(startCodon);
           if (startIndex == -1){
               return "";            
            }
            int stopIndex = dna.indexOf(stopCodon,startIndex+3);
           if (stopIndex == -1){
               return "";            
            } 
          //System.out.println(startIndex +" "+ (stopIndex));   
            if((stopIndex - startIndex)%3 == 0){
            dnaResult = dna.substring(startIndex,stopIndex+3);
        }
           return dnaResult;
        }
        Codechef(){
        String s1 = "taaatg";
        String startCodon = "TAA";
        String stopCodon  = "ATG";
        }
    }

Error

    at Codechef.findSimpleGene(Main.java:45)
    at Codechef.testSimpleGene(Main.java:24)
    at Codechef.main(Main.java:20)```
  • 3
    'Variable is defined in constructor': that is the *problem.* You don't want to define it there, you want to *assign* it there. It's already defined out in the class and you are hiding it in the constructor with the additional definition. – user207421 May 16 '22 at 07:56

2 Answers2

0

Change the constructor to look like this.

public Codechef(){
    s1 = "taaatg";
    startCodon = "TAA";
    stopCodon  = "ATG";
}

By having the word String at the beginning of each line, you're actually declaring local variables in your constructor. You don't want that, because you want to work with the fields in your object, not with additional variables.

Dawood ibn Kareem
  • 77,785
  • 15
  • 98
  • 110
0

As mentioned in the comments, you are defining new local variables in your constructor, that happen to have the same name as your class field variables.

In your constructor you should assign the values of your class fields (s1, startCodon, stopCodon):

Codechef(){
     s1 = "taaatg";
     startCodon = "TAA";
     stopCodon  = "ATG";
}

However, if there is a local variable having the same name as a field variable (the property of the object), you can reference the field variable with the keyword this:

Codechef(){
     String s1 = "local variable";

     this.s1 = "taaatg";
     startCodon = "TAA";
     stopCodon  = "ATG";
}
happy songs
  • 835
  • 8
  • 21