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]);
}
}
}
}
}
}
}
}