java day7

来源:互联网 发布:桌面图标软件 编辑:程序博客网 时间:2024/06/09 13:44

1 数组的元素个数

array.length

2 数组是不能扩展的,但是似乎后来会讲一个可以的。



1 普通变量是所有者,数组变量是管理者(在另外一个地方存储数组元素)

int[] a =  new int[10];a[0] = 5;int[] b = a;b[0] = 12;

所以,上面int[]b = a,实际上的意思是让b管理a管理的那个数组,所以修改b的元素,a中的元素也会被同时修改。此时这里既是a[0]也是b[0]


2 for-each 循环

for(int k : data)

意为:对于data中的每一个元素,每次循环都依次拿出去一项作为k在循环中使用

——适合遍历一个数组,但是不能修改数组


3 优化素数寻找

-1 过滤所有偶数 可以降到n/2

-2 只算到sqrt() (有相关定理可以证明,任何一个数都不能拆成两个大于其平方根数的乘积) 则计算量降低到sqrt

-3 使用已有素数集合计算


4 二维数组

int[][] array2 = new int[3][5];

--

final int SIZE =3;

5 第五章作业

这个作业说实话我不太满意,因为这个作业其实看上去并不难,但是我足足弄了三个晚上。虽然这三天也有一些别的事打扰,但是总的来说还是至少有个7、8小时。

而且,特别是看了别人的代码,更让我火大。为了实现这个功能,最后的修改版本足足有两百行。但是别人写的,能过四项测试,一共才不到五十行。我现在真的有些怀疑我到底适不适合干这行。

package nohello;import java.util.Scanner;public class s170411 {public static void main(String[] args) {int[][] arr = new int[100][2];Scanner in = new Scanner(System.in);int a=in.nextInt();int right=0;//有效数对个数-1for(int i=0,count=0,zerotime=0;i<100;i++){if(i%2==0)//+10{if(a==0){zerotime++;}arr[count][0]=a;right=count;} else {arr[count][1]=a;count++;if(zerotime==2)break;}a=in.nextInt();}int[][] arr1=new int[right+1][2];for(int i=0,zerotime=0;i<100;i++){if(arr[i][0]==0 && arr[i][1]==0)//没考虑两次0 0 {if(zerotime==2){break;}else {zerotime++;}} else {arr1[i][0]=arr[i][0];arr1[i][1]=arr[i][1];}}for(int i=0;i<arr1.length;i++){for(int j=i+1;j<arr1.length;j++){if(arr1[i][0]==arr1[j][0]){arr1[i][1]+=arr1[j][1];arr1[j][0]=0;arr1[j][1]=0;} else {continue;}}}for(int i=0;i<arr1.length;i++){int temp1=0,temp2=0;for(int j=i+1;j<arr1.length;j++){if(arr1[i][0]<arr1[j][0]){temp1=arr1[i][0];temp2=arr1[i][1];arr1[i][0]=arr1[j][0];arr1[i][1]=arr1[j][1];arr1[j][0]=temp1;arr1[j][1]=temp2;i=0;break;} else if(arr1[i][0]==arr1[j][0]) {if(arr1[i][0]!=0 && arr1[j][0]==0){continue;} else if(arr1[i][0]==0 && arr1[j][0]!=0){temp2=arr1[i][1];arr1[i][1]=arr1[j][1];arr1[j][1]=temp2;i=0;break;}}}}in.close();boolean notzero=false;//用于判断是否是第一个幂次不为零系数也不为零的for(int i=0;i<arr1.length;i++){//判断系数是否为0if(arr1[i][1]==0){//如果系数为0 判断幂次是否为0if(arr1[i][0]==0){//系数幂次都是0 判断是否前面没出现过非零if(!notzero){//没有非0 说明这是唯一有效的一项 输出0之后退出System.out.println("0");break;} else {//前面有非0 说明这是多项式常数项为0 不输出 直接退出//break;}} else {//幂次不为0 说明不是最后一项 跳过本轮循环continue;}} else {//系数不为0 判断前面是否出现过非零if(!notzero){//没出现非零 说明这是应该输出的第一项;判断幂次是否为0 1 还是其他if(arr1[i][0]==0)//幂次为0 只有一项有效  输出常数项后退出{System.out.print(arr1[i][1]);break;} else if(arr1[i][0]==1){//幂次为1 判断是否为正负1if(arr1[i][1]==1){//系数为1 只输出xSystem.out.print("x");notzero=true;} else if(arr1[i][1]==-1){//系数为-1 只输出-xSystem.out.print("-x");notzero=true;} else {//系数为其他  输出系数和x但不输出幂次System.out.print(arr1[i][1]+"x");notzero=true;}} else {//幂次为其他 判断是否为正负1if(arr1[i][1]==1){//系数为1 只输出x和幂次System.out.print("x"+arr1[i][0]);notzero=true;} else if(arr1[i][1]==-1){//系数为-1 只输出-x和幂次System.out.print("-x"+arr1[i][0]);notzero=true;} else {//系数为其他  正常输出System.out.print(arr1[i][1]+"x"+arr1[i][0]);notzero=true;}}} else {//出现过非零项 说明这是中间项 还是判断幂次是否为0 1 还是其他if(arr1[i][0]==0)//幂次为0 说明是最后一项 判断正负  输出常数项后退出{if(arr1[i][1]>0){//为正数 带一个加号System.out.print("+"+arr1[i][1]);break;} else {//为负 自带符号 直接输出System.out.print(arr1[i][1]);break;}} else if(arr1[i][0]==1){//幂次为1 判断是否为正负1if(arr1[i][1]==1){//系数为1 只输出+xSystem.out.print("+x");} else if(arr1[i][1]==-1){//系数为-1 只输出-xSystem.out.print("-x");} else {//系数为其他  判断正负 输出系数和x但不输出幂次if(arr1[i][1]>0){//为正数 带一个加号 和系数 和xSystem.out.print("+"+arr1[i][1]+"x");} else {//为负 自带符号 直接输出系数和xSystem.out.print(arr1[i][1]+"x");}}} else {//幂次为其他 判断是否为正负1if(arr1[i][1]==1){//系数为1 输出加号和x和幂次System.out.print("+x"+arr1[i][0]);} else if(arr1[i][1]==-1){//系数为-1 只输出-x和幂次System.out.print("-x"+arr1[i][0]);} else {//系数为其他  判断系数正负if(arr1[i][1]>0){//为正数 带一个加号 和系数 和xSystem.out.print("+"+arr1[i][1]+"x"+arr1[i][0]);} else {//为负 自带符号 直接输出系数和xSystem.out.print(arr1[i][1]+"x"+arr1[i][0]);} }}}}}}}



0 0