Search code examples
javaacm-java-libraries

Why is everything after the space not printed?


I created a simple program using the acm library that takes a user inputted string and prints it out in morse. This is the program:

import acm.program.*;

public class morse extends Program{
    public void run(){

        String[] alphabet = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
        String[] morse = {".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};
        String word = readLine("Give the word(s) to transcribe: ").toUpperCase();
        println("Morse: ");
        int j = 0;
        for(int i = 0; i < word.length(); i++){
            int k = 0;
            boolean flag = true;
            if(Character.toString(word.charAt(j)).equals(" ")){
                println();
            }else {
                while(!Character.toString(word.charAt(j)).equals(alphabet[k])){
                    if(k < 25){
                        k += 1;
                    }else{
                        println("Letter was not found.");
                        flag = false;
                        break;
                    }
                }
                if(flag){
                    println(morse[k] + " ");
                }
            j += 1;
            }   
        }
    }
}

However, every time the string contains a space, everything after the space is not printed. I seriously cant find the reason behind this. Can anyone help me or even point me somewhere ? Thanks

(The letters after the space are all printed as spaces)


Solution

  • I do not know why you define i in the for loop but never use it. Your main problem is that when you encounter an space you do not increment j. I think you have two options:

    • increment j after you call println(); inside the if
    • drop j completely and simply use i wherever j previously was used (probably the better idea)

    General recommendation for your code: You are performing too much weird Character and String logic. You could do

    • drop the alphabet
    • get the char from the String the same way you currently do
    • subtract 'A' from it
    • use the resulting char as index to access the morse array
    • drop k and the entire while loop.