返回数组个数Java_用java实现返回一个整数数组中最大数组的和

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

39d05ec0cfe0849ed93301f492e9c847.png

分析:

对于这个问题可以设定一个整型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]测试结果:

cce6a11e0c929be31198c733aff3ee48.png

运行结果:

a7582384bb11d27c362fbf3b2e7d448e.png

拓展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]测试结果:

94bbd1ff625fc773e8a38aeefd714c6f.png

运行结果:

be4424a95e871e753e88993b6509f33c.png

拓展二:

实现在文件中输入:

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

202b5b9e940d2ec32b601ac2ece64f90.png

原代码:

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;

}

}

}

结果截图:

0b24521172a1e19355fefaee32571bc0.png

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

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

退出.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值