2010-02-21 8 views
8

Soy un principiante de Java, por favor tenlo en cuenta. Tengo que hacer un programa que lea un número, y luego muestra esa cantidad de signo de exclamación "!".java repeat character

Esto es lo que tengo:

import java.util.Scanner; 
import java.io.PrintStream; 

class E_HerhaalKarakter1 { 

PrintStream out; 

E_HerhaalKarakter1() { 
    out = new PrintStream(System.out); 
} 

String printUitroeptekens (int aantal) { 
    String output = "!" 

    for (int i = 0; i <= aantal; i++) { 
    output.concat("!"); 
    } 
    return output; 
} 

void start() { 
    Scanner in = new Scanner(System.in); 

    out.printf("Hoeveel uitroeptekens wilt u weergeven?\n"); 

    if(in.hasNext()) { 
    out.printf("baldbla"); 
    printUitroeptekens(in.nextInt()); 
    out.printf("%s",output); 
    } 
} 

public static void main (String[] argv) { 
    new E_HerhaalKarakter1().start(); 
} 
} 

Gracias

+3

Utilice Inglés (incluso en el código) cuando se le pide preguntas en un foro en inglés. –

+3

De hecho, mantenga al menos el código completo en inglés (todos los identificadores, nombres de clase, nombres de método, nombres de variables). Los mensajes se pueden mantener en holandés, pero preferiblemente se debe agregar un comentario en inglés para que quede claro. – BalusC

+1

Posible duplicado de: http://stackoverflow.com/questions/1235179/simple-way-to-repeat-a-string-in-java Mirar: [Commons Lang StringUtils.repeat()] (http: // commons.apache.org/lang/api-release/org/apache/commons/lang/StringUtils.html) –

Respuesta

4

Su programa no funciona porque String.concat() no cambia la cadena, pero devuelve una nueva cadena . Por ejemplo, "a" .concat ("b") es "ab". Por lo tanto, debe escribir output = output.concat("!") en lugar de output.concat("!").

Sin embargo, esto será muy ineficiente porque construir una cadena de n signos de exclamación tomará O (n^2) el tiempo (busque "nota grande oh" en google o wikipedia, vea también Schlemiel the Painter's algorithm).

Mire la documentación de la clase StringBuilder y úsela. Fue diseñado para construir cadenas de partes.

+0

Si la eficiencia es una preocupación, entonces definitivamente debe tener en cuenta que cualquier tipo de concatenación es innecesario para resolver este problema. Solo es necesaria la memoria de Omega (lg n). –

3

Parece que estás muy cerca, Tom.

En primer lugar, la forma normal para construir una String en Java es con la clase StringBuilder, así:

StringBuilder buf = new StringBuilder(aantal); 
while (aantal-- > 0) 
    buf.append('!'); 
return buf.toString(); 

Entonces, es necesario declarar una variable llamada output en el ámbito del método start(), y asignar el resultado del método printUitroeptekens() a esa variable, así:

String output = printUitroeptekens(in.nextInt()); 
out.printf("%s%n", output); 
3

su programa debe tener la siguiente estructura:

read number x 
repeat this x times 
    print '!' 

No hay nada en la declaración que requiera que realmente construyas una cadena por lo que yo sé.

+2

Probablemente sea un ejemplo ** simplificado ** para que comprendamos el problema. El problema real es probablemente mucho más complicado. – Martin

21

Si realmente tiene la obligación de crear una cadena que contiene un número X de signos de admiración, entonces esto es una manera de hacerlo sin concatenación repetida:

char[] exmarks = new char[aantal]; 
Arrays.fill(exmarks, '!'); 
String exmarksString = new String(exmarks);