我正在尝试编写一个不带任何参数并返回一个double值的公共方法costMultiplier()。对于以“ WC1A”或“ EC1A”开头的邮政编码,该方法应返回1.2,否则返回1.0。
public double costMultiplier()
return double
现在我卡住了!非常感谢
答案 0 :(得分:1)
您的方法很可能看起来像这样:
public double costMultiplier(final String postCode) {
double multiplier = 1.0d; // Default
// Trim off leading/trailing spaces and ensure Uppercase.
String pc = postCode.trim().toUpperCase();
if (pc.startsWith("WC1A") || pc.startsWith("EC1A")) {
multiplier = 1.2; // For London
}
return multiplier;
}
您将为此方法提供特定的邮政编码,例如:
double multiplier = costMultiplier("EC1A 9DT");
System.out.println("Determined Multiplier = " + multiplier);
问:A)“为什么costMultiplier应该是公开的而不是私有的?”
如果您希望此方法被项目中除该类之外的其他类使用,请将该方法声明为 public 。如果只希望该方法可用于该类,请将该方法声明为私有。
问:B)“此外,我认为对于这部分,字符串方法substring()应该 被使用?”
您为什么认为应该使用 String#substring()?仅使用 String#startsWith()方法要容易得多,并且我们不必担心会提供可能导致 StringIndexOutOfBoundsException 的无效索引值。
实际上两者都可以使用,但是为简单起见,在某些情况下使用 String.startsWith()方法更有意义。 String#startsWith()方法仅返回一个布尔值,该布尔值指示提供给该方法的字符串是否包含在对其进行播放的字符串(或字符串变量)的开头:
String postCode = "EC1A 9DT";
System.out.println(postCode.startsWith("EC1A"));
// Prints true in console.
String#substring()方法从字符串(或字符串变量)中返回一个切片,该方法基于偏移量和计数值对它进行播放。为了获得布尔值,您需要将该切片与您要确认存在相同偏移量和计数的字符串进行比较:
String postCode = "EC1A 9DT";
System.out.println(postCode.substring(0, 4).equals("EC1A"));
// Prints true in console.
但是:
String postCode = ""; // OR postCode = "EC1"
System.out.println(postCode.substring(0, 4).equals("EC1A"));
// A StringIndexOutOfBoundsException is thrown!
而如果:
String postCode = ""; // OR postCode = "EC1"
System.out.println(postCode.startsWith("EC1A"));
// Prints false in console.
我认为,在使用String#substring()方法时,应使用一种机制来确保计划切分的字符串足够大,以处理传递给该方法的偏移和计数,尤其是当您没有该字符串可能包含的线索或保证:
String postCode = "e3e"; // String is too short.
boolean trueFalse = false;
if (postCode.length() > 3) {
trueFalse = postCode.substring(0, 4).equals("EC1A");
}
System.out.println(trueFalse);
// Prints false in console.
这是优先事项。您决定要使用哪个 String#startsWith()或 String#substring()。