2010-02-21 4 views
8

Jestem początkującym java, proszę o tym pamiętać. Muszę zrobić program, który odczytuje liczbę, a następnie wyświetla tę liczbę wykrzyknika "!".java powtórzyć postać

To jest to, co mam:

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(); 
} 
} 

Dziękuję

+3

Proszę używać języka angielskiego (nawet w kodzie), gdy pyta pytania na angielskim forum. –

+3

Rzeczywiście zachowaj co najmniej cały kod angielski (wszystkie identyfikatory, nazwy klas, nazwy metod, zmienne nazwy). Wiadomości mogą być przechowywane w języku niderlandzkim, ale najlepiej dodaj komentarz w języku angielskim, aby było jasne. – BalusC

+1

Możliwy duplikat: http://stackoverflow.com/questions/1235179/simple-way-to-repeat-a-string-in-java Spójrz na: [Commons Lang StringUtils.repeat()] (http: // commons.apache.org/lang/api-release/org/apache/commons/lang/StringUtils.html) –

Odpowiedz

4

Twój program nie działa, ponieważ String.concat() nie zmienia ciąg, ale zwraca nowy ciąg. Na przykład "a" .concat ("b") to "ab". Powinieneś więc napisać output = output.concat("!") zamiast output.concat("!").

Jednak będzie to bardzo nieefektywne, ponieważ budowanie ciąg n wykrzyknikami zajmie O (n^2) czas (look up "wielki oh zapis" na google lub wikipedia, patrz także Schlemiel the Painter's algorithm).

Przejrzyj dokumentację do klasy StringBuilder i użyj jej. Został zaprojektowany do budowania sznurków z części.

+0

Jeśli wydajność jest problemem, to należy zdecydowanie zauważyć, że jakiekolwiek połączenie nie jest konieczne, aby rozwiązać ten problem. Potrzebna jest tylko pamięć Omega (lg n). –

3

Wygląda na to, że jesteś bardzo blisko, Tom.

Najpierw normalny sposób zbudować String w Javie jest z klasą StringBuilder, tak:

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

Następnie trzeba zadeklarować zmienną o nazwie output w zakresie sposobu start(), i przypisać wynik metody printUitroeptekens() do tej zmiennej, tak:

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

Twój program powinien mieć taką strukturę:

read number x 
repeat this x times 
    print '!' 

W wyciągu nie ma nic, co wymagałoby zbudowania sznurka, o ile wiem.

+2

Jest to prawdopodobnie ** uproszczony ** przykład dla nas, aby zrozumieć problem. Prawdziwy problem prawdopodobnie będzie o wiele bardziej skomplikowany. – Martin

21

Jeśli faktycznie ma wymogu, aby utworzyć ciąg, który zawiera X liczba wykrzykników, to oto sposób to zrobić bez wielokrotnego konkatenacji:

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