Java 1.7 运行时错误
Java 1.7 runtime error
我正在尝试解决此站点上的问题:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=979。但是我的部分代码抛出运行时错误:
class Main {
static String ReadLn (int maxLg) // utility function to read from stdin
{
byte lin[] = new byte [maxLg];
int lg = 0, car = -1;
String line = "";
try
{
while (lg < maxLg)
{
car = System.in.read();
if ((car < 0) || (car == '\n')) break;
lin [lg++] += car;
}
}
catch (IOException e)
{
return (null);
}
if ((car < 0) && (lg == 0)) return (null); // eof
return (new String (lin, 0, lg));
}
public static void main(String[] args){
Main jollyJumper = new Main();
jollyJumper.start();
}
public void start(){
String input;
while((input = ReadLn(3000)) != null){
System.out.println(answer(input));
}
}
public String answer(String line){
// The error comes from this function !!!
String[] items = line.split(" ");
int[] array;
try {
array = new int[items.length - 1];
}
catch(NegativeArraySizeException e){
return "Not jolly";
}
for(int i = 0; i < array.length; i++){
array[i] = Integer.parseInt(items[i +1]);
}
return "Jolly";
}
}
但是判断系统不会告诉我错误在哪里,在我的电脑上一切正常。有什么想法吗?
此代码段崩溃的一个简单原因是输入行连续包含多个 space。通过修剪数组并拆分一系列白色 space 字符来防止这种情况。
String[] items = line.split("\s+").trim();
实际上,连续两个space导致转换错误:
java.lang.NumberFormatException: For input string: ""
编辑 在 Q.
中进行大量编辑后
另一个错误(根据规范)使用
byte[3000]
用于读取可以包含计数和最多 3000 个整数的行。即使是一半的整数也必然需要超过 3000 个字符或字节。只需使用扫描仪。
最终方法 answer
没有解决问题。它只是转换数字,但所需的处理 - 检查连续数字的差异不超过限制,从 1 到限制的所有值都在那里 - 没有完成。
我正在尝试解决此站点上的问题:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=979。但是我的部分代码抛出运行时错误:
class Main {
static String ReadLn (int maxLg) // utility function to read from stdin
{
byte lin[] = new byte [maxLg];
int lg = 0, car = -1;
String line = "";
try
{
while (lg < maxLg)
{
car = System.in.read();
if ((car < 0) || (car == '\n')) break;
lin [lg++] += car;
}
}
catch (IOException e)
{
return (null);
}
if ((car < 0) && (lg == 0)) return (null); // eof
return (new String (lin, 0, lg));
}
public static void main(String[] args){
Main jollyJumper = new Main();
jollyJumper.start();
}
public void start(){
String input;
while((input = ReadLn(3000)) != null){
System.out.println(answer(input));
}
}
public String answer(String line){
// The error comes from this function !!!
String[] items = line.split(" ");
int[] array;
try {
array = new int[items.length - 1];
}
catch(NegativeArraySizeException e){
return "Not jolly";
}
for(int i = 0; i < array.length; i++){
array[i] = Integer.parseInt(items[i +1]);
}
return "Jolly";
}
}
但是判断系统不会告诉我错误在哪里,在我的电脑上一切正常。有什么想法吗?
此代码段崩溃的一个简单原因是输入行连续包含多个 space。通过修剪数组并拆分一系列白色 space 字符来防止这种情况。
String[] items = line.split("\s+").trim();
实际上,连续两个space导致转换错误:
java.lang.NumberFormatException: For input string: ""
编辑 在 Q.
中进行大量编辑后另一个错误(根据规范)使用
byte[3000]
用于读取可以包含计数和最多 3000 个整数的行。即使是一半的整数也必然需要超过 3000 个字符或字节。只需使用扫描仪。
最终方法 answer
没有解决问题。它只是转换数字,但所需的处理 - 检查连续数字的差异不超过限制,从 1 到限制的所有值都在那里 - 没有完成。