我的程序正在运行但不是我想要的方式。这是我想要的输出:
C:\Documents and Settings\Joe King\My Documents\418.85A Java\Projects\Day 6>java Project3 nina pinta "santa maria"
The Nina is decreasing throttle!
The Nina is ready to launch...
but the throttle is down, increase throttle!
The Pinta is lowering the main!
The Pinta is ready to launch...
but the sail is down, hoist the main!
The Santa Maria is hoisting the main!
The Santa Maria is ready to launch...
the sail is up, ahead full!
(press ENTER to exit)
如您所见,Santa Maria已被资本化。这是我得到的输出:
C:\Documents and Settings\Joe King\My Documents\418.85A Java\Projects\Day 6>java Project3 nina pinta "santa maria"
The Nina is decreasing throttle!
The Nina is ready to launch...
but the throttle is down, increase throttle!
The Pinta is lowering the main!
The Pinta is ready to launch...
but the sail is down, hoist the main!
The santa maria is hoisting the main!
The santa maria is ready to launch...
the sail is up, ahead full!
(press ENTER to exit)
我的代码无法像Santa Maria那样大写名称字符串。这是我的代码:
class Project3{
public static void main(String[] args){
Boat[] boatArray;
String result = " ";
char firstChar;
char firstLetter;
char secondLetter;
int i;
boatArray = new Boat[args.length];
if(args.length > 0){
for(i = 0 ; i < args.length ; i++){
String delimiters = "[ ]";
int limit = -1;
String[]tokens = args[i].split(delimiters, limit);
for( int k = 0 ; k < tokens.length ; ++k ){
if( tokens[k].length() > 1 ){
tokens[k] = tokens[k].trim();
}else{
tokens[k] = " ";
}
firstChar = tokens[k].charAt(0);
if(firstChar == ' '){
break;
}else{
if(Character.isUpperCase(firstChar)){
break;
}else{
firstChar = Character.toUpperCase(firstChar);
char[] tokenArray = tokens[k].toCharArray();
String text = new String(tokenArray, 1, (tokenArray.length - 1) );
tokens[k] = firstChar + text;
}
result = result + tokens[k];
if( k != tokens.length - 1 ){
break;
}else{
result = result.trim();
args[i] = result;
result = " ";
}
}
}
firstLetter = args[i].charAt(0);
if((firstLetter == 'B') || (firstLetter == 'C') || (firstLetter == 'N')){
boatArray[i] = new RaceBoat();
boatArray[i].christenBoat(args[i]);
}else{
boatArray[i] = new SailBoat();
boatArray[i].christenBoat(args[i]);
}
}
System.out.println("\n");
for(i = 0 ; i < args.length ; i++){
secondLetter = Character.toUpperCase(args[i].charAt(1));
if((secondLetter == 'A') || (secondLetter == 'E')){
boatArray[i].increaseSpeed();
boatArray[i].goFast();
}else{
boatArray[i].decreaseSpeed();
boatArray[i].goSlow();
}
boatArray[i].launchBoat();
boatArray[i].whatIsBoatState();
}
}else{
System.out.println("\n\nArgh!... you forgot to enter ship names scalawag!" +
"\n\n\n\tPlease try again!");
}
System.out.println("\n\n(press ENTER to exit)\n\n");
try{
System.in.read();
} catch(IOException e){
return;
}
}
}
认为解决圣玛丽亚的问题可能导致以下问题:
' santa '
' '
' maria '
我认为这段代码会修剪它:
if( tokens[k].length() > 1 ){
tokens[k] = tokens[k].trim();
}else{
tokens[k] = " ";
}
但显然没有。我该如何做到这一点?
答案 0 :(得分:1)
看看Commons-Lang StringUtils.capitalize
函数。
如果您想了解专业人士如何制作,您可以获得有用的源代码:)
这可能会使你的话更加充实。
StringBuilder b = new StringBuilder();
String[] parts = originalWord.split(" ");
for(String part : parts) {
String capitalized = part.substring(0, 1).toUppercase() + part.substring(1);
b.append(capitalized).append(" ");
}
//and then you can remove the last space if it is your taste.
return b.toString();
缺乏基本检查,但它可以:)。
祝你好运!
答案 1 :(得分:1)
我认为这段代码会修剪它......
实际上,该代码也会用空格替换任何一个字母的单词。
另一个问题是您正在使用的正则表达式。您希望将一个或多个空格视为SINGLE分隔符。请参阅javadocs和/或您的教科书和讲义,了解如何编写正则表达式。 (注意:如果你做对了,就不需要修剪空格了.Split会为你做这件事。)
足够的提示: - )
我也考虑过这一点,但大多数船名都没有英文单字母。
你不应该把这样的假设硬连接到你的代码中。特别是当你不需要的时候。硬连线假设导致代码脆弱;即,当您的假设结果不正确时,代码会中断sometimes。
答案 2 :(得分:0)
你的问题是你正在使用休息;在许多地方,这将终止循环,因此根本不会处理单词。可能你只想跳过当前的单词/ arg,所以你应该使用continue来继续下一个索引的for循环。
您可以使用调试器或添加一些中间printf语句来更好地理解代码流。