Java(1-4)

①控制流程
1.c++中允许局部变量覆盖:

public static void main(){
    int n ;
    {
        int n;
        int m; //但是java不允许,这样可能导致程序出错
    }
}

2.在循环中,检测两个浮点数是否相等需要格外小心。

for(double x = 0; x != 10;x += 0.1)

上面的循环可能永远不会结束。由于舍入的误差,最终可能得不到精确值。例如:在上循环中,因为0.1无法精确地用二进制表示,所以,x将从9.999 999 999 999 98 跳到 10.099 999 999 999 98。

3.switch case 语句中 case标签可以是类型为char,byte,short,int 或 枚举常量 从Java SE7 开始还可以是 String字符串字面量

②大数值
如果基本的整数和浮点数精度不能满足需求,那可以使用java.math包中的两个很有用的类:BigInteger 和 BigDecimal 。这两个类可以处理包含任意长度数字序列的数值。
使用静态对的valueOf方法可以将普通的数值转换为大数值:

BigInteger a = BigInteger.valueOf(100);

值得注意的是,这两个类不能使用人们熟悉的 + * 等运算符处理大数值。而需要使用大数值类中的add 和 multiply方法:

BigInteger c = a.add(b);
BigInteger d = c.multiply(b.add(BigInteger.valueOf(2)));
//d=c*(b+2

一定查阅关于BigInteger 和 BigDecimal的相关API。

④数组
1.在申明数组变量时,需要指出数组类型和数组变量的名字。

int []a;

不过这条语句,只声明了变量a,并没有将a初始化为一个真正的数组。应该使用new运算符创建数组。

int []a = new int[100];

创建一个数字数组时,所有元素初始化为0,Boolean数组元素初始化为false,对象数组初始化为一个特殊值null
2.for each循环:
Java有一种功能很强的循环结构,可以用来依次处理数组中的每个元素(其他类型元素也可)而不必为下标值而分心。
这种增强for循环格式为:
for(variable : collection)
//操作

还有个更简单的方式打印数组中的所有值,即利用Arrays类中的toString方法。调用Arrays.toString(a),返回一个包含数组元素的字符串,这些元素被放在括号内,并用逗号隔开,例如“【2,3,5,7,9】”。

3.数组初始化以及匿名数组:
在Java中提供了一种创建数组对象并同时赋予初始值的简化书写形式。下面是一个例子:

int [] smallPrimes = {2,3,5,7,9}
//甚至还可以初始化一个匿名数组
new int[]{17,19,23,29,31,37}
//使用这种语法形式可以在不创建新变量的情况下重新初始化一个数组
smallPrimes = new int[]{17,19,23}

注意!数组长度为0与null不同

4.数组的拷贝:
在java中允许一个数组变量拷贝给另一个数组变量。这时,两个变量将引用同一个数组。(变量引用的数组地址一样)
如果希望将一个数组的所有值拷贝到一个新的数组中去,就要使用Arrays类的copyOf方法:

int []copiedLuckNubmers = Arrays.copyOf(luckNumbers.length);

第一个参数是原数组,第二个参数是新数组的长度。这个方法常用来增加数组大小。

注意 c++的数组和java在堆栈上有很大不同,但基本上与分配在堆上的数组指针一样
也就是说:

int []a = new int[100] //java
//不同于
int a[100] //c++
//而同于
int* a = new int[100];

java的【】运算被预定义为检查数组边界,而且没有指针运算,即不能通过a+1得到数组的下一个元素

5.数组排序:
要想对数值型数组进行排序,可以使用Arrays类中的sort方法:
int [] a = new int[100];
Arrays.sort(a); //这个方法使用了快排
Math.random()会返回一个0 - 1 间的随机浮点数。
注意数组的二分查找发 和equals方法

6.多维数组:
在Java中声明一个二维数组很简单:

double [][]balances;

与一维数组一样,在调用new对其初始化之前不能使用他,一旦数组被初始化,就可以利用两个放阔靠访问每个元素:

//访问第一行各个元素
for(int j =0;j < balances[0].length;j++)
    balances[0][j] = 1000;
//访问其他行其他列
for(int i = 1;i < balances.length;i++){
    for(int j = 0;j < balances[i].length; j++)
    {
        double oldBalance = balances[i-1][j]//注意这里的i-1
    }
}

要想快速地打印一个二维数组的数据元素列表,可以调用Array.deepToString(a)

7.不规则数组:
java的数组很有趣,可以说java实际上没有多维数组,只有一堆数组,多维数组被解释成“数组的数组”。
表达式balances[i]引用第i个子数组,也就是二维表的第i行。它本身也是个数组,balances[i][j]引用这个数组的第j项。
由于可以单独地存取数组的某一行,所以可以让两行交换。
double[] temp = balances[i];
balances[i] = balances[i+1];
balances[i+1]=temp;

下面很重要
还可以方便的构造一个不规则数组,即每一行有不同的长度。下面是一个典型示例。
1
1 1
1 2 1

由于j不可能大于i,所以矩阵是三角形。第i行有i + 1个元素。要想创建一个不规则数组首先要分配所含行数:

int[][] odds = new int[Max+1][];

接下来 分配这些所含行数:

for(int n = 0; n <=NMAX ; n++)
    odds[n] = new int[n+1];

在分配了数组后,假定没有超出边界,就可以采用通常的方式访问了。
很重要
在c++中,java的申明:
doble[][] balances = new double[10][6];
不同于double balances[10][6]//c++
也不同与:
double(*balances)[6] = new double[10][6];
而是分配了一个包含10个指针的数组;
double** balances= new double*[10];//c++
然后,指针数组每一个元素填充了一个包含6个数字的数组:
for(i = 0; i < 10;i++)
balances[i] = new double [6]

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值