Java学习笔记 [3] —— 控制流程、大数值、数组

控制流程

块作用域

块(即复合语句)是指由一对大括号括起来的若干条简单的 Java 语句。块确定了变量的作用域。

  • 块里面可以嵌套另一个块
  • 不能在嵌套的两个块中声明同名变量

条件、循环、多重选择

  • if 语句、while 循环、do/while 循环、for 循环、switch 语句与C++用法相同。
  • switch语句中 case 标签可以是:
    ①类型为char、byte、short、int的常量表达式。
    ②枚举常量。
    ③从 Java SE 7开始,case标签还可以是字符串字面量。

中断控制流程语句break、Continue

break

一种是正常的控制程序从循环中跳出。
另一种是带标签的break语句。

  • 请注意,标签必须放在希望跳出的最外层循环之前, 并且必须紧跟一个冒号。
Scanner in = new Scanner(System.in); 
int n; 
read_data: 
while (. ..) 
  // this loop statement is tagged with the label 
  for (...) 
   // this inner loop is not labeled
  { 
   Systen.out.print("Enter a number >= 0: "); 
   n = in.nextInt(); 
   if (n < 0) // should never happen-can’t go on 
   break read_data; 
   // break out of readjata loop
   ...
   }
}
  • Tips:break只能跳出语句块而不能跳入语句块。
continue

continue语句越过了当前循环体的剩余部分,立刻跳到循环首部。
同样有带标签的continue语句。

大数值

如果基本的整数和浮点数精度不能够满足需求,那么可以使用java.math 包中的两个很有用的类:BigInteger 和 BigDecimal。
可以使用静态的 valueOf 方法可以将普通的数值转换为大数值:
Biglnteger a = Biglnteger.valueOf(100);
但遗憾的是不能使用熟悉的算术运算符(如:+ 和 * )处理大数值。而需要使用大数值类中的 addmultiply 方法。

Biglnteger c = a.add(b); // c = a + b 
Biglnteger d = c.multiply(b.add(Biglnteger.valueOf(2))); 
     // d = c * (b + 2)
  • Java没有重载运算符的功能
Java的BigInteger类中常用的方法
  • BigInteger add(BigInteger other)
  • BigInteger subtract(BigInteger other)
  • BigInteger multiply(BigInteger other)
  • BigInteger divide(BigInteger other)
  • BigInteger mod(BigInteger other)
    返冋这个大整数和另一个大整数 other 的和、差、 积、 商以及余数。
  • int compareTo(BigInteger other)
    如果这个大整数与另一个大整数 other 相等,返回 0; 如果这个大整数小于另一个大整 数 other, 返回负数;否则,返回正数。
  • static BigInteger valueOf(long x)
    返回值等于 x 的大整数。
  • BigDecimal add(BigDecimal other)
  • BigDecimal subtract(BigDecimal other)
  • BigDecimal multipiy(BigDecimal other)
  • BigDecimal divide(BigDecimal other RoundingMode mode) 5.0
    返回这个大实数与另一个大实数 other 的和、 差、 积、 商。
    要想计算商,必须给出舍入方式(rounding mode)。
  • int compareTo(BigDecimal other)
  • 如果这个大实数与另一个大实数相等,返回 0 ; 如果这个大实数小于另一个大实数,返回负数;否则,返回正数。
  • static BigDecimal valueOf(1ong x)
  • static BigDecimal valueOf(1ong x,int scale)
    返回值为 x 或 x / 10^scale 的一个大实数。

数组

数组的声明:数据元素类型紧跟 [ ] + 数组变量的名字。例: int[] a;
但这样并没有将a初始化为一个真正的数组,应该用new运算符创建数组: int[] a=new int[100]

  • 数组的长度不要求是常量,可以是n。
  • 也可以用int a[];的形式声明,但通常用上面那种。
  • 创建一个数字数组时,所有元素都初始化为 0。boolean 数组的元素会初始化为false。字符数组的元素则初始化为一个特殊值 null,。

for each循环

  • for each 循环格式:
    for (variable : collection) statement
    例如:打印数组 a 的每一个元素,一个元素占一行
for (int element : a) 
 System.out.println(element)

应该读作循环a中的每一个元素(for each element in a)。

  • 与传统的for循环相比,for each循环不用考虑下标,在想对数组的全部内容进行处理时,for each更加简洁,但当只想用到数组中的一部分时,还是需要用到传统for循环。
  • 有个更加简洁的办法打印数组内容: 即利用 Arrays 类的 toString 方法。
    调用 Arrays.toString(a),返回一个包含数组元素的字符串,这些元素被放置在括号内,并用逗号分隔,例如,“ [2,3,5,7,11,13] ”、要想打印这个数组,可以调用 System.out.println(Arrays.toString(a));

数组初始化以及匿名数组

1、Java中创建数组并赋初值的办法:
int[] a={17,19,23,29,31,37};
注意:这种方法中没有用到new。
2、Java也支持匿名数组,即不需要给数组设置变量名:
new int[] {17,19,23,29,31,37};
这种方法创建的数组内容为括号中的内容,长度为元素的个数,也可以用来给已定义过的变量重新赋值:
a=new int[] {17,19,23,29,31,37};

  • Java中允许数组长度为0,例:new int[0];
  • 注意:数组的长度为0与null不同。

数组拷贝

在 Java中,允许将一个数组变量拷贝给另一个数组变量。这时,两个变量将引用同一个数组:

int[] luckyNumbers = smallPrimes;
luckyNumbers[5] = 12; // now smallPrimes[5] is also 12

如果希望将 一个数组的所有值拷贝到一个新的数组中去, 就要使用 Arrays 类的 copyOf方法:
int[] copiedLuckyNumbers = Arrays.copyOf(luckyNumbers, luckyNumbers.length);
第 2 个参数是新数组的长度。这个方法通常用来增加数组的大小:
luckyNumbers = Arrays.copyOf(luckyNumbers, 2 * luckyNumbers.length);

  • 如果数组元素是数值型,那么多余的元素将被赋值为 0 ; 如果数组元素是布尔型,则将赋值为 false。相反,如果长度小于原始数组的长度,则只拷贝最前面的数据元素。

数组排序

要想对数值型数组进行排序,可以使用 Arrays类中的 sort 方法:

int[] a = new int[10000];
...
Arrays.sort(a)

这是一种效率比较高的方法。

多维数组

在 Java中,声明一个二维数组相当简单。例如:
double[][] balances;
与一维数组一样,在调用 new 对多维数组进行初始化之前不能使用它。在这里可以这样初始化:
balances = new double[NYEARS][NRATES]:
另外,如果知道数组元素,就可以不调用 new,而直接使用简化的书写形式对多维数组进行初始化。例如:

int[][] magicSquare = { {16, 3, 2, 13}, 
                        {5, 10, 11, 8}, 
                        {9, 6, 7, 12}, 
                        {4, 15, 14, 1} } ;

可以利用循环遍历每行每列。

  • 要想快速地打印一个二维数组的数据元素列表,可以调用:
    System.out.println(Arrays.deepToString(a));
    输出格式为: [[16, 8, 2, 13], [5, 10, 11, 8], [9, 6, 7, 12], [4, 15, 14, 1 ]]

不规则数组

Java中其实没有二维数组,我们可以将其理解为“数组的数组”,例如:balances[10][6] 实际上是一个包含10个元素的数组,而每个元素又是一个由6个元素组成的数组。
由于可以单独地存取数组的某一行, 所以可以让两行交换。

double[] temp = balances[i];
balances[i] = balances[i + 1]; 
balances[i + 1] = temp;

利用这个特点,Java中也可以构造不规则数组,即每一行的长度可以不同。
要想创建一个不规则的数组, 首先需要分配一个具有所含行数的数组。
int[][] odds = new int[NMAX + 1 ][];
接下来, 分配这些行。

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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值