Java 鄂尔多斯号UVa在线判断运行时错误
我正在解决JAVA编程挑战中的鄂尔多斯数字问题。 代码在我的机器上运行得很好。但是,在联机服务器上,它会导致运行时错误。谁能指出我犯的错误吗 这是密码Java 鄂尔多斯号UVa在线判断运行时错误,java,Java,我正在解决JAVA编程挑战中的鄂尔多斯数字问题。 代码在我的机器上运行得很好。但是,在联机服务器上,它会导致运行时错误。谁能指出我犯的错误吗 这是密码 import java.util.*; import java.io.*; class Main { private String inputLines[]; private String namesToBeFound[]; private String namesInEachBook[][]; private String searchIt
import java.util.*;
import java.io.*;
class Main
{
private String inputLines[];
private String namesToBeFound[];
private String namesInEachBook[][];
private String searchItem;
private boolean solnfound=false;
private static final BufferedReader br =new BufferedReader(new InputStreamReader(System.in));
static String read() throws IOException
{
String line;
while(true)
{
line=br.readLine();
if(line==null) break; //eof
else if(line.length()==0) continue; //blank line
else
{
line=line.trim().replaceAll("\\s+"," ");
return line;
}
}
return null;
}
public static void main(String args[]) throws IOException
{
Main ob=new Main();
int totalPapers,calcAuthors,totalScenarios;
//First input number of scenarios
totalScenarios=Integer.parseInt(read());
//Now start a loop for reading total number of scenarios
for(int scenario=1;scenario<=totalScenarios;scenario++)
{
//Now read the line containing the number of papers and authors
StringTokenizer line=new StringTokenizer(read()," ");
totalPapers=Integer.parseInt(line.nextToken());
calcAuthors=Integer.parseInt(line.nextToken());
//Read a line containing author names along with book names
ob.inputLines=new String[totalPapers];
for(int i=0;i<totalPapers;i++)
ob.inputLines[i]=read();
//Read a line containing the names to be searched
ob.namesToBeFound=new String[calcAuthors];
for(int i=0;i<calcAuthors;i++)
ob.namesToBeFound[i]=read();
//Now generate the array
ob.buildArray();
//Now search
System.out.println("Scenario "+scenario);
for(int i=0;i<calcAuthors;i++)
{
ob.searchItem=ob.namesToBeFound[i];
if(ob.searchItem.equals("Erdos, P."))
{
System.out.println("Erdos, P. 0");
continue;
}
ob.search(ob.namesToBeFound[i],1,new ArrayList());
if(ob.solnfound==false) System.out.println(ob.searchItem+" infinity");
ob.solnfound=false;
}
}
}
private void buildArray()
{
String str;
namesInEachBook=new String[inputLines.length][];
for(int i=0;i<inputLines.length;i++)
{
str=inputLines[i];
str=str.substring(0,str.indexOf(':'));
str+=",";
namesInEachBook[i]=new String[(countCommas(str)+1)>>1];
for(int j=0;j<namesInEachBook[i].length;j++)
{
str=str.trim();
namesInEachBook[i][j]="";
namesInEachBook[i][j]+=str.substring(0,str.indexOf(','))+",";
str=str.substring(str.indexOf(',')+1);
namesInEachBook[i][j]+=str.substring(0,str.indexOf(','));
str=str.substring(str.indexOf(',')+1);
}
}
}
private int countCommas(String s)
{
int num=0;
for(int i=0;i<s.length();i++)
if(s.charAt(i)==',') num++;
return num;
}
private void search(String searchElem,int ernosDepth,ArrayList searchedElem)
{
ArrayList searchSpace=new ArrayList();
searchedElem.add(searchElem);
for(int i=0;i<namesInEachBook.length;i++)
for(int j=0;j<namesInEachBook[i].length;j++)
{
if(namesInEachBook[i][j].equals(searchElem)) //Add all authors name in this group
{
for(int k=0;k<namesInEachBook[i].length;k++)
{
if(namesInEachBook[i][k].equals("Erdos, P.")) //Found
{
solnfound=true;
System.out.println(searchItem+" "+ernosDepth);
return;
}
else if(searchedElem.contains(namesInEachBook[i][k]) || searchSpace.contains(namesInEachBook[i][k])) continue;
searchSpace.add(namesInEachBook[i][k]);
}
break;
}
}
Iterator i=searchSpace.iterator();
while(i.hasNext())
{
String cSearchElem=(String)i.next();
search(cSearchElem,ernosDepth+1,searchedElem);
}
}
}
import java.util.*;
导入java.io.*;
班长
{
私有字符串输入行[];
私有字符串namesToBeFound[];
私有字符串名称INEACHBOOK[];
私有字符串搜索项;
私有布尔solnfound=false;
私有静态最终BufferedReader br=新BufferedReader(新InputStreamReader(System.in));
静态字符串读取()引发IOException
{
弦线;
while(true)
{
line=br.readLine();
if(line==null)break;//eof
如果(line.length()==0)继续,则为else;//空行
其他的
{
line=line.trim().replaceAll(“\\s+”,”);
回流线;
}
}
返回null;
}
公共静态void main(字符串args[])引发IOException
{
Main ob=新的Main();
int totalPapers、追踪者、totalScenarios;
//第一次输入场景数
totalScenarios=Integer.parseInt(read());
//现在开始一个循环,读取场景总数
对于(int方案=1;方案一个问题可能是:
totalScenarios=Integer.parseInt(read()),
如果输入的值不是int
,这可能引发NumberFormatException
。您需要使用try/catch来处理它。除了在输入不包含int
时可能生成的NumberFormatException
之外,该程序也不能很好地处理输入的终止
您也不使用任何记忆技术,每次都构建相同的搜索树,这将导致UVa判断出现超过时间限制错误
您还应该使用输入和输出的缓冲来进一步减少编译时间。减少对函数的调用,如果可能的话,将它们内联,即在同一范围内写入
希望这有助于查看此[链接][1]。此处提供的答案可能会解决您的问题。[1]:这意味着在线评委提供的输入不严格遵守上述规范。我们必须为输入提供单独的错误检查。