1

I am working on an assignment for a class and we are to create a "Multi Greeter" program. Here are the Specs:

Project Specs

I am having trouble with the getGreetings() method where I have to return a string array containing any greetings that may have been added to the greeter. I am getting this output currently:

enter image description here

The last line is the output in question. I need that to be an array of string values of the added greetings. I cannot use Arrays.toString() since it needs to return a String[] so I am officially stumped.

Here is my MultiGreeter class:

package edu.metrostate.ics240.p1.gaw886;
import java.util.Random;

public class MultiGreeter {
    private static final int MAX_NUM_GREETINGS = 25;
    private String defaultGreeting = "Hello";
    private String defaultName = "World";
    private String[] greetingList;
    private int greetingCount;
    private int maxGreets;

    public MultiGreeter(){
        greetingList = new String[MAX_NUM_GREETINGS];
        greetingList[0] = defaultGreeting;
        greetingCount = 1;
    }

    public MultiGreeter(int maxGreetings){
        maxGreets = maxGreetings;
        if (maxGreetings >= 0){
        greetingList = new String[maxGreetings];
        greetingList[0] = defaultGreeting;
        greetingCount = 1;
        }else{
            throw new IllegalArgumentException(String.format("Negative value detected MultiGreeter(%s)", maxGreetings));
        }
    }

    public int getMaxGreetings(){
        return greetingList.length;
    }

    public int getNumGreetings(){
        return greetingCount;
    }

    public Boolean addGreeting(String greeting){
        if (greetingCount == maxGreets ) {
            return false;
        }else{
        greetingList[greetingCount] = greeting;
        greetingCount++;
        return true;
        }
    }

    public String[] getGreetings(){
        String[] greetings = greetingList;
        return greetings;
    }

    public String greet(String name){
        int randomIdx = new Random().nextInt(greetingCount);
        String randomGreeting = greetingList[randomIdx];
        if (greetingCount == 1) {
            return String.format("\"%s, %s!\"", defaultGreeting, name);
        }else{
        return String.format("\"%s, %s!\"", randomGreeting, name);
        }
    }

    public String greet(){
        int randomIdx = new Random().nextInt(greetingCount);
        String randomGreeting = greetingList[randomIdx];
        if (greetingCount == 1) {
            return String.format("\"%s, %s\"", defaultGreeting, defaultName);
        }else{
        return String.format("\"%s, %s\"", randomGreeting, defaultName);
        }
    }   
}

Here is my MultiGreeter test class:

package edu.metrostate.ics240.ex1.tests.gaw886;

import edu.metrostate.ics240.p1.gaw886.MultiGreeter;

public class MultiGreeterTester {

    public static void main(String[] args) {
        MultiGreeter mg = new MultiGreeter();
        MultiGreeter mg1 = new MultiGreeter(10);

        mg.addGreeting("Bonjour");
        mg.addGreeting("Vilkommen");
        mg1.addGreeting("Namaste");
        mg1.addGreeting("Hello");
        mg1.addGreeting("Hello1");
        mg1.addGreeting("Hello2");
        mg1.addGreeting("Hello3");
        System.out.println(mg.getMaxGreetings());
        System.out.println(mg.getNumGreetings());
        System.out.println(mg.greet());
        System.out.println("\n");
        System.out.println(mg1.getMaxGreetings());
        System.out.println(mg1.getNumGreetings());
        System.out.println(mg1.greet());
        System.out.println(mg1.greet("Gabriel"));

        System.out.println(mg1.getGreetings());
    }

}

Thanks in advance for any help!

Gabriel_W
  • 1,645
  • 5
  • 16
  • 26
  • 3
    You can use `Arrays.toString()` on the return value. Eg: `System.out.println(Arrays.toString(mg1.getGreetings()));` – Titus May 13 '17 at 07:35
  • 1
    Sigh. That is *not* a reference address. It's the result of the `toString` function of `Object`. If you want the string content of an array, use `Arrays.toString(arrayName)`, not the `arrayName` itself. – RealSkeptic May 13 '17 at 07:36
  • This is not a duplicate. I cant use Arrays.ToString(). That would convert the String[] to a String which is not the return type. The specs specifically to return a String array not a String. – Gabriel_W May 13 '17 at 07:54
  • 1
    The problem is not in the data you return. The problem is when you are printing it. You use `Array.ToString` to *print* the results that you have returned. – RealSkeptic May 13 '17 at 11:04

0 Answers0