java.lang.ClassCastException: java.lang.StackOverflowError cannot be cast to java.lang.RuntimeException
at retrofit2.OkHttpCall.request(OkHttpCall.java:63)
at lfs.mortuary.CorpseService$1.onFailure(CorpseService.java:59)
at retrofit2.OkHttpCall.enqueue(OkHttpCall.java:99)
at lfs.mortuary.CorpseService.save(CorpseService.java:50)
at lfs.common.DAO.save(DAO.java:54)
at fastfx.view.InputFormDialog.saveOrUpdate(InputFormDialog.java:155)
at fastfx.view.InputFormDialog.lambda$0(InputFormDialog.java:131)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
我必须以给定的方式接受这些输入。这里(1和2),(2和3)和(4和5)必须输入一行作为输入。
这是我的代码段。
like Input is:
3
1 2
2 3
4 5
在C ++中实现
<?php
header('Content-Type: text/plain');
$testCase = (int) fgets(STDIN);
while($testCase--) {
$myPosition = (int) fgets(STDIN);
$liftPosition = (int) fgets(STDIN);
}
那么,如何在PHP中实现C ++代码?
答案 0 :(得分:2)
PHP中的等价物是:
<?php
header('Content-Type: text/plain');
$testCase = (int) fgets(STDIN);
while($testCase--) {
$input = fgets(STDIN);
$inputParts = preg_split("/[\s]+/",$input);
$myPosition = (int)$inputParts[0];
$liftPosition = (int)$inputParts[1];
}
这是因为您的示例中的C类型移位运算符将两个数字都作为单独的数字。它使用空白字符自动分隔。因此,您需要手动拆分PHP中的输入字符串。
答案 1 :(得分:1)
实际上,问题出在以下几行:
$myPosition = (int) fgets(STDIN);
在这里,显式转换为int会丢弃空格后的值,因此当您在命令行中输入1 2
时,(int)
会将其转换为1
而您正在失去另一个角色。
$arr = [];
$testCase = (int) fgets(STDIN);
while ($testCase--) {
list($a, $b) = explode(' ', fgets(STDIN));
$arr[] = $a.' '.$b;
}
print_r($arr);
上述解决方案有效,因为我已从(int)
的开头删除了fgets
。另请注意,我在这里使用list($a, $b)
,这实际上会在当前范围内创建两个变量$a and $b
,因此我总是假设,您将使用两个单独的数字(即:1 2),否则您可以使用$inputParts = preg_split("/[\s]+/",$input)
或explode
的其他内容从控制台的输入中形成数组。