【问题标题】:Why does this work? Are Java rounding down?为什么这行得通? Java 是否四舍五入?
【发布时间】:2014-11-29 11:57:44
【问题描述】:
public class StringTest{
  public static void main(String[] args){
       String a = "Aphex";
       int len  = a.length();
       int lenA = len/2-1;
       int lenB = len/2+2;
       if(len%2==0){
           System.out.println("Number of letters has to be odd");
       }else{
           System.out.println(a.substring(lenA, lenB))   }}}

Output:
phe

这个简单的代码可以获取任何具有奇数个字母的字符串并找到三个中心字母。我的问题是——为什么 center 从中间下降一个位置(len/2-1) 然后上升两个位置?反过来不行(len/2-2len/2+1) .

Java 总是四舍五入吗?

【问题讨论】:

  • 我做到了!这增加了更多的混乱。你降落在一个字母/数字的中间。我对 Java 很陌生,所以我只是想知道 Java 是否总是以相同的方式舍入以供将来参考。

标签: java string substring


【解决方案1】:

您正在整数上下文中进行除法。两个int相除时,只保留结果的整数部分,余数被丢弃。例如,29/10 将导致 2

【讨论】:

    【解决方案2】:

    我的问题是——为什么中心从中间下降一个位置 (len/2-1) 然后上升两个位置?反之则不行(len/2-2len/2+1)。

    发生这种情况是因为substring() 采用的范围包括开始索引,但 包括结束索引。引用documentation

    子字符串从指定的beginIndex 开始并延伸到索引endIndex - 1 处的字符。

    因此实际范围是[len/2-1; len/2+1],并且围绕中心字符len/2对称。

    (是的,当您将奇数除以 2 时,结果会朝零四舍五入。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多