我无法终止我的java程序,它接受一些字符串作为输入,下面是我用来处理输入的代码
import java.util.Scanner;
public class EPALIN {
public static void main(String[]args)
{
Scanner sc = new Scanner(System.in);
String p = null;
while((p=sc.nextLine())!=null)
{
System.out.println(getPalin(p));
}
sc.close();
}
public static String getPalin(String st)
{
int i =0;
int j = st.length()-1;
String res = "";
while(i<=j)
{
if(st.substring(i, i+1).equals(st.substring(j, j+1)))
{
res+=st.substring(i, i+1);
i++;
j--;
}
else
{
res+=st.substring(i,i+1);
i++;
}
}
if(res.length()%2==0)
return res+(new StringBuffer(res).reverse().toString());
else
return res+(new StringBuffer(res).reverse().toString().substring(1));
}
}
即使使用
while((p=sc.nextLine())!="")
没有工作,这是来自SPOJ problemId EPALIN的问题
答案 0 :(得分:2)
做这样的事情
while(!(p=sc.nextLine()).equals("")) {
// ...
}
我尝试使用我正在使用的代码并且它似乎有效。
public static void main(String[]args)
{
Scanner sc = new Scanner(System.in);
String p = null;
while(!(p=sc.nextLine()).equals(""))
{
System.out.println(getPalin(p));
}
sc.close();
}
public static String getPalin(String st)
{
int i=0;
int j=st.length()-1;
String res = "";
while(i<=j)
{
if(st.substring(i, i+1).equals(st.substring(j, j+1)))
{
res+=st.substring(i, i+1);
i++;
j--;
}
else
{
res+=st.substring(i,i+1);
i++;
}
}
if(res.length()%2==0)
return res+(new StringBuffer(res).reverse().toString());
else
return res+(new StringBuffer(res).reverse().toString().substring(1));
}
}
答案 1 :(得分:1)
你应该使用hasNext()
String delimiter = "\r\n|\r"; //Or try System.getProperty("line.separator");
Scanner scanner = new Scanner(System.in);
scanner.useDelimiter(delimiter);
while (scanner.hasNext()) {
String p = scanner.next();
// ...
}
}
答案 2 :(得分:0)
请参阅扫描仪documentation。 Scanner.nextLine()
不会返回null。如果输入结束(例如,判断已将文件传送到stdin,并且文件结束),则它将抛出NoSuchElementException
。如果没有,nextLine()
将阻止。
通常你可以在这里做什么,因为problem description表示每个测试用例都在它自己的行上(类似于CandiedOrange所建议的):
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
...
}
然而,问题还说明:
大I / O.在某些语言中要小心。
在比赛问题术语中,这意味着“不要使用扫描仪”。对于快速I / O,您有几个选项,但是如下所示应该可以正常工作,同时保持您的时间限制:
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(
System.in));
String line;
while ((line = in.readLine()) != null)
doSomething(line); // etc
}
请注意,您很可能还必须收集所有输出并在最后打印,而不是制作一堆System.out.println()
,这些开销只能打印一次就可以避免。