• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 137
  • Last Modified:

FizzBuzz challenge

Hi,

I am working on below challenge

http://codingbat.com/prob/p153059

My psuedo code of the logical approach is
0. construct array within int fromm start till end
1. loop throguh given array
2. find given element is multiple of 3 if yes replace by fizz
3.  find given element is multiple of 5 if yes replace by Buzz
4. return modified array



I wrote my code as below

public String[] fizzBuzz(int start, int end) {
  int [] arr=null;
  for(int i=start;i<(end-1);i++){
    arr[i]=i;
  
  
  if(arr[i]%3==0){
    arr[i]="Fizz";
  }
 else if(arr[i]%5==0){
    arr[i]="Buzz";
  }
  
  }
  return arr;
}

Open in new window




I am not passing all tests

How to improve my design, approach, code? please advise
0
gudii9
Asked:
gudii9
  • 6
  • 2
2 Solutions
 
mlmccCommented:
Go reread the challenge.  You are missing at least 2 key parts.

mlmcc
0
 
gudii9Author Commented:
else if (arr[i]%5==0&&(arr[i]%5==0){
    arr[i]="FizzBuzz";
  }

Open in new window

i see above condition
0
 
gudii9Author Commented:
public class FizzBuzzChallenge {
	public static void main(String[] args) {
		System.out.println("value is-->"+fizzBuzz(1, 6));
	}

	public static String[] fizzBuzz(int start, int end) {
		  String [] arr=null;
		  for(int i=start;i<(end-1);i++){
		    arr[i]=String.valueOf(i);
		  
		  
		  if(  (Integer.parseInt(arr[i]) ) %3==0){
		    arr[i]="Fizz";
		  }
		 else if((Integer.parseInt(arr[i]) )%5==0){
		    arr[i]="Buzz";
		  }
		 else if( (Integer.parseInt(arr[i]) )%3==0  && (Integer.parseInt(arr[i]) )%5==0){
			    arr[i]="FizzBuzz";
			  }
		  }
		  return arr;
		}

}

Open in new window


i am getting NPE as below


Exception in thread "main" java.lang.NullPointerException
      at FizzBuzzChallenge.fizzBuzz(FizzBuzzChallenge.java:10)
      at FizzBuzzChallenge.main(FizzBuzzChallenge.java:4)


public String[] fizzBuzz(int start, int end) {
		  String [] arr=null;
		  for(int i=start;i<(end-1);i++){
		    arr[i]=String.valueOf(i);
		  
		  
		  if(  (Integer.parseInt(arr[i]) ) %3==0){
		    arr[i]="Fizz";
		  }
		 else if((Integer.parseInt(arr[i]) )%5==0){
		    arr[i]="Buzz";
		  }
		 else if( (Integer.parseInt(arr[i]) )%3==0  && (Integer.parseInt(arr[i]) )%5==0){
			    arr[i]="FizzBuzz";
			  }
		  }
		  return arr;
		}

Open in new window


Expected      Run            
fizzBuzz(1, 6) → ["1", "2", "Fizz", "4", "Buzz"]      Exception:java.lang.NullPointerException (line number:4)      X      
fizzBuzz(1, 8) → ["1", "2", "Fizz", "4", "Buzz", "Fizz", "7"]      Exception:java.lang.NullPointerException (line number:4)      X      
fizzBuzz(1, 11) → ["1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz"]      Exception:java.lang.NullPointerException (line number:4)      X      
fizzBuzz(1, 16) → ["1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz", "11", "Fizz", "13", "14", "FizzBuzz"]      Exception:java.lang.NullPointerException (line number:4)      X      
fizzBuzz(1, 4) → ["1", "2", "Fizz"]      Exception:java.lang.NullPointerException (line number:4)      X      
fizzBuzz(1, 2) → ["1"]      null      X      
fizzBuzz(50, 56) → ["Buzz", "Fizz", "52", "53", "Fizz", "Buzz"]      Exception:java.lang.NullPointerException (line number:4)      X      
fizzBuzz(15, 17) → ["FizzBuzz", "16"]      Exception:java.lang.NullPointerException (line number:4)      X      
fizzBuzz(30, 36) → ["FizzBuzz", "31", "32", "Fizz", "34", "Buzz"]      Exception:java.lang.NullPointerException (line number:4)      X      
fizzBuzz(1000, 1006) → ["Buzz", "1001", "Fizz", "1003", "1004", "FizzBuzz"]      Exception:java.lang.NullPointerException (line number:4)      X      
fizzBuzz(99, 102) → ["Fizz", "Buzz", "101"]      Exception:java.lang.NullPointerException (line number:4)      X      
fizzBuzz(14, 20) → ["14", "FizzBuzz", "16", "17", "Fizz", "19"]      Exception:java.lang.NullPointerException (line number:4)      X      
other tests

How to resolve this issue?
0
Introducing Cloud Class® training courses

Tech changes fast. You can learn faster. That’s why we’re bringing professional training courses to Experts Exchange. With a subscription, you can access all the Cloud Class® courses to expand your education, prep for certifications, and get top-notch instructions.

 
gudii9Author Commented:
public String[] fizzBuzz(int start, int end) {
		  String [] arr=new String[(end-start)];
		  for(int i=start;i<(end-1);i++){
		    arr[i]=String.valueOf(i);
		  
		  
		  if(  (Integer.parseInt(arr[i]) ) %3==0){
		    arr[i]="Fizz";
		  }
		 else if((Integer.parseInt(arr[i]) )%5==0){
		    arr[i]="Buzz";
		  }
		 else if( (Integer.parseInt(arr[i]) )%3==0  && (Integer.parseInt(arr[i]) )%5==0){
			    arr[i]="FizzBuzz";
			  }
		  }
		  return arr;
		}

Open in new window


above fails below tests
Expected      Run            
fizzBuzz(1, 6) → ["1", "2", "Fizz", "4", "Buzz"]      [null, "1", "2", "Fizz", "4"]      X      
fizzBuzz(1, 8) → ["1", "2", "Fizz", "4", "Buzz", "Fizz", "7"]      [null, "1", "2", "Fizz", "4", "Buzz", "Fizz"]      X      
fizzBuzz(1, 11) → ["1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz"]      [null, "1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz"]      X      
fizzBuzz(1, 16) → ["1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz", "11", "Fizz", "13", "14", "FizzBuzz"]      [null, "1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz", "11", "Fizz", "13", "14"]      X      
fizzBuzz(1, 4) → ["1", "2", "Fizz"]      [null, "1", "2"]      X      
fizzBuzz(1, 2) → ["1"]      [null]      X      
fizzBuzz(50, 56) → ["Buzz", "Fizz", "52", "53", "Fizz", "Buzz"]      Exception:java.lang.ArrayIndexOutOfBoundsException: 50 (line number:4)      X      
fizzBuzz(15, 17) → ["FizzBuzz", "16"]      Exception:java.lang.ArrayIndexOutOfBoundsException: 15 (line number:4)      X      
fizzBuzz(30, 36) → ["FizzBuzz", "31", "32", "Fizz", "34", "Buzz"]      Exception:java.lang.ArrayIndexOutOfBoundsException: 30 (line number:4)      X      
fizzBuzz(1000, 1006) → ["Buzz", "1001", "Fizz", "1003", "1004", "FizzBuzz"]      Exception:java.lang.ArrayIndexOutOfBoundsException: 1000 (line number:4)      X      
fizzBuzz(99, 102) → ["Fizz", "Buzz", "101"]      Exception:java.lang.ArrayIndexOutOfBoundsException: 99 (line number:4)      X      
fizzBuzz(14, 20) → ["14", "FizzBuzz", "16", "17", "Fizz", "19"]      Exception:java.lang.ArrayIndexOutOfBoundsException: 14 (line number:4)      X      
other tests
X      
Your progress graph for this problem
import java.util.Arrays;

public class FizzBuzzChallenge {
	public static void main(String[] args) {
		System.out.println("value is-->"+Arrays.toString(fizzBuzz(1, 6)));
	}

	public static String[] fizzBuzz(int start, int end) {
		  String [] arr=new String[(end-start)];
		  for(int i=start;i<(end-1);i++){
		    arr[i]=String.valueOf(i);
		  
		  
		  if(  (Integer.parseInt(arr[i]) ) %3==0){
		    arr[i]="Fizz";
		  }
		 else if((Integer.parseInt(arr[i]) )%5==0){
		    arr[i]="Buzz";
		  }
		 else if( (Integer.parseInt(arr[i]) )%3==0  && (Integer.parseInt(arr[i]) )%5==0){
			    arr[i]="FizzBuzz";
			  }
		  }
		  return arr;
		}

}

Open in new window

value is-->[null, 1, 2, Fizz, 4]
0
 
mlmccCommented:
I am not a Java programmer but in some languages arrays are indexed from 0.
If Java is such you need to account for it.

WHen you run for 50 to 56 the array is not indexed with 50, 51, etc.  You have to adjust the index or the values entered.

mlmcc
0
 
Amitkumar PSr. ConsultantCommented:
I found couple of logical issues and corrected the code with comments.

public String[] fizzBuzz(int start, int end) {
		  String [] arr=new String[(end-start)];
		  
		  for(int n=start;n<end;n++){
		    int i = n-start; // Calculation of number was missing
		    arr[i]=String.valueOf(start+i);
		  
		  // Corrected the condition order
    		 if( (Integer.parseInt(arr[i]) )%3==0  && (Integer.parseInt(arr[i]) )%5==0){
    			    arr[i]="FizzBuzz";
    		 } else if((Integer.parseInt(arr[i]) )%5==0){
    		    arr[i]="Buzz";
    		 } else if(  (Integer.parseInt(arr[i]) ) %3==0){
    		    arr[i]="Fizz";
    		 }
		  }
		  return arr;
}

Open in new window

0
 
gudii9Author Commented:
 int i = n-start; // Calculation of number was missing

why we need above step? which number?
0
 
gudii9Author Commented:
public String[] fizzBuzz(int start, int end) {
		int len =end-start;
		  String [] arr=new String[(len)];
		  for(int k=start;k<(end);k++){
		    arr[k-1]=String.valueOf(k);
		  }
		  for(int i=0;i<(len);i++){ 
		     if( (Integer.parseInt(arr[i]) )%3==0  && (Integer.parseInt(arr[i]) )%5==0){
			    arr[i]="FizzBuzz";
			  }
		 else if(  (Integer.parseInt(arr[i]) ) %3==0){
		    arr[i]="Fizz";
		  }
		 else if((Integer.parseInt(arr[i]) )%5==0){
		    arr[i]="Buzz";
		  }
		  }
		  return arr;
		}

Open in new window


above fails bottom tests which do not start with 1
Expected      Run            
fizzBuzz(1, 6) → ["1", "2", "Fizz", "4", "Buzz"]      ["1", "2", "Fizz", "4", "Buzz"]      OK      
fizzBuzz(1, 8) → ["1", "2", "Fizz", "4", "Buzz", "Fizz", "7"]      ["1", "2", "Fizz", "4", "Buzz", "Fizz", "7"]      OK      
fizzBuzz(1, 11) → ["1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz"]      ["1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz"]      OK      
fizzBuzz(1, 16) → ["1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz", "11", "Fizz", "13", "14", "FizzBuzz"]      ["1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz", "11", "Fizz", "13", "14", "FizzBuzz"]      OK      
fizzBuzz(1, 4) → ["1", "2", "Fizz"]      ["1", "2", "Fizz"]      OK      
fizzBuzz(1, 2) → ["1"]      ["1"]      OK      
fizzBuzz(50, 56) → ["Buzz", "Fizz", "52", "53", "Fizz", "Buzz"]      Exception:java.lang.ArrayIndexOutOfBoundsException: 49 (line number:5)      X      
fizzBuzz(15, 17) → ["FizzBuzz", "16"]      Exception:java.lang.ArrayIndexOutOfBoundsException: 14 (line number:5)      X      
fizzBuzz(30, 36) → ["FizzBuzz", "31", "32", "Fizz", "34", "Buzz"]      Exception:java.lang.ArrayIndexOutOfBoundsException: 29 (line number:5)      X      
fizzBuzz(1000, 1006) → ["Buzz", "1001", "Fizz", "1003", "1004", "FizzBuzz"]      Exception:java.lang.ArrayIndexOutOfBoundsException: 999 (line number:5)      X      
fizzBuzz(99, 102) → ["Fizz", "Buzz", "101"]      Exception:java.lang.ArrayIndexOutOfBoundsException: 98 (line number:5)      X      
fizzBuzz(14, 20) → ["14", "FizzBuzz", "16", "17", "Fizz", "19"]      Exception:java.lang.ArrayIndexOutOfBoundsException: 13 (line number:5)      X      
other tests
X      
Your progress graph for this problem
0
 
gudii9Author Commented:
public String[] fizzBuzz(int start, int end) {
		int len =end-start;
		  String [] arr=new String[(len)];
		  for(int k=start;k<(end);k++){
		    arr[k-start]=String.valueOf(k);
		  }
		  for(int i=0;i<(len);i++){ 
		     if( (Integer.parseInt(arr[i]) )%3==0  && (Integer.parseInt(arr[i]) )%5==0){
			    arr[i]="FizzBuzz";
			  }
		 else if(  (Integer.parseInt(arr[i]) ) %3==0){
		    arr[i]="Fizz";
		  }
		 else if((Integer.parseInt(arr[i]) )%5==0){
		    arr[i]="Buzz";
		  }
		  }
		  return arr;
		}

Open in new window


i  fixed above issue passign all tests. any modifications/improvements/refinements to above code?
Expected      Run            
fizzBuzz(1, 6) → ["1", "2", "Fizz", "4", "Buzz"]      ["1", "2", "Fizz", "4", "Buzz"]      OK      
fizzBuzz(1, 8) → ["1", "2", "Fizz", "4", "Buzz", "Fizz", "7"]      ["1", "2", "Fizz", "4", "Buzz", "Fizz", "7"]      OK      
fizzBuzz(1, 11) → ["1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz"]      ["1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz"]      OK      
fizzBuzz(1, 16) → ["1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz", "11", "Fizz", "13", "14", "FizzBuzz"]      ["1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz", "11", "Fizz", "13", "14", "FizzBuzz"]      OK      
fizzBuzz(1, 4) → ["1", "2", "Fizz"]      ["1", "2", "Fizz"]      OK      
fizzBuzz(1, 2) → ["1"]      ["1"]      OK      
fizzBuzz(50, 56) → ["Buzz", "Fizz", "52", "53", "Fizz", "Buzz"]      ["Buzz", "Fizz", "52", "53", "Fizz", "Buzz"]      OK      
fizzBuzz(15, 17) → ["FizzBuzz", "16"]      ["FizzBuzz", "16"]      OK      
fizzBuzz(30, 36) → ["FizzBuzz", "31", "32", "Fizz", "34", "Buzz"]      ["FizzBuzz", "31", "32", "Fizz", "34", "Buzz"]      OK      
fizzBuzz(1000, 1006) → ["Buzz", "1001", "Fizz", "1003", "1004", "FizzBuzz"]      ["Buzz", "1001", "Fizz", "1003", "1004", "FizzBuzz"]      OK      
fizzBuzz(99, 102) → ["Fizz", "Buzz", "101"]      ["Fizz", "Buzz", "101"]      OK      
fizzBuzz(14, 20) → ["14", "FizzBuzz", "16", "17", "Fizz", "19"]      ["14", "FizzBuzz", "16", "17", "Fizz", "19"]      OK      
other tests
OK
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Get expert help—faster!

Need expert help—fast? Use the Help Bell for personalized assistance getting answers to your important questions.

  • 6
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now