2016-11-25 102 views
2

我正在編寫一個家庭作業程序,我要用菜單修改字符串。其餘的代碼工作正常,除了一個部分,讓我在一個綁定。我正在使用一種方法來查找字符串中的單詞及其所有出現的位置。每當我在循環外執行這個方法時,我會得到我需要的結果,但是無論何時我在while或switch語句中使用它,程序都不會給我任何回報。該方法需要返回int的出現次數。這是該代碼的摘錄:我的程序方法不會輸出任何東西

import java.util.Scanner; 

    public class test { 
    public static Scanner scnr = new Scanner(System.in); 

    public static int findWord(String text, String userText) { 
     int occurance = 0; 
     int index = 0; 

     while (index != -1) { 
      index = userText.indexOf(text, index); 
      if (index != -1) { 
       occurance++; 
       index = index + text.length(); 
      } 
     } 

     return occurance; 
    } 

    public static void main(String[] args) { 

     System.out.println("Enter a text: "); 
     String userText = scnr.nextLine(); 

     System.out.println("Enter a menu option"); 
     char menuOption = scnr.next().charAt(0); 

     switch (menuOption) { 
     case 'f': 
      System.out.println("Enter a phrase from text: "); 
      String text = scnr.nextLine(); 

      int occurance = (findWord(text, userText)); 

      System.out.println("" + text + " occurances : " + occurance + ""); 
      break; 
     default: 
      System.out.println("Goodbye"); 
     } 

     return; 
    } 
} 

現在我已經注意到一些事情。如果我在方法內部提示用戶,我確實找回了我的整數,但沒有找到我正在查找的文本,以便在switch語句中完成我的println。每當我提示用戶輸入switch語句中的單詞時,我什麼也收不回來。如果有人對我有任何解決方案,我將不勝感激,因爲我不知道我可以忽略或失蹤。

+0

請了解如何調試您的代碼。所以你可以看到發生了什麼。出於某種原因,文本被讀爲空字符串,所以你的循環永遠不會結束(字符串「」在每個循環的索引0處找到!)。 – Heri

+0

原因可能是因爲您在循環中使用'nextLine()'後面的nextL()',因爲後者不會消耗最後一個換行符,所以必須發生此問題。你有沒有檢查這個線程?http://stackoverflow.com/questions/13102045/scanner-is-skipping-nextline-after-using-next-nextint-or-other-nextfoo –

回答

0

您需要將char menuOption = scnr.next().charAt(0);更改爲char menuOption = scnr.nextLine().charAt(0);

+0

ughhhh,謝謝youuuuuu – James

+0

哎呀,我的壞,得到它了! – James

0

問題是與你的Scanner方法,你與scnr.next()不斷閱讀,但是,如下圖所示,應改爲scnr.nextLine()`:

public static void main(String[] args) { 
     Scanner scnr = null; 
     try { 
      scnr = new Scanner(System.in); 

     System.out.println("Enter a text: "); 
     String userText = scnr.nextLine(); 

     System.out.println("Enter a menu option"); 
     char menuOption = scnr.nextLine().charAt(0); 

     switch (menuOption) { 
     case 'f': 
      System.out.println("Enter a phrase from text: "); 
      String text = scnr.nextLine(); 

      int occurance = (findWord(text, userText)); 

      System.out.println("" + text + " occurances : " + occurance + ""); 
      break; 
     default: 
      System.out.println("Goodbye"); 
     } 
     return; 
     } finally { 
      if(scnr != null) 
       scnr.close(); 
     } 
    } 

此外,確保你正在關閉掃描儀對象在finally區塊中正確。