我正在尝试创建将读取文件并识别位于整数数组中间的回文(即5 8 6 11 22 33 44 33 22 11 6 7)的代码。我一直坚持如何做,而我一直在网上进行的研究仅针对从始至终完全是回文的阵列提供解决方案(即11 22 33 44 33 22 11)。
并且还要在新文件中仅打印回文。
我一直在网上进行的研究仅针对从始至终完全是回文的阵列(即11 22 33 44 33 22 11)提供解决方案。
这里是代码的文件,以防打印不正确:
https://docs.google.com/document/d/1m8VzecxiRYheNTvnvW8i00t9I26cayaj3evteXXDaeQ/edit?usp=sharing
import java.io.*;
import java.util.Scanner;
import javax.swing.JOptionPane;
public class Program_11_1
{
// ITP_120-002N; LEE Program_11_1
public static void main(String[] args)
{
String file_name;
String outputFileName = null;
String done_string = "done";
boolean done = false;
while (!done)
{
file_name = JOptionPane.showInputDialog("Enter a file
name"
+ " or done to exit: ");
if (file_name.equals(done_string))
{
done = true;
JOptionPane.showMessageDialog(null,
"EXITING");
}
else
{
Scanner input = get_Scanner(file_name);
Scanner input_counter =
get_Scanner(file_name);
//JOptionPane.showMessageDialog(null, "File "
+ file_name + " found ");
outputFileName =
JOptionPane.showInputDialog(null, "Enter the output file name: ");
PrintWriter output_writer =
get_Writer(outputFileName);
//JOptionPane.showMessageDialog(null, "created
output file: " + out_file_name);
if ((input != null && output_writer != null &&
input_counter != null))
{
//********TASK
CODE**************
int num_ints =
size(input_counter);
int[] int_array =
return_Array(num_ints);
fill_Array(int_array,
input);
int palin_drome[] =
palin_Drome(int_array);
print_Array(ordered_array, output_writer);
//*******END TASK CODE************
}
input.close();
input_counter.close();
output_writer.close();
}
}
}
public static Scanner get_Scanner(String file_name) {
try
{
File file_in = new File(file_name);
Scanner input = new Scanner(file_in);
return input;
}
catch (FileNotFoundException e) {
JOptionPane.showMessageDialog(null, "File " +
file_name + " not found");
return null;
}
}
public static PrintWriter get_Writer(String out_file_name) {
try
{
PrintWriter output_writer = new
PrintWriter(out_file_name);
return output_writer;
}
catch (FileNotFoundException e)
{
JOptionPane.showMessageDialog(null, "output file
FAILED");
return null;
}
}
public static int size (Scanner input_file) {
int counter = 0;
while (input_file.hasNext()) {
input_file.nextInt();
counter++;
}
return counter;
}
public static int[] return_Array(int count) {
int[] hold_ints = new int [count];
return hold_ints;
}
public static void fill_Array(int[] int_array, Scanner input) {
int index = 0;
for (int val : int_array) {
int_array[index] = input.nextInt();
index++;
}
}
public static int[] palin_Drome(int[] un_ordered) {
}
}
}
return un_ordered;
}
public static void print_Array(int[] ordered, PrintWriter
output_writer) {
for(int i = 0; i < ordered.length; i++) {
output_writer.print(ordered[i]);
output_writer.print(" ");
}
}
}
这是您可以合并到Swing代码中的Java代码。它找出第一个最长的回文,然后停下来。
import java.util.Arrays;
public class Palindrome {
public static void main(String[] args){
int[] arr = {5, 8, 6, 11, 22, 33, 44, 33, 22, 11, 6, 7};
int[] arr2 = {1,0,2};
int[] arr3 = {2};
int[] arr4 = {};
System.out.println(Arrays.toString(findPalindrome(arr)));
System.out.println(Arrays.toString(findPalindrome(arr2)));
System.out.println(Arrays.toString(findPalindrome(arr3)));
System.out.println(Arrays.toString(findPalindrome(arr4)));
}
public static boolean isPalindrome(int[] arr){
int end = arr.length - 1;
for (int i = 0; i < arr.length/2; i++){
if (arr[i] != arr[end - i]) {
return false;
}
}
return true;
}
public static int[] findPalindrome(int[] arr) {
int start = 0;
int end = arr.length;
if (end <= 1) { // no need to check just return as it is
return arr;
}
for (int offset = 0; offset < arr.length; offset++) {
for (int j = 0; j <= offset; j++) {
if (isPalindrome(arr, start + j, end - offset + j)) {
return Arrays.copyOfRange(arr, start + j, end - offset + j);
}
}
}
return null;
}
public static boolean isPalindrome(int[] arr, int start, int end){
end = end - 1;
if (start == end) {
return false; // when reduced to a single element return false
}
int endPoint = (end - start + 1)/2;
for (int i = 0; i < endPoint; i++){
if (arr[start + i] != arr[end - i]) {
return false;
}
}
return true;
}
}