Найти следующий элемент последовательности с помощью метода

package com.gmail.kolesnikmaksim;

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		
		System.out.print("Введите строку(например: 1,3,5,7): ");
		String str = sc.nextLine();
		
		int[] arr = new int[str.split(",").length];
		int num;
		
		stringToIntArray(str, arr);
		
		if (checkArithmetic(arr)) {
			System.out.println("Следующее число арифметической прогрессии = " + (arr[arr.length - 1] + (arr[1] - arr[0])));
		} else if (checkGeometric(arr)) {
			System.out.println("Следующее число геометрической прогрессии = " + (arr[arr.length - 1] * (arr[1] / arr[0])));
		} else if (checkDegree(arr)[1] != 0 && checkDegree(arr)[0] != 1) {
			num = (int) Math.pow((checkDegree(arr)[2] + checkDegree(arr)[1]), checkDegree(arr)[0]);
			System.out.println("Следующее число прогрессии со степенями = " + num);
		} else {
			System.out.println("Последовательность не относится ни к одному из законов");
		}
		
	}
	
	public static void stringToIntArray(String text, int[] array) {
		String[] strArr = text.split(",");
		for(int i = 0; i < strArr.length; i++) {
			array[i] = Integer.parseInt(strArr[i]);
	    }
	}
	
	public static boolean checkArithmetic(int[] array) {
		int d = array[1] - array[0];
		for (int i = 2; i < array.length; i++) {
			if (array[i] - array[i - 1] != d)
				return false;
		}
		return true;
	}
	
	public static boolean checkGeometric(int[] array) {
		int d = array[1] / array[0];
		for (int i = 2; i < array.length; i++) {
			if (array[i] / array[i - 1] != d)
				return false;
		}
		return true;
	}
	
	public static int findDegree(int[] array) {
		double buf;
		int d = 1;
		boolean checkD = false;
		for (int i = 0; i < array.length; i++) {
			if (array[i] != 1) {
				for (int j = 2; j < array[i]; j++) {
					d = 1;
					buf = array[i];
					while (buf > j) {
						buf /= j;
						d++;
						if (buf == j) {
							checkD = true;
							break;
						} else if (buf < j)
							d = 1;
					}
					if (checkD == true) 
						break;
				}
				break;
			}
		}
		return d;
	}
	
	public static int[] checkDegree(int[] array) {
		int buf = 0;
		int difference = 0;
		int d = findDegree(array);
		int[] arr = new int[] {d, 0, 0};
		if (d == 1)
			return arr;
		for (int i = 1; i < array.length; i++) {
			if(array[i] != 1) {
				for (int j = 2; j < array[i]; j++) {
					if (Math.round(Math.log(array[i]) / Math.log(j) * 100.0) / 100.0 == (double)d) {
						if (buf == 0) {
							buf = j;
							break;
						} else if (difference == 0) {
							difference = j - buf;
							arr[1] = difference;
							buf = j;
							arr[2] = j;
							break;
						} else {
							if (difference == j - buf) {
								j = buf;
								arr[2] = j;
							} else
								return arr;
						}
					} 
				}
			}
		}
		return arr;
	}
}

Пока что ваше решение не верно. Например
Введите строку(например: 1,3,5,7): 1,2,5,10,20
Следующее число геометрической прогрессии = 40

А это несуществующая последовательность.

Добрый день, исправил.

package com.gmail.kolesnikmaksim;

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		
		System.out.print("Введите строку(например: 1,3,5,7): ");
		String str = sc.nextLine();
		
		int[] arr = new int[str.split(",").length];
		int num;
		
		stringToIntArray(str, arr);
		
		if (checkArithmetic(arr)) {
			System.out.println("Следующее число арифметической прогрессии = " + (arr[arr.length - 1] + (arr[1] - arr[0])));
		} else if (checkGeometric(arr)) {
			System.out.println("Следующее число геометрической прогрессии = " + (arr[arr.length - 1] * (arr[1] / arr[0])));
		} else if (checkDegree(arr)[1] != 0 && checkDegree(arr)[0] != 1) {
			num = (int) Math.pow((checkDegree(arr)[2] + checkDegree(arr)[1]), checkDegree(arr)[0]);
			System.out.println("Следующее число прогрессии со степенями = " + num);
		} else {
			System.out.println("Последовательность не относится ни к одному из законов");
		}
		
	}
	
	public static void stringToIntArray(String text, int[] array) {
		String[] strArr = text.split(",");
		for(int i = 0; i < strArr.length; i++) {
			array[i] = Integer.parseInt(strArr[i]);
	    }
	}
	
	public static boolean checkArithmetic(int[] array) {
		int d = array[1] - array[0];
		for (int i = 2; i < array.length; i++) {
			if (array[i] - array[i - 1] != d)
				return false;
		}
		return true;
	}
	
	public static boolean checkGeometric(int[] array) {
		int d = array[1] / array[0];
		for (int i = 2; i < array.length; i++) {
			if ((double)array[i] / (double)array[i - 1] != (double)d)
				return false;
		}
		return true;
	}
	
	public static int findDegree(int[] array) {
		double buf;
		int d = 1;
		boolean checkD = false;
		for (int i = 0; i < array.length; i++) {
			if (array[i] != 1) {
				for (int j = 2; j < array[i]; j++) {
					d = 1;
					buf = array[i];
					while (buf > j) {
						buf /= j;
						d++;
						if (buf == j) {
							checkD = true;
							break;
						} else if (buf < j)
							d = 1;
					}
					if (checkD == true) 
						break;
				}
				break;
			}
		}
		return d;
	}
	
	public static int[] checkDegree(int[] array) {
		int buf = 0;
		int difference = 0;
		int d = findDegree(array);
		int[] arr = new int[] {d, 0, 0};
		if (d == 1)
			return arr;
		for (int i = 1; i < array.length; i++) {
			if(array[i] != 1) {
				for (int j = 2; j < array[i]; j++) {
					if (Math.round(Math.log(array[i]) / Math.log(j) * 100.0) / 100.0 == (double)d) {
						if (buf == 0) {
							buf = j;
							break;
						} else if (difference == 0) {
							difference = j - buf;
							arr[1] = difference;
							buf = j;
							arr[2] = j;
							break;
						} else {
							if (difference == j - buf) {
								j = buf;
								arr[2] = j;
							} else
								return arr;
						}
					} 
				}
			}
		}
		return arr;
	}
}

Ваше решение не верно. Так для
Введите строку(например: 1,3,5,7): 1,4,9,16,25
Ваша программа уходит в бесконечный цикл

Добрый день, исправил.

package com.gmail.kolesnikmaksim;

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		
		System.out.print("Введите строку(например: 1,3,5,7): ");
		String str = sc.nextLine();
		
		int[] arr = new int[str.split(",").length];
		int num;
		
		stringToIntArray(str, arr);
		
		if (checkArithmetic(arr)) {
			System.out.println("Следующее число арифметической прогрессии = " + (arr[arr.length - 1] + (arr[1] - arr[0])));
		} else if (checkGeometric(arr)) {
			System.out.println("Следующее число геометрической прогрессии = " + (arr[arr.length - 1] * (arr[1] / arr[0])));
		} else if (checkDegree(arr)[1] != 0 && checkDegree(arr)[0] != 1) {
			num = (int) Math.pow((checkDegree(arr)[2] + checkDegree(arr)[1]), checkDegree(arr)[0]);
			System.out.println("Следующее число прогрессии со степенями = " + num);
		} else {
			System.out.println("Последовательность не относится ни к одному из законов");
		}
		
	}
	
	public static void stringToIntArray(String text, int[] array) {
		String[] strArr = text.split(",");
		for(int i = 0; i < strArr.length; i++) {
			array[i] = Integer.parseInt(strArr[i]);
	    }
	}
	
	public static boolean checkArithmetic(int[] array) {
		int d = array[1] - array[0];
		for (int i = 2; i < array.length; i++) {
			if (array[i] - array[i - 1] != d)
				return false;
		}
		return true;
	}
	
	public static boolean checkGeometric(int[] array) {
		int d = array[1] / array[0];
		for (int i = 2; i < array.length; i++) {
			if ((double)array[i] / (double)array[i - 1] != (double)d)
				return false;
		}
		return true;
	}
	
	public static int findDegree(int[] array) {
		double buf;
		int d = 1;
		boolean checkD = false;
		for (int i = 0; i < array.length; i++) {
			if (array[i] != 1) {
				for (int j = 2; j < array[i]; j++) {
					d = 1;
					buf = array[i];
					while (buf > j) {
						buf /= j;
						d++;
						if (buf == j) {
							checkD = true;
							break;
						} else if (buf < j)
							d = 1;
					}
					if (checkD == true) 
						break;
				}
				break;
			}
		}
		return d;
	}
	
	public static int[] checkDegree(int[] array) {
		int buf = 0;
		int difference = 0;
		int d = findDegree(array);
		int[] arr = new int[] {d, 0, 0};
		if (d == 1)
			return arr;
		for (int i = 1; i < array.length; i++) {
			if(array[i] != 1) {
				for (int j = 2; j < array[i]; j++) {
					if (Math.round(Math.log(array[i]) / Math.log(j) * 100.0) / 100.0 == (double)d) {
						if (buf == 0) {
							buf = j;
							break;
						} else if (difference == 0) {
							difference = j - buf;
							arr[1] = difference;
							buf = j;
							arr[2] = j;
							break;
						} else {
							if (difference == j - buf) {
								buf = j;
								arr[2] = j;
							} else
								return arr;
						}
					} 
				}
			}
		}
		return arr;
	}
}
1 симпатия

Теперь решение верно.

1 симпатия