2012-10-02 109 views
0

我需要編寫一個程序,從用戶處獲取一個字符串並測試它是否是迴文。這必須用嵌套循環完成:我不能寫一個方法來返回答案。我還必須繼續接受字符串輸入並測試它們,直到用戶輸入一個空行,此時程序打印「再見」並終止。我遇到的麻煩是在兩個可能的輸入點(是迴文,不是)之後讓程序接受輸入,然後在循環中使用新輸入,並且每次輸出相應的行。測試迴文嵌套循環只有

下面是輸出應該是這樣的:

輸入字符串:轉子

轉子是迴文。

輸入一個字符串:木乃伊

木乃伊不是迴文。

輸入字符串:

空行讀取。再見。

這是我迄今爲止,它測試每個輸入,並返回正確的說法,但不起任何作用,當輸入爲空:

System.out.print("Enter a string: "); 
String input = in.next(); 
if (input.length() > 0) { 
    int x = 0; 
    int y = input.length()-1; 
    while (x < y) { 
      if (input.charAt(x) == input.charAt(y)) { 
       x++; 
       y--; 
      } 
      else { 
       System.out.println(input + " is NOT a palindrome."); 
       System.out.println("Enter a string: "); 
       input = in.next(); 
      } 
      System.out.println(input + " is a palindrome."); 
      System.out.println("Enter a string: "); 
      input = in.next(); 
    } 
} 
else { 
    System.out.print("Empty line read - Goodbye!"); 
} 

有什麼想法?這是家庭作業,順便說一句,所以我不是在尋找答案,而是尋找線索,或者我需要看的東西。

+1

*「我不能寫一個方法來返回答案」* - 你可以也應該。將所有代碼放入'main'函數並不是很好的設計。僅僅因爲你使用循環並不意味着你不能將每個抽象級別移到它自己的函數中。 「遊戲循環」(請求重複輸入)可能在'main'中,但是當收到輸入時,它應該被傳遞給一個函數。該函數可能包含一個循環,儘管該循環的內容也可能作爲函數有意義。任何小的單一邏輯元素都應該在其自身的功能中。 – David

回答

2

OK,因爲這是你的功課,我只給你,你可以如何進行一個簡要說明: -

  • 由於需要不間斷的採取用戶輸入,所以可能你會需要一些其次,你需要詢問用戶什麼時候他要退出,所以你需要指定一個退出條件,這個循環可以持續到達到一個條件(你可以認爲,什麼樣的循環會在這裏結束)

  • ..

  • 三,檢查迴文,你需要檢查字符串與它的反向..

  • 既然你已經使用嵌套循環,您可以使用字符串輸入length,在你的循環條件.. 記住,你只需要循環到長度的一半。爲什麼,你需要找出..然後..比較第一個字符與去年2日最後,那麼第2個字符,直到字符匹配。您需要找出當你將退出循環..

我認爲這些信息會讓你開始..

另外還有一件事..可能是你使用任何方法的限制,但它是絕對不好的主意和醜陋的設計,在main()做任何事情..事實上,你的任何方法都不應該完成多於一項任務。尤其是你的main()方法理想情況下應該只有4-5行長。

編寫方法時,如果您認爲此部分有所不同,請將其移到另一個方法並調用它。這是您編碼的方式。

+0

添加了我到目前爲止的問題的代碼。當輸入爲空字符串時,我的問題似乎是讓程序打印出'再見'位。 – mattjulian

+0

@mattjulian ..這可能是因爲,你的空字符串包含一個換行符。在if中嘗試'input.replaceAll(「(\\ r | \\ n)」,「」).length()> 0'。 。 –

+0

@mattjulian。或者你可以嘗試'input.trim()。length()> 0' –