Эта ошибка возникает при переполнении циклов цикла. Давайте рассмотрим простой пример:
class demo{
public static void main(String a[]){
int[] numberArray={4,8,2,3,89,5};
int i;
for(i=0;i<numberArray.length;i++){
System.out.print(numberArray[i+1]+" ");
}
}
Сначала я инициализировал массив как «numberArray». то некоторые элементы массива печатаются с использованием цикла. Когда цикл запускает время «i», напечатайте элемент (numberArray [i + 1] .. (когда значение i равно 1, будет напечатан элемент numberArray [i + 1].) Предположим, что, когда i = (numberArray. length-2), последний элемент массива печатается. Когда значение «i» переходит к (numberArray.length-1), нет значения для печати. В этот момент происходит «ArrayIndexOutOfBoundsException». Я надеюсь, что вы можете получить idea.thank you!
Вы также можете сохранить ваши параметры в качестве атрибутов вашего возвращаемого значения. Таким образом, вы не получите список обратно, если не хотите этого:
random_number_generator <- function(n,distribution,mean=NULL,sd=NULL,lambda=NULL,size=NULL,prob=NULL){
if (distribution=="Normal"){
x <- rnorm(n=n,mean=mean,sd=sd)
}
if (distribution=="Poisson"){
x <- rpois(n=n, lambda=lambda)
}
if (distribution=="Binomial") {
x <- rbinom(n=n,size=size,prob=prob)
}
attributes(x) <- list(distribution = distribution,
size = size,
prob = prob)
class(x) <- "MyClass"
return (x)
}
answer <- random_number_generator(n=10, distribution = "Binomial",size=15,prob=0.4)
summary.MyClass <- function(x) {
stopifnot(inherits(x, "MyClass"))
cat("\t\n",
sprintf("Sample size: %s\n", length(x)),
sprintf("Mean: %s\n", mean(x)),
sprintf("Standard Deviation: %s\n", sd(x)),
sprintf("Distribution: %s\n", attr(x, "distribution")),
sprintf("Size: %s\n", attr(x, "size")),
sprintf("Prob: %s\n", attr(x, "prob"))
)
}
summary(answer)
Мы могли бы сделать следующее:
random_number_generator <- function(n, distribution, mean = NULL, sd = NULL, lambda = NULL, size = NULL, prob = NULL) {
if (distribution == "Normal")
x <- rnorm(n = n, mean = mean, sd = sd)
else if (distribution == "Poisson")
x <- rpois(n = n, lambda = lambda)
else if (distribution == "Binomial")
x <- rbinom(n = n, size = size, prob = prob)
out <- list(x = x, distribution = distribution, size = size, prob = prob)
class(out) <- "MyClass"
out
}
summary.MyClass <- function(obj) {
stopifnot(inherits(obj, "MyClass"))
cat("\t\n",
sprintf("Sample size: %s\n", length(obj$x)),
sprintf("Mean: %s\n", mean(obj$x)),
sprintf("Standard Deviation: %s\n", sd(obj$x)),
sprintf("Distribution: %s\n", obj$distribution),
sprintf("Size: %d\n", obj$size),
sprintf("Probability: %s\n", obj$prob)
)
}
answer <- random_number_generator(n = 10, distribution = "Binomial", size = 15, prob = 0.4)
summary(answer)
#
# Sample size: 10
# Mean: 5.5
# Standard Deviation: 1.64991582276861
# Distribution: Binomial
# Size: 15
# Probability: 0.4
Итак, чтобы вернуть дополнительную информацию, нам нужно сохранить эту дополнительную информацию в качестве выходной информации из random_number_generator
, что я сделал с
out <- list(x = x, distribution = distribution, size = size, prob = prob)
class(out) <- "MyClass"