在 java at URI on line judge 中获取可能的运行时错误
Getting possible runtime error in java at URI on line judge
我正在尝试解决在线判断 URI 的问题,但可能会出现运行时错误。我努力找出错误,但无法理解我的代码在哪里生成异常。我知道这是由于我正在获取输入的代码,而不是在我找到 lcs 的部分。
如果有人能告诉我我哪里出错了或者任何证明了这个错误的测试用例,那将非常有帮助。 Here is the link to the problem
package URI;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class KidsGrid {
public static void main(String[] args) throws NumberFormatException, IOException{
// TODO Auto-generated method stub
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String s;
StringTokenizer st;
int T;
int caser=1;
T=Integer.parseInt(br.readLine().trim());
while(T>0)
{
String first="",second="";
char fir[],sec[];
fir=sec=null;
if((s=br.readLine())!=null)
{
s=s.trim();
st=new StringTokenizer(s);
int H=Integer.parseInt(st.nextToken());
int W=Integer.parseInt(st.nextToken());
char arr[][]=new char[H+1][W+1];
for(int i=1;i<=H;)
{
if((s=br.readLine())!=null)
{
for(int j=1;j<=W;j++)
{
arr[i][j]=s.charAt(j-1);
}
i++;
}
}
if((s=br.readLine())!=null)
{
s=s.trim();
st=new StringTokenizer(s);
int N=Integer.parseInt(st.nextToken());
int x=Integer.parseInt(st.nextToken());
int y=Integer.parseInt(st.nextToken());
first+=arr[x][y];
if(N>0&&(s=br.readLine())!=null)
{
s=s.trim();
for(int i=1;i<=N;i++)
{
switch(s.charAt(i-1))
{
case 'N':
x--;
break;
case 'S':
x++;
break;
case 'W':
y--;
break;
case 'E':
y++;
break;
}
first+=arr[x][y];
}
first=first.trim();
fir=first.toCharArray();
}
}
if((s=br.readLine())!=null)
{
s=s.trim();
st=new StringTokenizer(s);
int N=Integer.parseInt(st.nextToken());
int x=Integer.parseInt(st.nextToken());
int y=Integer.parseInt(st.nextToken());
second+=arr[x][y];
if((s=br.readLine())!=null)
{
s=s.trim();
for(int i=1;i<=N;i++)
{
switch(s.charAt(i-1))
{
case 'N':
x--;
break;
case 'S':
x++;
break;
case 'W':
y--;
break;
case 'E':
y++;
break;
}
second+=arr[x][y];
}
second=second.trim();
sec=second.toCharArray();
}
}
if(sec!=null && fir!=null)
{
int lcs[][]=new int[fir.length+1][sec.length+1];
for(int i=0;i<=fir.length;i++)
{
for(int j=0;j<=sec.length;j++)
{
if(i==0||j==0)
lcs[i][j]=0;
else if(fir[i-1]==sec[j-1])
lcs[i][j]=lcs[i][j-1]+1;
else
lcs[i][j]=Math.max(lcs[i][j-1],lcs[i-1][j]);
}
}
//System.out.println("Common"+ lcs[fir.length][sec.length]);
int a=fir.length-lcs[fir.length][sec.length];
int b=sec.length-lcs[fir.length][sec.length];
System.out.println("Case "+caser+": "+a+" "+b);
caser++;
T--;
}
//System.out.println("T="+T);
}
}
}
}
解决了problem.I在URI在线判断时由于输入文件中的额外空格导致可能出现的运行时错误。
br.readLine() 而不是 br.readLine().trim() 解决了我的问题。
我正在尝试解决在线判断 URI 的问题,但可能会出现运行时错误。我努力找出错误,但无法理解我的代码在哪里生成异常。我知道这是由于我正在获取输入的代码,而不是在我找到 lcs 的部分。
如果有人能告诉我我哪里出错了或者任何证明了这个错误的测试用例,那将非常有帮助。 Here is the link to the problem
package URI;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class KidsGrid {
public static void main(String[] args) throws NumberFormatException, IOException{
// TODO Auto-generated method stub
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String s;
StringTokenizer st;
int T;
int caser=1;
T=Integer.parseInt(br.readLine().trim());
while(T>0)
{
String first="",second="";
char fir[],sec[];
fir=sec=null;
if((s=br.readLine())!=null)
{
s=s.trim();
st=new StringTokenizer(s);
int H=Integer.parseInt(st.nextToken());
int W=Integer.parseInt(st.nextToken());
char arr[][]=new char[H+1][W+1];
for(int i=1;i<=H;)
{
if((s=br.readLine())!=null)
{
for(int j=1;j<=W;j++)
{
arr[i][j]=s.charAt(j-1);
}
i++;
}
}
if((s=br.readLine())!=null)
{
s=s.trim();
st=new StringTokenizer(s);
int N=Integer.parseInt(st.nextToken());
int x=Integer.parseInt(st.nextToken());
int y=Integer.parseInt(st.nextToken());
first+=arr[x][y];
if(N>0&&(s=br.readLine())!=null)
{
s=s.trim();
for(int i=1;i<=N;i++)
{
switch(s.charAt(i-1))
{
case 'N':
x--;
break;
case 'S':
x++;
break;
case 'W':
y--;
break;
case 'E':
y++;
break;
}
first+=arr[x][y];
}
first=first.trim();
fir=first.toCharArray();
}
}
if((s=br.readLine())!=null)
{
s=s.trim();
st=new StringTokenizer(s);
int N=Integer.parseInt(st.nextToken());
int x=Integer.parseInt(st.nextToken());
int y=Integer.parseInt(st.nextToken());
second+=arr[x][y];
if((s=br.readLine())!=null)
{
s=s.trim();
for(int i=1;i<=N;i++)
{
switch(s.charAt(i-1))
{
case 'N':
x--;
break;
case 'S':
x++;
break;
case 'W':
y--;
break;
case 'E':
y++;
break;
}
second+=arr[x][y];
}
second=second.trim();
sec=second.toCharArray();
}
}
if(sec!=null && fir!=null)
{
int lcs[][]=new int[fir.length+1][sec.length+1];
for(int i=0;i<=fir.length;i++)
{
for(int j=0;j<=sec.length;j++)
{
if(i==0||j==0)
lcs[i][j]=0;
else if(fir[i-1]==sec[j-1])
lcs[i][j]=lcs[i][j-1]+1;
else
lcs[i][j]=Math.max(lcs[i][j-1],lcs[i-1][j]);
}
}
//System.out.println("Common"+ lcs[fir.length][sec.length]);
int a=fir.length-lcs[fir.length][sec.length];
int b=sec.length-lcs[fir.length][sec.length];
System.out.println("Case "+caser+": "+a+" "+b);
caser++;
T--;
}
//System.out.println("T="+T);
}
}
}
}
解决了problem.I在URI在线判断时由于输入文件中的额外空格导致可能出现的运行时错误。 br.readLine() 而不是 br.readLine().trim() 解决了我的问题。