今天研究了一下如何返回一个整数数组中最大数组的和,具体要求如下:

java 返回字节数组 java返回一个数组_java

分析:

对于这个问题可以设定一个整型max,让他来充当子数组的和的最大值,之后就需要让他和所有的子数组进行比较,这里可以用两个for循环来实现.如下:

for(int i=0;i
{
for(int j=i;j
{
s[z]=s[z]+f[j];
if(max
max=s[z];
}
}

实现这一部之后,问题便已经解决了一半,接下来便要考虑一下如何生成这个整形数组了.这里可以用随机函数来实现,但要求既有证书,又有负数,所以从网上找到了

一个简单的生成正负随机数的函数.

private static intRD(){

Random random= newRandom();int n = random.nextInt(10);if(n==1||n==3||n==5||n==7||n==9){//如果是13579进入负数生产机器

String str= "-"+random.nextInt(100);//加个负号

int a = Integer.parseInt(str);//把字符串str封装成实数a

returna;

}else{//否则产生正数,也就是说02468产生正数

int a = random.nextInt(100);returna;

}

}

以上两个难点解决了,剩下的问题就变得简单了.

源代码如下:

package piao;
import java.util.Random;
public class text {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Random random = new Random();
int n = random.nextInt(100);
int f[]=new int[n];
for(int i=0;i
{
f[i]=RD();
System.out.println(f[i]);
}
/*
* int n=5;
int f[]=new int[n];
f[0]=1;f[1]=3;f[2]=-5;f[3]=2;f[4]=-2;
*/
int num=n;
int s[]=new int[num];
for(int i=0;i
{
s[i]=0;
}
int z=0;
int max=f[0];
for(int i=0;i
{
for(int j=i;j
{
s[z]=s[z]+f[j];
if(max
max=s[z];
}
/*for(int j=n-i, m=0;j
{
s[z]=s[z]+f[m];
if(max
max=s[z];
}
s[z]=max;
z++;
*/
}
System.out.println("最大为:"+max);
}
private static int RD(){
Random random = new Random();
int n = random.nextInt(10);
if(n==1||n==3||n==5||n==7||n==9){
//如果是13579进入负数生产机器
String str = "-"+random.nextInt(100);//加个负号
int a = Integer.parseInt(str);//把字符串str封装成实数a
return a;
}else{
//否则产生正数,也就是说02468产生正数
int a = random.nextInt(100);
return a;
}
}
}

使用定值数组[1,3,-5,2,-2]测试结果:

java 返回字节数组 java返回一个数组_java 返回字节数组_02

运行结果:

java 返回字节数组 java返回一个数组_java 返回字节数组_03

拓展1.若给出的为一个首尾相接的整数环,如何修改?

环与线之间唯一的区别在于在max的比较时要考虑子数组的变化,在尾部后还可以连接到首部,

因此需要将源式修改为:

for(int i=0;i
{for(int j=i;j
{
s[z]=s[z]+f[j];if(max
max=s[z];
}for(int j=n-i, m=0;j
{
s[z]=s[z]+f[m];if(max
max=s[z];
}
s[z]=max;
z++;
}

使用定值数组[1,3,-5,-2,2]测试结果:

java 返回字节数组 java返回一个数组_java_04

运行结果:

java 返回字节数组 java返回一个数组_数组_05

拓展二:

实现在文件中输入:

首先在绝对路径下新建一个a.txt,如图:

java 返回字节数组 java返回一个数组_System_06

原代码:

package piao;
import java.io.FileReader;
import java.io.IOException;
import java.util.Random;
public class text {
public static void main(String[] args)throws IOException {
// TODO 自动生成的方法存根
//初始化
FileReader fr=new FileReader("a.txt");
//int read()一次只读一个字符,输出字符需要将其转换为char类型。
int h=fr.read();
int f[]=new int[5];
int n=5;
System.out.print((char)h);
String v[]=new String[5];
for(int i=0;i<5;i++)
v[i]="";
v[0]=""+(char)h;
int x=0;
//当fr.read()输出值为-1时,所有字符都输出完毕。
while((h=fr.read())!=-1)
{
System.out.print((char)h);
if((char)h==',')
{
x++;
}else
v[x]=v[x]+(char)h;
}
for(int i=0;i<5;i++)
f[i]=Integer.parseInt(v[i]);
/*Random random = new Random();
int n = random.nextInt(100);
int f[]=new int[n];
for(int i=0;i
{
f[i]=RD();
//System.out.println(f[i]);
}
/*int n=5;
int f[]=new int[n];
f[0]=1;f[1]=3;f[2]=-5;f[3]=-2;f[4]=2;
*/
int num=n;
int s[]=new int[num];
for(int i=0;i
{
s[i]=0;
}
int z=0;
int max=f[0];
for(int i=0;i
{
for(int j=i;j
{
s[z]=s[z]+f[j];
if(max
max=s[z];
}
for(int j=n-i, m=0;j
{
s[z]=s[z]+f[m];
if(max
max=s[z];
}
s[z]=max;
z++;
}
System.out.println("最大为:"+max);
fr.close();
}
private static int RD(){
Random random = new Random();
int n = random.nextInt(10);
if(n==1||n==3||n==5||n==7||n==9){
//如果是13579进入负数生产机器
String str = "-"+random.nextInt(100);//加个负号
int a = Integer.parseInt(str);//把字符串str封装成实数a
return a;
}else{
//否则产生正数,也就是说02468产生正数
int a = random.nextInt(100);
return a;
}
}
}

结果截图:

java 返回字节数组 java返回一个数组_java_07

拓展三:考虑数组很大以及程序崩溃的情况.

将输入由int改为String,进行处理.若数据输入有问题则用判断加异常抛出跳过对数据的处理直接

退出.