2010-02-21 71 views
8

Tôi là người mới bắt đầu sử dụng java, hãy ghi nhớ điều đó. Tôi phải thực hiện một chương trình đọc một số, và sau đó hiển thị số lượng dấu chấm than "!".ký tự lặp lại java

Đây là những gì tôi có:

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

Cảm ơn bạn

+3

Vui lòng sử dụng tiếng Anh (ngay cả trong code) khi hỏi câu hỏi trên diễn đàn tiếng Anh. –

+3

Thực sự giữ ít nhất toàn bộ mã tiếng Anh (tất cả các mã định danh; tên lớp, tên phương thức, variablenames). Tin nhắn có thể được giữ bằng tiếng Hà Lan, nhưng tốt nhất là thêm một bình luận tiếng Anh để làm cho nó rõ ràng. – BalusC

+1

Bản sao có thể có của: http://stackoverflow.com/questions/1235179/simple-way-to-repeat-a-string-in-java Nhìn vào: [Commons Lang StringUtils.repeat()] (http: // commons.apache.org/lang/api-release/org/apache/commons/lang/StringUtils.html) –

Trả lời

4

chương trình của bạn không hoạt động vì String.Concat() không thay đổi chuỗi, nhưng trả về một mới chuỗi. Ví dụ: "a" .concat ("b") là "ab". Vì vậy, bạn nên viết output = output.concat("!") thay vì output.concat("!").

Tuy nhiên, điều này sẽ rất không hiệu quả vì việc xây dựng một chuỗi dấu chấm than sẽ mất thời gian O (n^2) (tra cứu "ký hiệu oh lớn" trên google hoặc wikipedia, xem thêm Schlemiel the Painter's algorithm).

Xem tài liệu ở lớp StringBuilder và sử dụng nó. Nó được thiết kế để xây dựng dây từ các bộ phận.

+0

Nếu hiệu quả là một mối quan tâm, thì bạn nên lưu ý rằng bất kỳ loại nối nào là không cần thiết để giải quyết vấn đề này. Chỉ cần bộ nhớ Omega (lg n). –

3

Có vẻ như bạn rất thân thiết, Tom.

Thứ nhất, theo cách thông thường để xây dựng một String trong Java là với lớp StringBuilder, như thế này:

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

Sau đó, bạn cần phải khai báo một biến có tên output trong phạm vi của phương pháp start(), và gán kết quả của phương pháp printUitroeptekens() để biến đó, như thế này:

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

chương trình của bạn nên có cấu trúc này:

read number x 
repeat this x times 
    print '!' 

Không có gì trong câu lệnh yêu cầu bạn thực sự tạo chuỗi theo như tôi có thể biết.

+2

Nó có thể là một ví dụ ** đơn giản ** để chúng tôi hiểu được vấn đề. Vấn đề thực sự có thể phức tạp hơn rất nhiều. – Martin

21

Nếu bạn thực sự có nhu cầu để tạo ra một chuỗi có chứa X số dấu chấm than, thì đây là một cách để làm điều đó mà không cần nối lặp đi lặp lại:

char[] exmarks = new char[aantal]; 
Arrays.fill(exmarks, '!'); 
String exmarksString = new String(exmarks); 
Các vấn đề liên quan