2016-11-11 54 views
0

我的代码工作除了我必须通过一些Junit测试。它通过所有,但一个。当字符没有进入任何内容时,它会通过,输入大写,小写或两者的组合,并且当输入Hello World!时它会起作用。用户字符串输入。计数字符

public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    int[] textArray = new int[26]; 

    System.out.print("Enter text: "); 
    readText(input, textArray); 
} 

public static void readText(Scanner input, int[]text){ 
    char letter = 0; 

    if (input.hasNext() == false) { 
     System.out.println(); 
    } 
    else { 
     while (input.hasNext()) { 
      String a = input.nextLine(); 

      for (int i = 0; i < a.length(); i++) { 
       letter = a.charAt(i); 

       if (letter >= 'A' && letter <= 'Z') { 
        text[letter-65] = (text[letter-65]) + 1; 
       } 
       else if (letter >= 'a' && letter <= 'z') { 
        text[(letter - 32) - 65] = (text[(letter - 32) - 65]) + 1; 
       } 
       else if (letter == ' ') { 
        System.out.print(""); 
       } 
       else { 
        System.out.print(""); 
       } 
      } 
     } 
    } 

    String[] alphabet = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"}; 

    for (int y = 0; y < text.length; y++) { 
     if (text[y] > 0) { 
      System.out.println(alphabet[y] + ": " + text[y]); 
     } 
    } 
} 

Junit测试这个输入:1 2 3%n! ? >%N :) !!%N

预期的输出是

Enter text: 
    //empty line here 

但不是从我的代码输出

Enter text: //with no line after 

我不知道如何获得额外的行在不破坏我的其他junit测试之后。我尝试了一种方法,它的工作,但后来我的Hello World无法正常工作。

和实例时,其工作:
当我打运行控制台会说

输入文本:

我有一个扫描仪输入,这样用户会输入一些的话,它会是这样的在控制台

输入文本:有些话

然后将计算的次数使用每个字母和打印,为了安慰这样

输入文本:一些单词
d:1
E:1
M:1
○:2
R:1个
S:2
宽:1

如果我不当被问及时什么都不输入,只需按回车键输出是

输入文本:
//空行在这里

但是,当我进入

输入文本:1 2 3
? ! >
:)!

输出不会在最后添加额外的行。

+0

使用System.out.println(“输入文本:”)而不是System.out.print(“输入文本:”)。 –

+0

'System.out.println(“输入文本:”+“\ n”);'你需要在“输入文本”之后换行。如果你也想选中它,你可以使用'System.out。println(“Enter text:”+“\ n \ t”);' – Munib

+0

@ return0不能这样做,因为用户输入必须与“输入文本:” – Jay58t

回答

1

尝试使用System.out.println("Enter text: ");代替System.out.print("Enter text: ");

更新:后得到澄清您的要求,我建议使用下面的代码。

public static void readText(Scanner input, int[]text){ 
     char letter = 0; 

     while (input.hasNext()) { 
      String a = input.nextLine(); 

      for (int i = 0; i < a.length(); i++) { 
       letter = a.charAt(i); 

       if (letter >= 'A' && letter <= 'Z') { 
        text[letter-65] = (text[letter-65]) + 1; 
       } 
       else if (letter >= 'a' && letter <= 'z') { 
        text[(letter - 32) - 65] = (text[(letter - 32) - 65]) + 1; 
       } 
       else if (letter == ' ') { 
        System.out.print(""); 
       } 
       else { 
        System.out.print(""); 
       } 
      } 
     } 

     String[] alphabet = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"}; 

     boolean emptyOutput = true; 
     for (int y = 0; y < text.length; y++) { 
      if (text[y] > 0) { 
       System.out.println(alphabet[y] + ": " + text[y]); 
       emptyOutput = false; 
      } 
     } 
     if (emptyOutput) { 
      System.out.println(); 
     } 
    } 
+0

我已经厌倦了。我不能这样做,因为当用户输入文本时,它会在“输入文本:”的行中,当它应该在同一行上时。 – Jay58t

+0

为什么不添加一个 System.out.println(); 在你读取的行后输入 String a = input.nextLine(); – dammina

+0

我编辑了这篇文章。最后部分显示输出结果应该如何 – Jay58t