次のように今日では、最大の配列内の整数の配列を返す方法について検討し、特定の要件は次のとおりです。
分析:
この問題は、整数の最大値に設定することができますについては、彼はサブアレイと、あなたが次のことを達成するために、ループのための2つを使用することができ、あなたが彼とすべてのサブ配列が比較されているようにする必要があり、その後、最大値、として機能してみましょう:
以下のために(INT I = 0、I <N; I ++) { ため(INT J = I; J <nであり、j ++) { S [Z] = S [Z] + F [J]。 (MAX <S [Z])であれば 、最大= S [Z]。 } }
この1の実現は、問題はすでに半分に解決された後、我々はあなたが達成するためにランダム関数を使用することができます。ここではプラスチック製のこの配列を生成する方法を考えるために持っているが、インターネットを検索して、両方の証明書だけでなく、負が必要です
シンプルなプラスまたはマイナスの乱数生成機能。
プライベート 静的 INT RD(){ ランダムランダム = 新しい新しいランダム(); int型 N- =にRandom.nextInt(10 ); IF。。(N - == == 3 1 || || N-N-N - == == || 5. 7 | 。| N - == 9 ){ // もし負の生産機械に13579 文字列STR = " - " +にRandom.nextInt(100); // 負追加 のint A = Integer.parseInt(STR)を; // 文字実数Aにパッケージ文字列str リターンA; } 他{ // 他の正02468は正の生成と言うことである数、 INT A =にRandom.nextInt(100 )、 リターンA; } }
残りの問題を解決するために二つ以上の困難が簡単になります。
次のようにソースコードは次のとおりです。
パッケージ鮑彪注。 輸入java.util.Randomの。 パブリッククラステキスト{ 公共の静的な無効メイン(文字列[] args){ // TODO自动生成的方法存根 ランダムランダム=新しいランダム(); INT、N =にRandom.nextInt(100)。 [] =新しいINT F INT [N]。 以下のために(INT iが= 0、I <N; I ++) { F [I] = RD()。 System.out.println(F [I])。 } / * * INT N = 5。 [] =新しいINT F INT [N]。 F [0] = 1; F [1] = 3; F [2] = - 5; F [3] = 2; F [4] = - 2。 * / INT NUM = N。 int型の[] [NUM]新しいint型=。 以下のために(INT iが= 0; I <NUM; I ++) { S [I] = 0; } 整数Z = 0。 INT最大= F [0]。 (I ++; I <N I = 0の整数)のために { 用(INT J = I; J <N-; J ++) { S [Z] = S [Z] + F [J]; IF(MAX <S [Z]) 最大= S [Z]; } / *のための( INT J =ニッケル、M = 0; J <N-、J ++、M ++) { S [Z] = S [Z] + F [M]; IF(MAX <S [Z]) 最大= S [Z]; } S [Z] =最大; Z ++; / * } のSystem.out.println( "最大" + MAX); } プライベート(){RDの静的int型 )ランダムランダム新しい新しい=ランダム(; INT = N-にRandom.nextInt( 10); IF(N-N - == == 3 1 || || || 5 == N-N-N - == == || 7. 9){。。。 //負であれば製造機13579に 文字列str = " - " +にRandom.nextInt(100); //負の符号を追加 INT A = Integer.parseInt(STR); // 実数Aにパッケージ文字列str リターンA; }他{ //他02468は正の生成と言うことである正の数、 INT A =にRandom.nextInt(100)と、 リターン; } } }
値配列使用[1、3、5,2、-2]試験結果:
結果:
与えられた場合1.バット整数リングを開発するには、どのように修正するには?
maxは尾部が、ヘッド部分に接続されてもよいした後、サブ配列の変化を考慮するために比較することをリングと線との間の唯一の違いは、
ソース式を修正する必要があります。
for(int i=0;i<n;i++) { for(int j=i;j<n;j++) { s[z]=s[z]+f[j]; if(max<s[z]) max=s[z]; } for(int j=n-i, m=0;j<n;j++,m++) { s[z]=s[z]+f[m]; if(max<s[z]) max=s[z]; } s[z]=max; z++; }
使用定值数组[1,3,-5,-2,2]测试结果:
运行结果:
拓展二:
实现在文件中输入:
首先在绝对路径下新建一个a.txt,如图:
原代码:
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<n;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<num;i++) { s[i]=0; } int z=0; int max=f[0]; for(int i=0;i<n;i++) { for(int j=i;j<n;j++) { s[z]=s[z]+f[j]; if(max<s[z]) max=s[z]; } for(int j=n-i, m=0;j<n;j++,m++) { s[z]=s[z]+f[m]; if(max<s[z]) 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; } } }
结果截图:
拓展三:考虑数组很大以及程序崩溃的情况.
将输入由int改为String,进行处理.若数据输入有问题则用判断加异常抛出跳过对数据的处理直接
退出.