软件工程作业05,数组01

开发要求:

1、输入一个整型数组,数组里有正数也有负数;

2、数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和;

3、求所有子数组的和的最大值,要求时间复杂度为O(n);

一设计思路:

   1.键盘输入int型数组

       1.2确定数组长度

        1.3 进行数组输入赋值

          1.4 进行输入数字检查(是否是数字,是否超额)

     2进行子数组相加求和

        2.1 判断sum初始值,

         2/2 sum<0,取sum=arry[i],否则相加求sum

         2/3进行 sum和maxsum比较大小

      3如果子数组全是负数 ,MAxsum=max;

        3/2max=arry[0]输入数组的首个

  ,

       

    

二:实验代码

  1 package shuzu01;
  2 
  3 import java.util.Scanner;
  4 import java.lang.*;
  5 public class Test {
  6     
  7     private static boolean flase;
  8 
  9 
 10 
 11 
 12 
 13     @SuppressWarnings("unused")
 14     public  static void main(String arg[])
 15     {
 16         int i;
 17         Scanner input =new Scanner(System.in);
 18         System.out.println("请输入一个数组的长度");
 19         int length=input.nextInt();
 20      int []arry=new int[length];
 21         //判断数组输入整数
 22         System.out.println("请输入一个数组");
 23         for(i=0;i<length;i++ )
 24         {
 25             int a=input.nextInt();
 26             isNumeric(a);
 27             if(false)
 28                 {
 29                   System.out.println("请输入一个整数");
 30                 int s=input.nextInt();
 31                    
 32                   arry[i]=s;
 33                 }
 34             arry[i]=a;
 35             
 36         }
 37          int Maxsum=0,max,num=1,count=0;
 38         int sum=0;
 39         //Maxsum是子数组和最值,max是整数最值
 40          //sum是子数组和,coun他表示复数个数
 41          for(i=0;i<length;i++)
 42          {
 43              if(sum<0)
 44              {
 45                  sum=arry[i];
 46              }
 47              else
 48              {
 49                  sum+=arry[i];//当子数组和小于0时,与无论与后面数组如何相加,和肯定小于后一段数组之和,此时,将b重新赋值,置为下一个元素
50 } 51 if(Maxsum<sum) 52 { 53 Maxsum=sum; 54 } 55 } 56 //最大元素数组中 57 max=arry[0]; 58 for(i=0;i<length;i++) 59 { 60 if(arry[1]<0) 61 { 62 count++; 63 } 64 if(arry[i]>0) 65 { 66 max=arry[i]; 67 } 68 if(count==length) 69 { 70 Maxsum=max; 71 } 72 } 73 74 System.out.println("子数组最大值"+Maxsum); 75 76 77 78 79 80 for(i=0;i<length;i++ ) 81 { 82 System.out.println(arry[i]); 83 } 84 85 } 86 87 88 89 //判断函数,表示输入的是数字 90 91 public static boolean isNumeric(int a) 92 { 93 if (!Character.isDigit(a)) 94 { 95 return false; 96 } 97 98 99 return true; 100 } 101 102 }

三:截图:

原文地址:https://www.cnblogs.com/gdp176119/p/5364554.html