以下哪项是实施构建器模式的更好方法?
1)使用对象构建而不是构建器中的所有属性(并在构建器构造器中创建它):
public class Person {
private String firstName;
// other properties ...
private Person() {}
// getters ...
public static class Builder {
// person object instead of all the person properties
private Person person;
public Builder() {
person = new Person();
}
public Builder setFirstName(String firstName) {
person.firstName = firstName;
return this;
}
// other setters ...
public Person build() {
if (null == person.firstName) {
throw new IllegalStateException("Invalid data.");
}
return person;
}
}
}
Run Code Online (Sandbox Code Playgroud)
2)直接在构建器中使用对象的属性来构建而不是对象(并在build()方法中创建它):
public …Run Code Online (Sandbox Code Playgroud) 是否允许使用scanf(" ")没有其他参数来忽略初始空格?
我正在getchar()阅读一个单词的字符,我想忽略单词之前的空格(后面用空格来检查单词的结尾).
代码如下,是否正确?
char *read_word() {
int size = 2;
int char_count = 0;
char *s;
char ch;
s = mem_alloc(size);
scanf(" ");
while ((ch = getchar()) != EOF) {
if (char_count >= size) {
s = mem_realloc(s, size++);
}
if (ch == ' ' || ch == '\n') {
s[char_count] = '\0';
break;
}
s[char_count++] = ch;
}
return s;
}
Run Code Online (Sandbox Code Playgroud) 我是Erlang的新手,我不知道如何解决此练习。
我需要通过将长字符串划分为N个子字符串来反转长字符串,反转单个子字符串,然后将它们加入以获得原始字符串的反转。每个子字符串需要通过不同的过程反转。
我的问题是:
1)如何将字符串分成N个大小相等的子字符串?
2)如何加入其他进程收到的字符串?
有人可以给我示例代码吗?这是我所做的,但缺少主要部分:
% This function should split the string, spawn the processes
% and recombine the results
reverse(Str, N) -> % ...
sub_reverse() ->
receive
{ From, SubStr } -> From ! { self(), lists:reverse(SubStr) }
end.
Run Code Online (Sandbox Code Playgroud)