Java,声明的顺序?

时间:2017-09-14 21:39:01

标签: java

我是Java的新手,也是编码新手。我在codingBat上尝试一个热身问题。当我在第一个if条件之后切换语句代码有效并且我不知道为什么。

这就是问题:

  

给定一个字符串,如果字符串以“hi”和false开头,则返回true   否则。

startHi("hi there") → true
startHi("hi") → true
startHi("hello hi") → false

以下是我首先尝试的代码:

  public boolean startHi(String str)

           {
        **String str2= str.substring(0,2);** **//gives error using parameter less than 2 characters long.** 



/*
        **//startHi("h") → false
        StringIndexOutOfBoundsException: String index out of range: 2 (line:3)**

*/

          if (str.length()<2)
          {
            return false;
          }


          if (str2.equals("hi"))
          {
            return true;
          }
          else
          {
            return false;
          }

        }

移动时,它是正确的并通过测试。没有错误。

public boolean startHi(String str)
{


  if (str.length()<2)
  {
    return false;
  }

     **String str2= str.substring(0,2);** //now I magically work

  if (str2.equals("hi"))
  {
    return true;
  }
  else
  {
    return false;
  }

}

任何人都可以用相对简单的术语告诉我为什么在if语句下面移动那个声明让它起作用?

1 个答案:

答案 0 :(得分:0)

说,你有一个只有一个字符的字符串。

如果您尝试substring(0,2),则尝试阅读2个字符,但只有一个字符。这会引发错误。

如果您首先放置length()<2条件,并且只有一个字符returns false。 return语句立即结束该函数。以下代码无法访问。它没有执行。因此,没有错误。

您应首先检查以阻止这些错误。

还有一种内置方法可以做到这一点。试试str.startsWith("Hi")