From 66fe80b08c76cabeae8a312d818b7b3e76ad6ee8 Mon Sep 17 00:00:00 2001 From: 13766800364 <13766800364@qq.com> Date: Thu, 9 Oct 2025 16:07:56 +0800 Subject: [PATCH] Add File --- .../drinkjava2/frog/util/RandomUtils.java | 116 ++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 history/014_3cells/src/main/java/com/gitee/drinkjava2/frog/util/RandomUtils.java diff --git a/history/014_3cells/src/main/java/com/gitee/drinkjava2/frog/util/RandomUtils.java b/history/014_3cells/src/main/java/com/gitee/drinkjava2/frog/util/RandomUtils.java new file mode 100644 index 0000000..c112ca6 --- /dev/null +++ b/history/014_3cells/src/main/java/com/gitee/drinkjava2/frog/util/RandomUtils.java @@ -0,0 +1,116 @@ +/* Copyright 2018-2020 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by + * applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + * OF ANY KIND, either express or implied. See the License for the specific + * language governing permissions and limitations under the License. + */ +package com.gitee.drinkjava2.frog.util; + +import java.util.Random; + +/** + * Random Utilities used in this project + * + * @author Yong Zhu + * @since 1.0 + */ +public class RandomUtils { + + private RandomUtils() { + } + + private static final Random rand = new Random(); + + public static int nextInt(int i) {//返回随机整数,最小为0,最大为n-1 + if (i == 0) + return 0; + return rand.nextInt(i); + } + + public static int nextNegOrPosInt(int n) {//返回随机整数,最小为-(n-1),最大为n-1 + int x = nextInt(n); + if (percent(50)) + return x; + return -x; + } + + public static float nextFloat() { + return rand.nextFloat(); + } + + public static boolean percent(float percent) {// 有百分这percent的机率为true + return rand.nextFloat() * 100 < percent; + } + + public static int vary(int v, int percet) { + if (percent(percet)) + return vary(v); + return v; + } + + public static int vary(int v) {// 随机有大概率小变异,小概率大变异,极小概率极大变异 + if (percent(50)) + v += (nextInt(3) - 0.5); + else if (percent(50)) + v += 2 * (nextInt(2) - 0.5); + else if (percent(50)) + v += 4 * (nextInt(2) - 0.5); + else if (percent(50)) + v += 8 * (nextInt(2) - 0.5); + else if (percent(50)) + v += 16 * (nextInt(2) - 0.5); + else if (percent(50)) + v += 32 * (nextInt(2) - 0.5); + else if (percent(50)) + v += 64 * (nextInt(2) - 0.5); + else if (percent(50)) + v += 100 * (nextInt(2) - 0.5); + return v; + } + +// public static void main(String[] args) { +// int n=0; +// for (int i = 0; i < 100; i++) { +// n=vary(n); +// if(n<0)n=0-n; +// System.out.println(vary(0)); +// } +// } + + public static float vary(float v) {// 随机有大概率小变异,小概率大变异,极小概率极大变异 + if (percent(40)) + v += v * .04 * (nextFloat() - 0.5); // v=v+-.04 + if (percent(10)) + v += v * .103 * (nextFloat() - 0.5); // v=v+-0.1 + else if (percent(5)) + v += v * 1 * (nextFloat() - 0.5); // v=v+-0.4 + else if (percent(2)) + v += v * 4 * (nextFloat() - 0.5); // v=v+-2 + else if (percent(1f)) + v += v * 8 * (nextFloat() - 0.5); // v=v+-6 + return v; + } + + public static int varyInLimit(int v, int from, int to) {// 让返回值在from和to之间随机变异 + int i = vary(v); + if (i < from) + i = from; + if (i > to) + i = to; + return i; + } + + public static float varyInLimit(float v, float from, float to) {// 让返回值在from和to之间随机变异 + float i = vary(v); + if (i < from) + i = from; + if (i > to) + i = to; + return i; + } + +}