java day7

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;//有效数对个数-1
		for(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++)
		{
			//判断系数是否为0
			if(arr1[i][1]==0)
			{
				//如果系数为0 判断幂次是否为0
				if(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 判断是否为正负1
						if(arr1[i][1]==1)
						{
							//系数为1 只输出x
							System.out.print("x");
							notzero=true;
						} else if(arr1[i][1]==-1){
							//系数为-1 只输出-x
							System.out.print("-x");
							notzero=true;
						} else {
							//系数为其他  输出系数和x但不输出幂次
							System.out.print(arr1[i][1]+"x");
							notzero=true;
						}
						
					} else {//幂次为其他 判断是否为正负1
						if(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 判断是否为正负1
						if(arr1[i][1]==1)
						{
							//系数为1 只输出+x
							System.out.print("+x");
						} else if(arr1[i][1]==-1){
							//系数为-1 只输出-x
							System.out.print("-x");
						} else {
							//系数为其他  判断正负 输出系数和x但不输出幂次
							if(arr1[i][1]>0){
								//为正数 带一个加号 和系数 和x
								System.out.print("+"+arr1[i][1]+"x");
							} else {
								//为负 自带符号 直接输出系数和x
								System.out.print(arr1[i][1]+"x");
							}
						}
					} else {//幂次为其他 判断是否为正负1
						if(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){
								//为正数 带一个加号 和系数 和x
								System.out.print("+"+arr1[i][1]+"x"+arr1[i][0]);
							} else {
								//为负 自带符号 直接输出系数和x
								System.out.print(arr1[i][1]+"x"+arr1[i][0]);
							} 
						}
					}
				}
			}
		}
	}
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值