Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java - printing random word

Tags:

java

I'm having problems with an exercise. I need to print five random words, between min and max letters.

This is what I've done:

package Vjezba;
import acm.program.*;
import acm.util.RandomGenerator;

import java.util.*;

public class String2 extends ConsoleProgram {
public void run () {
    for (int i = 0; i<5; i++){
        String a = randomWord();
        println(a);
    }

}

private String randomWord() {
    int a = rgen.nextInt(MIN_LETTER, MAX_LETTER);
    for (int x=0; x<a; x++){
        String niz = "";
        char c = randomChar();
        niz += 'c';
    }
    return niz;

}



private char randomChar(){
    return (char) rgen.nextInt('a', 'z');
}

private static RandomGenerator rgen = new RandomGenerator();
private static int MIN_LETTER = 3;
private static int MAX_LETTER = 10;
    }

I have problems with returning String. Dunno how to do it.

like image 608
cyb3r Avatar asked Sep 20 '25 07:09

cyb3r


1 Answers

You're declaring your String inside your for loop; every time it loops you get a new (empty) String. You're also adding the character 'c', not the contents of your char c

String niz = "";
for (int x=0; x<a; x++){
    //String niz = "";
    char c = randomChar();
    niz += c; // c not 'c'
}

And while in this trivial case it doesn't really matter, a String in java is immutable - it can't be changed. Every time you do niz += c it creates a new string. Any time you're building a string you want to use a StringBuilder:

StringBuilder niz = new StringBuilder();
for (int x=0; x<a; x++){
    char c = randomChar();
    niz.append(c);
}
return niz.toString();
like image 129
Brian Roach Avatar answered Sep 22 '25 03:09

Brian Roach