初学Java,请教一个问题。

图片说明

目的:求出For loop里的最大值

疑惑:怎么求出 If和 else里的最大值

想法:我的想法是每运行一次if 或者else条件就会有一个数字产生,所以我想分别求出 if 和 else里的最大值,然后再用他们的最大值比较,从而求出for loop里的最大值。-----可是给卡住了,有没有大佬可以指点一下,或者一些简化的思路。
非常感谢,Java初学,还没有学习后面的知识。

看不懂你要干嘛,直接描述下你最原始的需求吧

在程序开头加上
int maxval = start_h;
for (int i = 0; i < num_jump; i++)
{
...
//循环结束加上
if (maxval < start_h) start_h = maxval;
}
System.out.println("最大值:" + maxval);

你这个代码太高级了,看不懂一边在循环一边又在增加循环次数,你是想用while(true)吧

在循环上面声明两个变量存放奇偶数的最大值,然后按需求使用

int maxEven = 0;
int maxOdd = 0;

……………………

if(start_h %2 == 0) {
    if(start_even > maxEven) {
        maxEven = start_even
    }
} else {
    奇数同理
}

你这死循环了,说一下你的原始需求吧,或者把题目发出来吧,真搞不懂你要干什么。

你这都是确定的值,哪有啥最大值最小值。
这个逻辑都在这儿,是确定的值,你要的是谁的最大值?
是某个变量的,还是什么?

你的代码看了,有2个数值,不知道你要怎么比较。但是,涉及到比较大小的内容,和排序有关。
代码里面有2块内容:
第一块是你的代码,返回的数据进行了排序;
第二块内容,演示的是冒泡排序,拿到要处理的数据之后进行排序;

public class BubbleTest {
    public static void main(String[] args) {
        //--------------------接收遍历产生的数据,并排序----------------------------//
        //获取循环返回的数据
        List<Integer> jumpList = jump();
        //排序
        Collections.sort(jumpList);
        //遍历打印数据
        jumpList.forEach(j -> System.out.println("返回的循环数据:" + j));
        //--------------------接收遍历产生的数据,并排序----------------------------//




        //-----------------------演示冒泡排序、最大值、最小值的内容,供参考,与提问无关--------------------------------//
        //原始数据
        int[] nums = {86, 55, 90, 67, 69, 75, 87, 89, 99, 100};
        //排序后数据
        int[] results = bubbleSort(nums);
        //转List
        List<Integer> resultsList = Arrays.stream(results).boxed().collect(Collectors.toList());
        //遍历打印数据
        resultsList.forEach(r -> System.out.println(r));

        //直接获取最大值最小值平均值
        int[] intNums = {10, 8, 5, 9};
        int maxValue = Arrays.stream(intNums).max().getAsInt();
        int minValue = Arrays.stream(intNums).min().getAsInt();
        double averageValue = Arrays.stream(intNums).average().getAsDouble();
        System.out.println(maxValue);
        System.out.println(minValue);
        System.out.println(averageValue);
        //-----------------------演示冒泡排序、最大值、最小值的内容,供参考,与提问无关--------------------------------//
    }

    /**
     * 提问中的遍历代码
     * @return
     */
    private static List<Integer> jump() {
        //定义返回
        List<Integer> startEvenList = new ArrayList<>();
        List<Integer> startOddList = new ArrayList<>();

        //循环开始
        int num_jump = 10;
        int start_h = 5, start_even, start_odd;
        for (int i = 0; i <= num_jump; i++) {
            if (start_h % 2 == 0) {
                start_h = start_h / 2;
                start_even = start_h;
                System.out.println("start_even:" + start_even);
                //保存起来
                startEvenList.add(start_even);
                num_jump = 1 + i;
            } else if (start_h == 1) {
                break;
            } else {
                start_h = 3 * start_h + 1;
                start_odd = start_h;
                System.out.println("start_odd:" + start_odd);
                //保存起来
                startOddList.add(start_odd);
                num_jump = 1 + i;
            }
        }
        System.out.println("number of jumps:" + num_jump);

        //要排序哪个就返回哪个List
        return startEvenList;
        //return startOddList;
    }

    /**
     * 冒泡排序思想:
     * 1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。
     * 2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
     * 3、针对所有的元素重复以上的步骤,除了最后一个。
     * 4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
     *
     * @param nums 待排序数值序列
     */
    private static int[] bubbleSort(int[] nums) {
        int len = nums.length;
        if (0 == len || 1 == len) {
            return nums;
        }
        //排序
        for (int i = 0; i < len; i++) {
            for (int j = 0, subLen = len - 1 - i; j < subLen; j++) {
                if (nums[j + 1] < nums[j]) {
                    //临时
                    int tmp = nums[j + 1];
                    //交换
                    nums[j + 1] = nums[j];
                    //交换
                    nums[j] = tmp;
                }
            }
        }
        return nums;
    }
}

首先,定义两个变量来存储,if和else里的动态数字,然后在for循环外定义一个max变量,执行完if或else之后,在if和else最后增加1行代码:

max = Math.max(max, Math.max(if, else));

最后for循环结束,最后保留的max就是最大值

求最大值,不需要在if else中进行,一进入for循环,直接对比获取最大值即可,if else中还是你之前的逻辑,互不影响

每次循环都有数字产生
但是java你是不能在循环中创造新的引用名来赋值的,而如果不用到新的引用名,往大的方向产生数字取最后的数就是了

不是卡住了,是CPU不行,你换服务器级别的,先跑上几个小时然后再看看有没有卡住

正如楼上所说:搞不懂你所描述的内容
“start_h”有三种情况:

  • start_h等于1的情况:直接执行第二个条件退出循环;

  • start_h为非1的奇数的情况:执行第三个条件,进入死循环;

  • start_h为偶数的情况:这种情况比较复杂

1.刚开始执行第一个条件,然后重新给start_h赋值;
2. 而偶数除以2取整,它的结果又分为三种情况:1、非1奇数、偶数

哎,算了,头大,就分析到这吧,个人观点,勿喷!

“”想法:我的想法是每运行一次if 或者else条件就会有一个数字产生,所以我想分别求出 if 和 else里的最大值,然后再用他们的最大值比较,从而求出for loop里的最大值”,在外面定义两个数组:if_array和else_array:分别在if、else随机生成一个数(使用Math.random方法)【然后分别存储进if_array、else_array】,使用排序方法Array.sort排序if_arry和else_arry,然后数组的最后一个元素即最大值,就可以进行比较

没有给出完整代码...难搞哦
或者把最原始的需求描述清除吧