超出范围的例外问题

时间:2017-12-26 07:39:28

标签: java loops indexoutofboundsexception

任务是检查一个句子的每个单词中的数字,找到同时具有最大数字的单词POWER OF 3.我在这里做了所有的事情并且工作正常直到我在句子以数字结尾

例如:

输入:Iam8 you64 asjkj125 asdjkj333 heis21 6 OutOfBounds

输入:Iam8 you64 asjkj125 asdjkj333 heis216 s heis216s是目标词

然后它会超出范围,我已经(至少我认为我)发现了哪里,但我不知道如何避免这种情况而不改变这种计算的想法。

以下是发生这种情况的代码:

for (int i = 0; i < r.length(); i++) {

    current+= r.charAt(i);
    if (r.charAt(i) == ' ' || i = r.length()-1) { 
        for (int j = 0; j < current.length(); j++) {
            while ((int) current.charAt(j) > 47 && (int) current.charAt(j) < 58) {
  

//如果是最后一个                最后一个字的字符是一个数字,j递增,我们结束   超出范围。

                        br = br + current.charAt(j);
                   j++;
                }

Complete code

3 个答案:

答案 0 :(得分:1)

即使在处理完最后一个字符串后仍在处理

current,因此发生StringIndexOutOfBoundsException异常。由于正在处理current字符串,因此j的检查应该是current的长度。在j < current.length()循环中添加while的检查,如while ( j<current.length() && (int) current.charAt(j) > 47 && (int) current.charAt(j) < 58)

答案 1 :(得分:0)

使用split方法获取此句子的标记。

对于每个令牌,从ascci数字的索引开始,直到令牌的长度,将存储在映射中的数字作为值和字符部分作为键。

然后处理map的值以获得3的幂,然后得到它的键值并相应地返回单词。

答案 2 :(得分:0)

  

while(j&lt; current.length()&amp;&amp;(int)current.charAt(j)&gt; 47&amp;&amp;(int)current.charAt(j)&lt; 58){                           br + = current.charAt(j);                           J ++;                       }

我只改变了这一点,不再看到OutOfRange异常了。 如果我理解你的任务正确,代码看起来很复杂,你使用String进行计算,这是无效的。看看这种方法:

 <?php
error_reporting(1);
header("Content-type: text/xml; charset=utf-8");
$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => "https://www.misli.com/scripts/BetList.aspx?action=get&BetTypeId&3",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_TIMEOUT => 30,
CURLOPT_SSL_VERIFYPEER => false,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  //CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => array(
    "accept: application/json",
  ),
));
$ok = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
echo "<Maclar>";

                if($ok->BetTypeId=="3")
                {
                $tarih = $ok->CloseDate;
                $ulke = $ok->CountryName;
                echo '<ulke="'.$ulke.'" tarih="'.$tarih.'" />'; 
                }
    echo "</Maclar>";
}
?>

另外,如果你需要最后一个合适的单词,那么从输入字符串的结尾开始会更有效。