日期:2019.3.21
博客期:047
星期四
先二话不说,先交代码,今天训练的内容是“这个整数数组是允许开头和结尾结合在一起的”,大家的思路都是扩大数组内容,就是将读入的数据存入数组,并将数据量扩大一倍——把开头和结尾相连!
我仔细一想这也可以啊!但是当老师讨论到数组位数的时候,他说最多设置位数不超过 2N-1 (N是原数组的位数),这里我想如果取全部的数据该怎么办?
实例: 1,2,-3,2,0
按照以前的算法应该取得 1,2 ,得到结果 3
按照新算法得到 2,0,1,2 ,得到结果 5
但是大家说的算法是连接数组,也就是得到新数组 1,2,-3,2,0,1,2,-3,2 ;从而算得结果为 5 ,但是如果全部是正数呢?应该加以判断?
实例2:10, -20, 25, -50 ,15
得到结果应该是取得 15,10,-20,25 ,得到结果30
1 package pvp; 2 3 import java.io.File; 4 import java.io.FileNotFoundException; 5 import java.util.Scanner; 6 7 public class TestPlay4 { 8 public static void main(String[] args) { 9 //AddRandomNumber.Renew3(); 10 File f = new File("data/data.txt"); 11 if(!f.exists()) 12 { 13 System.out.println("文件不存在!"); 14 System.exit(0); 15 } 16 //存储导入内容 17 String str; 18 //内容 19 Scanner sc = null; 20 try { 21 sc = new Scanner(f); 22 } catch (FileNotFoundException e1) { 23 System.out.println("文件不存在!"); 24 System.exit(0); 25 } 26 //最大值 27 int rmax = Integer.MIN_VALUE; 28 //正数总值 29 int Tnum = Integer.MIN_VALUE; 30 //负数总值 31 int Fnum = 0; 32 //记录是否发生转变 33 int sis = 0; 34 //标记是第几程度 35 int attitude = 0; 36 //------------------------<Test4新加内容> 37 //标记从第1个开始数的最大值 38 int isState = 0; 39 //标记从第1个开始数的最小值 40 int isNotState = 0; 41 //内容标记 42 int kort = 0; 43 //从第1个开始数的最大值的位置 44 int u_er = 0; 45 //从第1个开始数的最小值的位置 46 //int v_er = 0; 47 //------------------------</Test4新加内容> 48 //循环 49 try 50 { 51 //--------------------[Test4新加内容] 52 int p_num = 0;//------[Test4新加内容] 53 //--------------------[Test4新加内容] 54 if(!sc.hasNext()) 55 { 56 System.out.println("文件内容为空!"); 57 System.exit(0); 58 } 59 while(sc.hasNext()) 60 { 61 ++p_num; 62 int p; 63 str = sc.next(); 64 p = Integer.parseInt(str); 65 if(attitude==0) //---------------------------------------[寻找第一个正数] 66 { 67 if(p<=0) 68 ; 69 else 70 { 71 Tnum = p; 72 attitude = 1; 73 } 74 } 75 else if(attitude==1) //---------------------------------------[上一个数为正数] 76 { 77 if(p<0) 78 { 79 if(sis==0) 80 { 81 sis = 1; 82 Fnum += p; 83 } 84 else 85 Fnum = p; 86 attitude = -1; 87 } 88 else 89 Tnum += p; 90 91 if(Tnum>rmax) 92 rmax = Tnum; 93 } 94 else //---------------------------------------[上一个数为负数] 95 { 96 if(p>0) 97 { 98 attitude = 1; 99 if(Tnum + Fnum > 0) 100 { 101 if(Tnum + Fnum > Integer.MAX_VALUE - p) 102 { 103 System.out.println("统计内容超过最大值!"); 104 System.exit(0); 105 } 106 Tnum = (Tnum + Fnum) + p; 107 } 108 else 109 Tnum = p; 110 } 111 else 112 { 113 if(Fnum<Integer.MIN_VALUE-p) 114 { 115 System.out.println("统计内容超过最小值!"); 116 System.exit(0); 117 } 118 Fnum += p; 119 } 120 } 121 if(p>rmax) 122 rmax = p; 123 if(Tnum>rmax) 124 rmax = Tnum; 125 126 kort = kort + p; 127 128 if(isState<kort) 129 { 130 isState = kort; 131 u_er = p_num; 132 } 133 if(isNotState>kort&&p_num>=u_er) 134 isNotState = kort; 135 else if(p_num<u_er) 136 isNotState = 0; 137 } 138 //--------------------[Test4新加内容] 139 if(kort-isNotState+isState>rmax) 140 rmax = kort-isNotState+isState; 141 //--------------------[Test4新加内容] 142 } 143 catch( NumberFormatException e){ 144 System.out.println("输入内容不是数字或者过大!"); 145 System.exit(0); 146 } 147 System.out.println(rmax); 148 sc.close(); 149 } 150 }