一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和,求所有子数组的和的最大值,并打印出该数组。
这个程序的算法其实很简单,找出数组中所有的正数就可以了,然后求和,第一个代码保证了输出的数组最后一个元素后面没有逗号。
如果只输出最大和,那就简单多了,大家可以看第二段代码。
import java.util.*;
class ArraySort
{
public static void find(int [] array)
{
int sum=0;
List result=new ArrayList();
for(int temp:array)
{
if(temp>0)
{
result.add(temp);
}
}
for(int i=0;i<result.size();i++)
{
if(i==(result.size()-1))
{
System.out.print((int)result.get(i));
sum+=(int)result.get(i);
System.out.println(" sum="+sum);
}
else
{
System.out.print((int)result.get(i)+",");
sum+=(int)result.get(i);
}
}
}
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
while(sc.hasNext())
{
String str=sc.nextLine();
String[] arr=str.split(",");
int[] array=new int[arr.length];
for(int i=0;i<arr.length;i++)
{
array[i]=new Integer(arr[i]);
}
if(array.length==arr.length)
ArraySort.find(array);
}
}
}
如果程序要求直接输入最大自己的和,那么代码如下
import java.util.*;
class ArraySort
{
public static int find(int [] array)
{
int sum=0;
List result=new ArrayList();
for(int temp:array)
{
if(temp>0)
{
result.add(temp);
}
}
for(int i=0;i<result.size();i++)
{
sum+=(int)result.get(i);
}
return sum;
}
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
int a=0;
while(sc.hasNext())
{
String str=sc.nextLine();
String[] arr=str.split(",");
int[] array=new int[arr.length];
for(int i=0;i<arr.length;i++)
{
array[i]=new Integer(arr[i]);
}
if(array.length==arr.length)
a =ArraySort.find(array);
System.out.println(a);
}
}
}