任务是检查一个句子的每个单词中的数字,找到同时具有最大数字的单词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++;
}
答案 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>";
}
?>
另外,如果你需要最后一个合适的单词,那么从输入字符串的结尾开始会更有效。