Java - (我的第 4 个测试用例花费太长时间来提供输出)

Java - (My 4th test case taking too long to give output)

提问人:Pronay Sarker 提问时间:11/14/2023 最后编辑:Pronay Sarker 更新时间:11/14/2023 访问量:57

问:

我的 java 程序遇到了一些问题。我的程序的工作是,如果字数超过 10,那么它将粘贴第一个单词、它们之间的单词数 + 和最后一个单词

如果字数少于 10,那么它只会粘贴单词。

import java.util.Scanner;

public class Main {
    public static void main(String pkt[]) {
        Scanner sc = new Scanner(System.in);
        int loopnumber= sc.nextInt();
        sc.nextLine(); 

        while (loopnumber>0){

            String word = sc.nextLine();

            int length = word.length(); //to count String length
            int n= length-2; // wordcount between them

            if(length>10){ //will print first and last later of the string and the number-count between them
                System.out.println(word.charAt(0)+ "" + n + "" +word.charAt(length-1));
            }
            else {
                System.out.println(word);
            }
            loopnumber--;
        }
    }
}

当我输入时

4
word
localization
internationalization
pneumonoultramicroscopicsilicovolcanoconiosis

前三种情况运行良好。至于最后一个,即,我的程序花了太长时间来响应这个。大约30多秒...pneumonoultramicroscopicsilicovolcanoconiosis

但是当我刚刚输入

1
pneumonoultramicroscopicsilicovolcanoconiosis

然后我的程序运行良好。它提供即时输出。虽然两个测试用例()是相同的。pneumonoultramicroscopicsilicovolcanoconiosis

Java Eclipse 运行时

评论

0赞 teapot418 11/14/2023
使用提供的输入运行代码时,我无法重现任何延迟。如果超时来自某些自动判断程序,则可能是您在某处偏离了预期的输出格式。您是如何运行该程序的?
0赞 Sam 11/14/2023
如果确保最后一个单词后面有换行符,则其行为符合预期。我怀疑你复制它并粘贴它,没有一个。
0赞 Pronay Sarker 11/14/2023
@Sam 谢谢山姆...这次成功了。但是你介意解释一下为什么会这样吗?
0赞 Pronay Sarker 11/14/2023
@teapot418感谢您抽出宝贵时间回复。这次我只是复制粘贴代码强制输入,它起作用了。但我不知道为什么一开始会失败
0赞 Sam 11/14/2023
在行的末尾有一个换行符(如果是 Windows,则有一个回车符)。当您选择某些文本时,可能会也可能不会包含该字符。当您复制多行时,除了最后一行外,您不会错过它。在这种情况下,您错过了最后一行。这个遗漏的字符是 scanner 类处理该行的信号。

答:

0赞 Reilas 11/14/2023 #1

"...我的程序的工作是,如果字数超过 10,那么它会粘贴第一个单词、它们之间的单词数 + 和最后一个单词......”

作为参考,这些通常称为字符字符

下面是一个示例。
请注意,您可以跳过 nextLine 前进,而只使用 next 方法。

Scanner in = new Scanner(System.in);
String s;
int n = in.nextInt(), sn;
while (n-- > 0)
    if ((sn = (s = in.next()).length()) > 10)
        System.out.printf("%s%s%s%n", s.charAt(0), sn - 2, s.charAt(sn - 1));
    else System.out.println(s);

输出

4
word
word
localization
l10n
internationalization
i18n
pneumonoultramicroscopicsilicovolcanoconiosis
p43s