2013-09-08 2 views
-1

Поэтому мне была задана следующая проблема, и я даже не знаю, с чего начать. Он хочет, чтобы палиндром вырвался из массива? Все исследования, которые я сделал онлайн о палиндроме, ни один из них не использует логические значения. Заранее спасибо. Программирование - это не моя сильная сторона, если не сказать больше.Логический палиндром в Java

Задача 2.1. (5 баллов) Напишите программу, которая принимает строку символов, заканчиваемую периодом, и определяет, является ли строка (без периода) палиндром. Предположим, что вход содержит только буквы и пробелы. Предположим также, что вход длиной не более 30 символов. Не принимайте во внимание пробелы при принятии решения о том, является ли строка палиндром и считают, что версия с одним и тем же буквой должна быть эквивалентной. Обеспечить статический метод палиндром

public static boolean palindrome(char[] a, int number) 

, который принимает массив символов, содержащий символы входной строки, и целое число, определяющее количество символов в строке.

ответ

2

Что он хочет, чтобы узнать, является ли последовательность символов в массиве палиндром. Вам не нужно возвращать какую-либо информацию об этом. Если вы все еще застряли, вот несколько советов:

  1. Это намного проще работать с String с, что char[] с. Попробуйте создать строку из массива и использовать ее в своих вычислениях.
  2. Может показаться, что параметр номер является излишним, но я был бы безопасным и построить строку, как это:

    new String(a, 0, number) 
    
  3. Теперь, вероятно, вы должны фильтровать строку, чтобы избавиться от заглавных букв и пробелов. Это избавляет от ненужной информации.
  4. Теперь, возможно, удалите средний символ строки, если таковой имеется. Это и число символов.
  5. Теперь разделите строку вдоль середины, переверните одну половину и сравните две половины. После этого вы знаете, является ли это палиндром, и все готово.
+0

Я думаю, что он, возможно, придется написать тело этого метода. –

+0

Я не пишу его для него. – tbodt

+0

Хорошо, я понимаю, что понимаю, что вы говорите. Я программирую неумело. –

0

Вы вытаскиваете палиндром из массива символов. Предположительно, ваш метод должен принимать массив символов длиной менее 30. Затем вы должны определить, образуют ли первые n-1 символы палиндрома.

Хорошим местом для начала будет цикл по длине массива, сравнивающий значения, убедитесь, что «A» должен быть равен «a».

+0

Итак, мне нужно создать массив разной длины 30 символов или короче? Я же говорил, что ничего не знаю о программировании. –

+0

Так что @kon - это то, где вступает в игру логическое значение? Является ли это истинным или ложным значением из массива? –

+0

@DerekPike Логическое значение - это то, что возвращается методом. Всякий раз, когда ваш метод выполняется, он возвращает true (если массив имеет палиндром) или false. Вам нужно прочитать массивы и изучить основы того, чем они занимаются, прежде чем решать эту проблему. – Kon

1

Я предполагаю, что вы знаете, что такое палиндром. Метод, который они просят написать, - это детектор палиндрома с некоторыми дополнительными функциями. Вы не создаете палиндром: вместо этого вы обнаруживаете, что строка, которую они вам дают, является палиндром или нет.

Алгоритм прост: вам нужны два индекса - одна звезда на нуле, другая начинается с number-1 (напомним, что массивы Java основаны на нуле). Найдите следующий непространственный символ с каждой стороны, преобразуйте его в верхний регистр и сравните. Если символы разные, верните false. В противном случае продвигайте два индекса друг к другу. Как только они пересекают посередине, верните true.

Примечание: по какой-либо причине они передают длину массива сбоку. Это имело бы смысл, если бы это было назначение в C, но в Java оно имеет нулевой смысл, потому что массив может сообщить о своей длине.

+0

@ daskblingenlight Да, я знаю, что такое палиндром. Но мне все равно пришлось это посмотреть. Спасибо за вход. Это задание стало намного яснее. Думаю, теперь я понимаю, где/как начать атаковать его. –

1

Я предположил, что вам разрешено использовать полный спектр Java API, в данном случае Arrays. Это было бы сделано легче с помощью String с, но так как требование использовать массивы, там вы идете:

public static boolean isPalindrome(char[] input, int length) 
{  
    // Remember the original array 
    char[] original = Arrays.copyOf(input, length); 

    char temp; 

    // Reverse the array. This could be optimised, it's your call 
    for (int i = 0; i < length/2; i++) 
    { 
     temp = input[i]; 
     input[i] = input[length - 1 - i]; 
     input[length - 1 - i] = temp; 
    } 

    // Use the Arrays helper again, to check for equality 
    // BE CAREFUL: This is not the same as original.equals(input) !!! 
    return Arrays.equals(original, input); 
}