简单的字符串程序,但输出错误,没有运行时错误

时间:2018-02-12 08:58:16

标签: java string

我正在解决HackerRank中的一个问题。

任务:

给定长度为N且从0到N-1索引的字符串S,将其偶数索引和奇数索引字符作为2个以空格分隔的字符串打印在一行上(有关详细信息,请参阅下面的示例) )。

输入格式

第一行包含一个整数T(测试用例数)。 T后续行的每一行i包含一个字符串S。

输出格式

对于每个String Sj(where),打印Sj的偶数索引字符,后跟空格,然后是Sj的奇数索引字符。

示例输入

2

哈克

等级

示例输出

Hce akr

Rn ak

以下是我写的代码:

public class Solution {

public static void main(String[] args) {
    /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    sc.nextLine();
    for(int i=0; i<=n; i++){
        String str = sc.nextLine();
        for(int j = 0; j< str.length() ; j++){
            if(j%2 ==0){
                System.out.print(str.charAt(j));
            }                
        }
        System.out.print(" ");
        for(int j = 0; j< str.length() ; j++){
            if(j%2==1 ){
                System.out.print(str.charAt(j));
            }
        }
        System.out.println();
    }
}

}

现在我的输出与测试用例输出不同:

测试用例0 您的代码未通过此测试用例。

输入(stdin)

2

哈克

等级

您的输出(标准输出)

_______________ //第一行被跳过但是如果我在循环结束时注释System.out.println那么两个字符串都在同一行上

Hce akr

Rn ak

预期输出

Hce akr

Rn ak

编译器消息

错误答案

我想知道我的计划有什么问题,据我所知,我没有犯任何错误。为什么在第一次String Manipulation之后它会退出循环?

以下是整个问题的链接: https://www.hackerrank.com/challenges/30-review-loop/problem

添加了一个问题 你可以看看我们是否在循环结束时放入System.out.println()我在输出中得到额外的行但是当我跳过它时我的程序运行正常但是因为我的输出之间没有换行符都粘在一起并且像这样:hce akrRn ak。你看这是我的主要问题。我希望以sperate行获得输出。

3 个答案:

答案 0 :(得分:2)

我在代码中发现的错误可能是失败的原因:

  

for(int i = 0; i&lt; = n; i ++)

应该有像i&lt; Ñ

此外,您正在逐个打印输出,即只要用户从您打印的第一个输入中打印出来。

2
Hacker
Hce akr
Rank
Rn ak

在这里,我修改了您正在使用的代码,希望您在使用之前先了解它:

public class Solution {
public static void main(String[] args) {
        /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        List<String> list = new ArrayList<String>();
        sc.nextLine();
        for(int i=0; i< n; i++){
            String str = sc.nextLine();
            String s1 ="";
            for(int j = 0; j< str.length() ; j++){
                if(j%2 ==0){
                    s1 = s1 + str.charAt(j);
                }                
            }
            s1 = s1 + " ";
            for(int j = 0; j< str.length() ; j++){
                if(j%2==1 ){
                    s1 = s1 + str.charAt(j);
                }
            }
            list.add(s1);
        }
        for(int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
    }
}

答案 1 :(得分:0)

我认为期望是一次性采取所有投入。 意思是,一旦给出了单词的数量,读取所有单词然后打印输出。由于问题不明确,我基于我的假设回答。

答案 2 :(得分:0)

问题不在于:

  

_______________ //第一行被跳过,但如果我评论系统

     循环结束时的

.out.println然后两个字符串都在同一行

,但是:

for(int i=0; i<=n; i++) { ...

...和

  

错误(stderr)

     

线程中的异常&#34; main&#34; java.util.NoSuchElementException:找不到行       at java.util.Scanner.nextLine(Scanner.java:1585)       在Solution.main(Solution.java:14)

...与:

for(int i=0; i<n; i++) { //!!

,你会得到:

  恭喜,你解决了这个挑战!   挑战你的朋友:   测试用例#0   测试案例#1   测试案例#2   测试案例#3   测试案例#4   测试案例#5   测试案例#6   测试案例#7   测试案例#8   测试案例#9

......小风格和效率提升将是:

...
for(int j = 0; j<str.length() ; j+=2){//!!
    // no if!
    System.out.print(str.charAt(j));
}
System.out.print(" ");
for(int j = 1; j< str.length() ; j+=2){//!!
    //no if!       
    System.out.print(str.charAt(j));
}
...