一维数组最大子数组续

要求:按单步执行键,在GUI看到你的程序是如何一步一步算出目前最大子数组的范围,当前计算到的临时子数组是在哪里,等等。

         按自动运行键,在GUI看到程序自动运行,并自动显示过程,每次改变状态的时候要稍作停留。

思路:由n个元素组成的数组,计算子数组的最大和,从首元素开始相加,若前m(m<n)个元素和为负数,则重新从第m个元素开始相加。最后输出“和”即为子数组的和的最大值。

import java.util.Scanner;

public class shuzu5 {
    public static void main(String []args) {
        Scanner input=new Scanner(System.in);
        int b[]=new int[5];
        int k=0;
        System.out.println("请输入5个数的数组:");
        for(int i=0;i<5;i++)
        {
            b[i]=input.nextInt();
        }
        int t=b[0];
        for(int i=0;i<5;i++)
        {
            if(b[i]<0) {k++;}
        }
        if(k==5)//判断数组中的数字是否全为负数
        {
            for(int i=0;i<5;i++)
            {
                if(b[i]>t)
                    {
                     t=b[i];
                    }
            }
            System.out.println(t);
        }
    else
    {
        System.out.println("请选择运行方式:1:逐步运行;2:自动运行");
        int a=input.nextInt();
        int sum=0;
        int c=0;
        if(a==2)
        {
            for(int i=0;i<5;i++)//由n个数组成的数组,若前m(m<n)个数的和为非正数,则从第m个数重新开始相加
            {    System.out.println("第"+(i+1)+"步:");
                if(c<0) 
                {   System.out.println("已检查了"+(i+1)+"个子数组,前"+i+"个元素和为负数,第"+(i+1)+"个元素为:"); 
                    c=b[i];
                     System.out.println(c);
                    try {Thread.sleep(100);}catch(Exception e) {}
                }
                else 
                {
                    c+=b[i];
                    System.out.println("已检查了"+(i+1)+"个子数组,第1个元素到第"+(i+1)+"个元素的最大子数组和:");
                    System.out.println(c);
                    try {Thread.sleep(100);}catch(Exception e) {}
                }
                if(sum<c) sum=c;
                }
         }
        else if(a==1)
        {    int z=1;
            for(int i=0;i<5;i++)//由n个数组成的数组,若前m(m<n)个数的和为非正数,则从第m个数重新开始相加
            {   while(z==1)
              {  
                z=0;
                System.out.println("第"+(i+1)+"步:");
                if(c<0) 
                {   System.out.println("已检查了"+(i+1)+"个子数组,前"+i+"个元素和为负数,第"+(i+1)+"个元素为:"); 
                    c=b[i];
                     System.out.println(c);
                    try {Thread.sleep(100);}catch(Exception e) {}
                }
                else 
                {
                    c+=b[i];
                    System.out.println("已检查了"+(i+1)+"个子数组,第1个元素到第"+(i+1)+"个元素的最大子数组和:");
                    System.out.println(c);
                    try {Thread.sleep(100);}catch(Exception e) {}
                }
                if(sum<c) sum=c;
             }
                
                if(i!=4)
                {
                    System.out.println("继续请摁1");
                    z=input.nextInt();
                }
                }
            
         }
        System.out.println("最大子数组和为"+sum);
        }
       }
}

结果截图:

      

原文地址:https://www.cnblogs.com/zwang/p/10771168.html