Определить следующий член последовательности

package com.gmail.mekhanich.andrii;

import java.util.Arrays;
import java.util.Scanner;

public class Main {
	
	// Определить следующий элемент последовательности
	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		System.out.println("Please enter your subsequence (separator must be ','):");

		String textSequence = sc.next();									//take sequence and convert into int array		
		String[] mainSequence = textSequence.split(",");
		int[] sequence = new int[mainSequence.length];
		for (int i = 0; i < mainSequence.length; i++) {
			sequence[i] = Integer.parseInt(mainSequence[i]);
		}
		System.out.println(Arrays.toString(sequence));
		
		
		int compare = sum(sequence);													//compare results of method 
		if (compare < degreeOf(sequence)) {													
			System.out.println("Next element is " + degreeOf(sequence));
		} else if (compare < ofDegree(sequence)) {
			System.out.println("Next element is " + ofDegree(sequence));
		} else if (compare < 0){
			System.out.println("Unfortunately I can not identify this sequence...");
		} else {
			System.out.println("Next element is " + sum(sequence));
		} 
	}

	public static int sum(int[] array) {													//method for calculating sequence with sum
		int nextOne = -1;
		int arraySum = (array[array.length - 1] - array[0]);
		
		if (arraySum % (array.length-1) == 0) {
			nextOne = array[array.length - 1] + arraySum / (array.length-1);
		} else {
			nextOne = -1;
		}
		
		return nextOne;
	}

	public static int degreeOf(int[] array) {														//method for calculating sequence when the step is the degree
		int nextOne = -1;
		int arrayBase = 0;
		
		if (array[array.length-2] == 0) {
			nextOne = -10000;
			} else {
				arrayBase = (array[array.length-1])/(array[array.length-2]);
				if ((array[array.length-1])%(array[array.length-2])==0 && nextOne>=0) {
					nextOne = (int)Math.pow(arrayBase, array.length);
				}
				
			}
		return nextOne;
	}
				
		

	public static int ofDegree(int[] array) {																//method for calculating sequence when the number is the degree of step
		int nextOne = -1;

		for (int i = array.length; i > 0; i--) {
			for (int j = 0; j < array.length-1; j ++ ) {
				//System.out.println(Math.pow(i, j) + " " + Math.pow(i - 1, j));
				if (Math.pow(i, j) == array[array.length-1] && Math.pow(i - 1, j) == array[i-2]) {
					//System.out.println (Math.pow(i, j) + " " + Math.pow(i - 1, j));
					nextOne = (int) Math.pow(array.length + 1, j);
					break;
				} 
			}
		}
		return nextOne;
	}
}

Помогите плз!!!

не проходит последовательность с любым кол-вом единиц ({1,1,1,1} или {1,1,1})…
Возвращает:

Please enter your subsequence (separator must be ','):
1,1,1,1
[1, 1, 1, 1]
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 4
	at HomeWork6b1/com.gmail.mekhanich.andrii.Main.ofDegree(Main.java:72)
	at HomeWork6b1/com.gmail.mekhanich.andrii.Main.main(Main.java:26)

Да там проблем и без этого хватает. Например
Please enter your subsequence (separator must be ‘,’):
1,2,4,8,16
[1, 2, 4, 8, 16]
Unfortunately I can not identify this sequence…
А это обычная геометрическая прогрессия.
А ваша ошибка тут

for (int i = array.length; i > 0; i--) {

Последний индекс в массиве, это его длинна минус один (индексация то с нуля) вот вы и выходите за границы массива.

package com.gmail.mekhanich.andrii;

import java.util.Arrays;
import java.util.Scanner;

public class Main {
	
	// Определить следующий элемент последовательности
	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		System.out.println("Please enter your subsequence (separator must be ','):");

		String textSequence = sc.next();									//take sequence and convert into int array		
		String[] mainSequence = textSequence.split(",");
		int[] sequence = new int[mainSequence.length];
		for (int i = 0; i < mainSequence.length; i++) {
			sequence[i] = Integer.parseInt(mainSequence[i]);
		}
		System.out.println(Arrays.toString(sequence));
		
		
		int compare = sum(sequence);													//compare results of method 
		if (compare < degreeOf(sequence)) {													
			System.out.println("Next element is " + degreeOf(sequence));
		} else if (compare < ofDegree(sequence)) {
			System.out.println("Next element is " + ofDegree(sequence));
		} else if (compare < 0){
			System.out.println("Unfortunately I can not identify this sequence...");
		} else {
			System.out.println("Next element is " + sum(sequence));
		} 
	}

	public static int sum(int[] array) {													//method for calculating sequence with sum
		int nextOne = -1;
		int arraySum = (array[array.length - 1] - array[0]);
		
		if (arraySum % (array.length-1) == 0) {
			nextOne = array[array.length - 1] + arraySum / (array.length-1);
		} else {
			nextOne = -1;
		}
		
		return nextOne;
	}

	public static int degreeOf(int[] array) {														//method for calculating sequence when the step is the degree
		int nextOne = -1;
		int arrayBase = 0;
		
		if (array[array.length-2] == 0) {
			nextOne = -10000;
			} else {
				arrayBase = (array[array.length-1])/(array[array.length-2]);
				if ((array[array.length-1])%(array[array.length-2])==0 && nextOne>=-1) {
					nextOne = (int)Math.pow(arrayBase, array.length);
				}
				
			}
		return nextOne;
	}
				
		

	public static int ofDegree(int[] array) {																//method for calculating sequence when the number is the degree of step
		int nextOne = -1;

		for (int i = array.length; i > 0; i--) {
			for (int j = 0; j < array.length-1; j ++ ) {
				//System.out.println(Math.pow(i, j) + " " + Math.pow(i - 1, j));
				if (Math.pow(i, j) == array[array.length-1] && Math.pow(i - 1, j) == array[i-2]) {
					//System.out.println (Math.pow(i, j) + " " + Math.pow(i - 1, j));
					nextOne = (int) Math.pow(array.length+1, j);
					break;
				} 
			}
		}
		return nextOne;
	}
}

По вашему замечанию ошибка была вот тут:

if ((array[array.length-1])%(array[array.length-2])==0 && nextOne>=-1)

ранее выло так - nextOne>=0, но тогда последовательность из “0” не проходила.
nextOne>=-1 сделал так и не исправил…

Но он же указан не меньше равно, а просто меньше, т.е. не должен принимать участие в цикле? Уменьшаем, проверяем и выходим? Я правильно понимаю?
P.S. Я про 0 если что, а то перечитал и сам не понял :rofl:

Коме того:

Please enter your subsequence (separator must be ','):
0,0,0,0,0,0,0
[0, 0, 0, 0, 0, 0, 0]
Next element is 0

или

Please enter your subsequence (separator must be ','):
2,2,2,2,2,2,2
[2, 2, 2, 2, 2, 2, 2]
Next element is 2

НО при этом

Please enter your subsequence (separator must be ','):
1,1,1,1,1,1,1
[1, 1, 1, 1, 1, 1, 1]
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 7
	at HomeWork6b1/com.gmail.mekhanich.andrii.Main.ofDegree(Main.java:72)
	at HomeWork6b1/com.gmail.mekhanich.andrii.Main.main(Main.java:26)

Александр, я понимаю, что код г***о (простите), но я учусь и хочу понять. Потому и задаю вопрос)))

1 симпатия

Давайте сразу по ошибке.

Смотрите в этом цикле ваша переменная счетчик проходит значения

for (int i = array.length; i > 0; i--) {

Т.е. последним значением i будет число 1, запомнили это число

А еще есть такая строка

if (Math.pow(i, j) == array[array.length — 1]

которая даст правду только для 1. При j == 0, так как любое число в степени 0 равно 1, и тогда проверится вторая часть оператора &&

Math.pow(i - 1, j) == array[i — 2])

О которой я вас предупреждал. У вас же последним значением i ,будет 1. И получиться что 1-2= -1 и вы обращаетесь к -1 индексу в массиве, а МИНУС ПЕРВОГО индекса в массиве не бывает. Индексация начинается с нуля.

1 симпатия