Java 每秒半个字符串

Java 每秒半个字符串,java,string,Java,String,我是一名编码初学者。我已经开始练习SPOJ的基本问题。是我试图解决的问题,但代码不正确 请帮助我,我在哪里把这个问题编码错了,因为我无法理解: public class Print2ndChar { public static void main(String[] args) throws java.lang.Exception { Print2ndChar mainObj = new Print2ndChar(); java.io.BufferedReader inputR

我是一名编码初学者。我已经开始练习SPOJ的基本问题。是我试图解决的问题,但代码不正确

请帮助我,我在哪里把这个问题编码错了,因为我无法理解:

public class Print2ndChar {
 public static void main(String[] args) throws java.lang.Exception {
    Print2ndChar mainObj = new Print2ndChar();

    java.io.BufferedReader inputReader = new java.io.BufferedReader(new java.io.InputStreamReader(System.in));
    String noOfTestCase;
    if(((noOfTestCase = inputReader.readLine()) == null))
        System.exit(0);
    int noOfLines = 0;

    try{
        noOfLines = Integer.parseInt(noOfTestCase);
    }catch(Exception e){
        System.exit(0);
    }
    if(noOfLines<0 || noOfLines>100)
        System.exit(0);

    String [] randomWords = new String[noOfLines];
    for(int i=0;i<noOfLines;i++){
        randomWords[i] = inputReader.readLine();
        if(randomWords[i] == null || randomWords[i].length()<2 ||  randomWords[i].length()%2!=0 || (randomWords[i].length()/2)>100)
            System.exit(0);
    }
    for (String word : randomWords){
        mainObj.letsBegin(word.substring(0, word.length() / 2));
        System.out.println();
    }
}

private void letsBegin(String data) {

    if (data.length() <= 0) {
        return;
    } else {
        System.out.print(data.charAt(0));
        if (data.length() >= 3)
            letsBegin(data.substring(2, data.length()));
    }
 }
}
公共类Print2ndChar{
公共静态void main(字符串[]args)引发java.lang.Exception{
Print2ndChar mainObj=新的Print2ndChar();
java.io.BufferedReader inputReader=new java.io.BufferedReader(new java.io.InputStreamReader(System.in));
字符串noOfTestCase;
if(((noOfTestCase=inputReader.readLine())==null))
系统出口(0);
int noOfLines=0;
试一试{
noOfLines=Integer.parseInt(noOfTestCase);
}捕获(例外e){
系统出口(0);
}
如果(中午100)
系统出口(0);
String[]randomWords=新字符串[noOfLines];

对于(int i=0;iOK!经过大量的尝试和尝试,我知道您的代码出了什么问题。您编写的代码由于条件
randomWords[i].length()而失败%2!=0
if
中。将此条件用于检查输入没有任何错误,但是如果选择示例测试用例,在突出显示的蓝色区域内,您会注意到每个字符串后面都有一个额外的空格。如下所示:

您可以看到,除了最后一次输入之外,所有其他输入字符串的末尾都有一个空格字符。因此,当您从
stdin
读取字符串时,字符串的长度是
2*k+1
(因为空格),并且您的程序将在没有任何输出的情况下退出。因此,您得到了错误的答案

这个问题可能也存在于其他测试用例中。我怎么知道呢?在spoj向您显示错误答案后,如果您单击错误答案,它将向您显示两个失败的测试用例,如下所示:

它显示程序的输出为空,因为您的代码由于字符串末尾的额外空间而退出。 因此,我认为编写测试用例的人应该得到一个WT错误(错误的测试用例):P:D

因此,可能的修正是从
if
中删除所提到的条件,得到AC。因为现在你将
2*k+1
除以
2
,这将不是一个整数,它将四舍五入到最接近的最小整数,这将与
2*k
除以
2
和th相同e程序将给出正确的结果

在解决有关spoj的问题时,您需要注意的几件事是,您不必验证每个输入是否在问题中指定的范围内,或者是否是有效的数据类型。该范围告诉您,spoj只会使用介于这些范围之间且不会超过这些范围的情况来测试您的程序。因此,即使如果删除所有检查异常和输入数据范围的代码,您将获得AC。此外,编写此类代码只会增加负担


希望这有帮助。:)

您能解释一下您面临的问题到底是什么吗?@user3765370问题的答案不正确。可能是在编码过程中遗漏了一些负面场景。我无法找出此解决方案的错误之处。您能提供什么是您的输入集,什么是您的输出。您正在尝试转换输入字符串,例如“abcdefgh”到整数
noOfLines=Integer.parseInt(noOfTestCase)
这是错误的,它会导致异常。@errolym保存在try and catch中。因此,如果提供了错误的输入,它将不会继续进行,因为它不符合问题陈述中指定的条件。还要感谢您告诉我测试失败的测试用例。现在可以很容易地测试和修复:)@xyz嗯,我认为spoj通常不会共享这是失败测试用例的细节,只是为了这个问题,或者可能是其他问题。