Фибоначчи в Java с использованием Dynami c Программирование и рекурсии - PullRequest
2 голосов
/ 11 апреля 2020

Я новичок в Dynami c Программирование, поэтому я попытался создать файл и записать его в Array.txt в разделе загрузки. Лог c:

If the Array is longer than the current array: Extend the array and copy to old array onto the new one

Я, однако, не могу найти способ фактически скопировать часть старого массива в новый. Я сейчас использую способ

System.arraycopy()

. Вот код: (Не забудьте поменять имя ВАШЕГО ИМЕНИ на компьютере, чтобы избежать ошибки)

import java.io.File;
import java.io.IOException;
import java.io.FileWriter;
import java.util.Arrays;
import java.io.FileNotFoundException;
import java.util.Scanner;


public class Fibonacci {

    static void createFile() {
        try {
            File Array = new File("C:\\Users\\YOURUSERNAME\\Downloads\\Array.txt");
            if (Array.createNewFile()) {
                System.out.println("File created: " + Array.getName());
            } else {
                System.out.println("File already exists.");
            }
        } catch (IOException e) {
            System.out.println("An error occurred.");
            e.printStackTrace();
        }
    }

    static void fileWrite(int[] array, int num) {
        try {
            FileWriter myWriter = new FileWriter("C:\\Users\\YOURUSERNAME\\Downloads\\Array.txt");
            if (num <= array.length) {
                int[] newA = new int[array.length];
                System.arraycopy(array, 0, newA, 0, array.length);
                myWriter.write(Arrays.toString(newA));
                myWriter.close();
            }
            System.out.println("Successfully wrote to the file.");
        } catch (IOException e) {
            System.out.println("An error occurred.");
            e.printStackTrace();
        }
    }


    static int[] fileRead(int[] Array1) {
        try {
            StringBuilder dataTotal = new StringBuilder();
            File Array = new File("C:\\Users\\YOURUSERNAME\\Downloads\\Array.txt");
            Scanner myReader = new Scanner(Array);
            while (myReader.hasNextLine()) {
                String data = myReader.nextLine();
                dataTotal.append(data);
            }
            myReader.close();
            System.out.println(dataTotal);
            dataTotal.deleteCharAt(0);
            dataTotal.deleteCharAt(dataTotal.length() - 1);
            String[] array1 = dataTotal.toString().split(", ");
            int[] array = new int[array1.length];
            for (int i = 0; i < array1.length; i++) {
                array[i] = Integer.parseInt(array1[i]);
            }
            return array;
        } catch (FileNotFoundException e) {
            System.out.println("An error occurred.");
            e.printStackTrace();
            return null;
        }
    }

    static int[] arrayCreator(int num) {
        return new int[num];
    }

    static int fib(int num, int[] array1) {
        int[] array = fileRead(array1);
        if (num == 1 || num == 2) {
            return 1;
        }
        else {
            assert array != null;
            if(array[num - 1] > 0) {
                return array[num - 1];
            } else {
                array[num - 1] = fib(num - 1, array1) + fib (num - 2, array1);
                fileWrite(array, num);
            }
        }
        return array[num - 1];
    }
    public static void main(String[] args) {
        int num = 10;


        int[] array = arrayCreator(num);
        createFile();
        fileWrite(array, num);
        System.out.println(fib(num, array));
    }
}

1 Ответ

2 голосов
/ 11 апреля 2020

Чтобы расширить массив на один элемент, у вас есть два варианта:

  • Использование System.arraycopy()

    int[] newArray = new int[array.length + 1];
    System.arraycopy(array, 0, newArray, 0, array.length);
    array = newArray;
    
  • Использование Arrays.copyOf()

    array = Arrays.copyOf(array, array.length + 1);
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...