2016-11-11 87 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