2015-11-19 142 views
-2

我目前正在嘗試使用一系列Clean和髒數組來製作一個Palindrome Checker,雖然我已經得到它來編譯,但我有問題得到的代碼來檢測實際palindromesPalindromes and Arrays,努力沮喪

下面是有問題的代碼,任何和所有幫助將不勝感激。

import java.io.*; 
import java.util.Scanner; 
public class palindrome 
{ 
    public static void main (String[] args) throws IOException 
    { 
     File inputFile = new File ("Palindromes.txt"); 

     Scanner inputScan = new Scanner (inputFile); 

     String [] dirty = new String [20]; 

     int i = 0; 

     while (inputScan.hasNext()) 
     { 
      dirty[i] = inputScan.nextLine(); 
      System.out.println(dirty[i]); 
      i++; 
     } 
     inputScan.close(); 
     String [] clean = new String [i]; 
     String reverse =""; 
     for (int x = 0; x < clean.length; x++) 
     { 
      clean[x] = ""; 
      for (int z = length; z < dirty[x].length(); z--) 
      {    
       char test = dirty[x].charAt(z); 
       if (Character.isLetterOrDigit(test)) 
       { 
        test = Character.toLowerCase(test); 
        clean [x] += test; 
        if (clean[x].equals(clean[z])) 
        { 
         System.out.println(clean[z] +" is a palindrome"); 
        } else 
        { 
         System.out.println(clean[z] +" is NOT a palindrome"); 
        } 
       } 
      } 
     } 
     for (int j = 0; j < clean.length; j++) 
     { 
      System.out.println(clean[j]); 
     } 
    } 
+3

編寫一個方法來測試迴文屬性。而你目前的做法似乎很奇怪。 –

回答

1

你想要做這樣的事嗎?

import java.io.File; 
import java.io.IOException; 
import java.util.Scanner; 

public class Palindrome { 

    public static boolean isPalindrome(String s) { 
     s = s.toLowerCase().replaceAll("[\\s\\p{Punct}]", ""); 
     int len = s.length(), mid = len/2; 
     for (int x = 0; x < mid; x++) 
      if (s.charAt(x) != s.charAt(len - x - 1)) 
       return false; 
     return true; 
    } 

    public static void main(String[] args) throws IOException { 
     File inputFile = new File("Palindromes.txt"); 
     try (Scanner scanner = new Scanner(inputFile)) { 
      while (scanner.hasNextLine()) { 
       String s = scanner.nextLine(); 
       if (isPalindrome(s)) { 
        System.out.println(s + " is a palindrome"); 
       } else { 
        System.out.println(s + " is NOT a palindrome"); 
       } 
      } 
     } 
    } 
} 
+0

是的,這是我正在尋找,但我需要將文件輸入分爲兩個單獨的數組;一個「骯髒」的數組,它直接從文件中讀取代碼,還有一個「乾淨」數組刪除任何標點符號,間距和區分大小寫。有什麼辦法可以將這些數組實現到這個代碼中嗎? –

+0

@MaxGrant我編輯了答案,以從字符串中刪除所有標點符號,間距和區分大小寫。 –