关键词:
- 注意区分逗号操作符和逗号分隔符:用作分隔符时用来分隔函数的不同参数;Java里唯一用到逗号操作符的地方就是for循环的控制表达式,可以在for语句内定义多个变量,但是它们必须具有相同的类型。
- Java编译器生成它自己的“汇编代码”,但是这个代码是运行在Java虚拟机上的,而不是直接运行在CPU硬件上。
- 一般的continue会退回最内层循环的开头(顶部),并继续执行;带标签的continue会到达标签的位置,并重新进入紧接在那个标签后面的循环;一般的break会中断并跳出当前循环;带标签的break会中断并跳出标签所指的循环;在Java里需要使用标签的唯一理由就是因为有循环嵌套存在,而且想从多层嵌套中break或continue。
练习1: 写一个程序,打印从1到100的值。
package thinkinjava.charpenter4;
/**
* @author Spring-_-Bear
* @version 2021/9/19 9:41
*/
public class Test1
public static void main(String[] args)
for (int i = 1; i <= 100; i++)
System.out.print(i+" ");
if(i%10==0)
System.out.println("\\n");
练习2: 写一个程序,产生25个int类型的随机数。对于每一个随机数,使用if-else语句来将其分类为大于、小于,或等于紧随它而随机生成的数。
package thinkinjava.charpenter4;
import java.util.Random;
/**
* @author Spring-_-Bear
* @version 2021/9/19 9:45
*/
public class Test2
public static void main(String[] args)
int firstNum, secondNum;
Random random = new Random();
/**
* Generate the first random number
*/
firstNum = random.nextInt(100);
/**
* Generate the remaining 24 random numbers, then compare them.
*/
for (int i = 1; i < 25; i++)
secondNum = random.nextInt(100);
if (firstNum == secondNum)
System.out.println(firstNum + " = " + secondNum);
else if (firstNum > secondNum)
System.out.println(firstNum + " > " + secondNum);
else
System.out.println(firstNum + " < " + secondNum);
firstNum = secondNum;
练习3: 修改练习2,把代码用一个while无限循环包括起来。然后运行它直至用键盘终端其运行(通常是通过按Ctrl-C)。
package thinkinjava.charpenter4;
import java.util.Random;
/**
* @author Spring-_-Bear
* @version 2021/9/19 10:07
*/
public class Test3
public static void main(String[] args)
int firstNum, secondNum;
Random random = new Random();
/**
* Generate the first random number
*/
firstNum = random.nextInt(100);
/**
* Attention: You should compile and run the source file in the terminal by using javac and java command.
* When you want to stop it, just press the key Ctrl and C on the keyboard at the same time.
*/
while(true)
secondNum = random.nextInt(100);
if (firstNum == secondNum)
System.out.println(firstNum + " = " + secondNum);
else if (firstNum > secondNum)
System.out.println(firstNum + " > " + secondNum);
else
System.out.println(firstNum + " < " + secondNum);
firstNum = secondNum;
练习4: 写一个程序,使用两个嵌套的for循环和取余操作符(%)来探测和打印素数(只能被其自身和1整除,而不能被其它数字整除的整数)。
package thinkinjava.charpenter4;
/**
* @author Spring-_-Bear
* @version 2021/9/19 10:18
*/
public class Test4
public static void main(String[] args)
for (int i = 2; i <= 100; i++)
boolean isPrime = true;
for (int j = 2; j <= Math.sqrt(i); j++)
if (i % j == 0)
isPrime = false;
if (isPrime)
System.out.print(i + " ");
练习5: 重复第3章中的练习10,不要用Integer.toBinaryString()方法,而是用三元操作符和按位操作符来显示二进制的1和0。
第3章 练习10:编写一个具有两个常量值的程序,一个具有交替的二进制位1和0,其中最低有效位为0,另一个也具有交替的二进制位1和0,但是其最低有效位为1(提示:使用十六进制常量来表示时最简单的方法)。取这两个值,用按位操作符以所有可能的方式结合运算它们,然后用Integer.toBinaryString()显示。
package thinkinjava.charpenter4;
/**
* @author Spring-_-Bear
* @version 2021/9/19 15:54
*/
public class Test5
public static void main(String[] args)
int num1 = 1 + 4 + 16 + 64;
int num2 = 2 + 8 + 32 + 128;
System.out.println("num1 = " + Integer.toBinaryString(num1));
System.out.println("num2 = " + Integer.toBinaryString(num2));
System.out.print("num1 & num2 = ");
printBinaryString(num1 & num2);
System.out.print("num1 | num2 = ");
printBinaryString(num1 | num2);
System.out.print("num1 ^ num2 = ");
printBinaryString(num1 ^ num2);
System.out.print("~num1 = ");
printBinaryString(~num1);
System.out.print("~num2 = ");
printBinaryString(~num2);
public static void printBinaryString(int num)
if (num == 0)
System.out.print("0");
else
/* 统计num二进制补码高位出现的第一个1之前的更高位0的个数 */
int zerosNums = Integer.numberOfLeadingZeros(num);
/* 将num左移zerosNums位,现在所有num所有的二进制有效位位于高位,低位全为0 */
zerosNums <<= num;
/* 逐个从高位输出num的每一个二进制位的值 */
for (int i = 0; i < 32 - zerosNums; i++)
int bit = (Integer.numberOfLeadingZeros(num) == 0) ? 1 : 0;
System.out.print(bit);
num <<= 1;
System.out.print("\\n");
练习6: 修改前两个程序中的两个test()方法,让它们接受两个额外的参数begin和end,这样在测试testval时将判读它是否在begin和end之间(包括begin和end)的范围内。
package thinkinjava.charpenter4;
/**
* @author Spring-_-Bear
* @version 2021/9/19 16:02
*/
public class Test6
public static void test(int testVal, int begin, int end)
if (testVal < begin)
System.out.println(testVal + " is before " + begin);
else if (testVal >= begin && testVal <= end)
System.out.println(testVal + " is between " + begin + " and " + end);
else
System.out.println(testVal + " is after " + end);
public static void main(String[] args)
test(10, 100, 200);
test(150, 100, 200);
test(250, 100, 200);
练习7: 修改本章练习7,通过使用break关键词,使得程序在打印到99时退出。然后尝试使用return来达到相同的目的。
package thinkinjava.charpenter4;
/**
* @author Spring-_-Bear
* @version 2021/9/19 16:33
*/
public class Test7
public static void main(String[] args)
for (int i = 1; i <= 100; i++)
if (i == 99)
break;
System.out.print(i + " ");
if (i % 10 == 0)
System.out.print("\\n");
练习8: 写一个switch开关语句,为每个case打印一个消息。然后把这个switch放进for循环来测试每个case。先让每个case后面都有break,测试一下会怎样。然后把break删了,看看会怎样。
package thinkinjava.charpenter4;
import java.util.Random;
/**
* @author Spring-_-Bear
* @version 2021/9/19 17:52
*/
public class Test8
public static void main(String[] args)
Random random = new Random();
int times = random.nextInt(100);
for (int i = 0; i < times; i++)
int number = random.nextInt(10);
switch (number)
case 0:
System.out.println("Print zero!");
break;
case 1:
System.out.println("Print one!");
break;
case 2:
System.out.println("Print two!");
break;
case 3:
System.out.println("Print three!");
break;
case 4:
System.out.println("Print four!");
break;
case 5:
System.out.println("Print five!");
break;
case 6:
System.out.println("Print six!");
break;
case 7:
System.out.println("Print seven!");
break;
case 8:
System.out.println("Print eight!");
break;
case 9:
System.out.println("Print nine!");
break;
练习9: 一个斐波那契数列是由数字1、1、2、3、5、8、13、21、34等等组成的,其中每一个数字(从第三个数字起)都是前两个数字的和。创建一个方法,接受一个整数参数,并显示从第一个元素开始总共由该参数指定的个数所构成的所有斐波那契数字。例如,如果运行java Fibonacci 5 (其中Fibonacci是类名),那么输出应该是1、1、2、3、5。
package thinkinjava.charpenter4;
import java.util.Scanner;
/**
* @author Spring-_-Bear
* @version 2021/9/19 18:46
*/
public class Test9
public static void main(String[] args)
Scanner scanner = new Scanner(System.in);
Test9 test9 = new Test9();
int number = scanner.nextInt();
test9.fibonacci(number);
public void fibonacci(int num)
int fstNum = 1;
int secNum = 1;
System.out.print(fstNum + " " + secNum + " ");
for (int i = 1; i <= num - 2; i++)
int twoSum = fstNum + secNum;
System.out.print(twoSum + " ");
fstNum = secNum;
secNum = twoSum;
练习10: 吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字各包含乘积的一半位数的数字,其中从最初的数字中选取的数字可以任意排序。以两个0结尾的数字是不允许的,例如下列数字都是“吸血鬼”数字:1260 = 12 * 60; 1827 = 21 * 87; 2187 = 27 * 81; 写一个程序,找出4位数的所有吸血鬼数字。
package thinkinjava.charpenter4;
import java.util.Arrays;
/**
* @author Spring-_-Bear
* @version 2021/9/19 20:19
*/
public class Test10
/**
* Charge an vampire number
* @param number An four digits number
* @return true or false
*/
boolean isVampireNumber(int number)
int[] array = number % 10, number / 10 % 10, number / 100 % 10, number / 1000 % 10;
int[] temp = new int[4];
for (int i = 10; i <= 99; i++)
int j = number % i;
if (j == 0)
j = number / i;
temp[0] = i % 10;
temp[1] = i / 10;
temp[2] = j % 10;
temp[3] = j / 10;
Arrays.sort(array);
Arrays.sort(temp);
if (Arrays.equals(array, temp))
return true;
return false;
public static void main(String[] args)
long startTime = System.currentTimeMillis();
Test10 test10 = new Test10();
for (int i = 1000; i < 9999; i++)
if (test10.isVampireNumber(i))
System.out.print(i + " ");
long endTime = System.currentTimeMillis();
System.out.println("\\nTime Running:" + (endTime - startTime) + "ms");
[读书笔记]java编程思想第3章之操作符(代码片段)
==和!=比较对象时比较的是对象的引用,引用到相同的对象时逻辑比较结果为true;如果想比较对象的实际内容是否相同,必须使用所有对象都适用的特殊方法equals(),此方法不适用于基本类型的比较。classV... 查看详情
[读书笔记]java编程思想第5章之初始化与清理(代码片段)
Java方法如果实际传入的参数类型小于方法中声明的形式参数类型,实际数据类型就会被提升。char型有所不同,如果无法找到恰好接受char参数的方法,就会把char直接提升为int型。方法接受较小的基本类型作为参数时... 查看详情
[读书笔记]java编程思想第8章之多态(代码片段)
多态是继数据抽象和继承之后的第三种基本特征。多态通过分离做什么和怎么做,从另一角度将接口和实现分离开来。多态不仅能够改善代码的组织结构和可读性,还可以创建可扩展程序。“封装”通过合并特征和行为... 查看详情
[读书笔记]java编程思想第9章之接口(代码片段)
Java提供了一个叫做抽象方法的机制,这种方法是不完整的;仅有声明而没有方法体。包含抽象方法的类叫做抽象类。如果一个类包含一个或多个抽象方法,该类必须被限定为抽象的。如果从一个抽象类继承,并想... 查看详情
[读书笔记]java编程思想第7章之复用类(代码片段)
只需在新的类中产生现有类的对象。由于新的类是由现有类的对象所组成,所以这种方法称为组合。初始化对象引用有以下几种方法:1)在定义对象的地方初始化。这意味着它们总是能够在构造器被调用之前被初始... 查看详情
[读书笔记]java编程思想(代码片段)
目录第1章对象导论第2章一切都是对象第3章操作符第4章控制执行流程第5章初始化与清理第6章访问权限控制第7章复用类第8章多态第9章接口第10章内部类第11章持有对象第12章通过异常处理错误第13章字符串第14章类型信息第15章泛... 查看详情
[读书笔记]java编程思想第2章之一切都是对象(代码片段)
堆栈位于RAM,通过堆栈指针可以直接从处理器那里获得直接支持。堆栈指针向下移动,则分配新的内存;若向上移动,则释放那些内存。这是一种快速分配有效的分配存储方法,仅次于寄存器。创建程序时ÿ... 查看详情
《java编程思想》读书笔记<一>
第二章一切皆对象java是面向对象的语言。1.我们怎么操作对象?每种语言都有自己的操纵内存中元素的方式,java使用引用操作内存中元素(对象)。引用可以独立存在,例如:Strings;表示创建一个引用。但是对象一旦创建,需... 查看详情
《java编程思想》读书笔记第五章
成员初始化 Java尽力保证:所有变量在使用前都能得到恰当的初始化。 对于方法的局部变量,Java会以编译时报错的形式贯彻这种保证,比如:1voidf()2{3inti;//这里编译时就会报错,未初始化4} 但是如果是类的数据成员... 查看详情
java编程思想读书笔记--第14章类型信息
7.动态代理 代理是基本的设计模式之一,它是你为了提供额外的或不同的操作,而插入的用来代替“实际”对象的对象。这些操作通常涉及与“实际”对象的通信,因此代理通常充当着中间人的角色。 什么是... 查看详情
java编程思想读书笔记--第21章并发
1.基本的线程机制 定义任务publicclassLiftOffimplementsRunnable{protectedintcountDown=10;privatestaticinttaskCount=0;privatefinalintid=taskCount++;publicLiftOff(){}publicLiftOff(intcountDown){this.countDown=count 查看详情
《java编程思想》学习笔记——第四章控制执行流程
true和false 所有条件语句都利用条件表达式的真或假来决定执行路径。if-else if(Boolean-expression) statement 或   查看详情
java编程思想第四版读书笔记——第十三章字符串
Java编程思想第四版读书笔记——第十三章字符串字符串的操作是计算机程序设计中最常见的行为。关键词:StringBuilder,StringBuffer,toString(),format转换,正则表达式,1、不可变StringString对象时不可变的。每当把String对象作... 查看详情
读书笔记《编程珠玑》第一章之位向量&位图
此书的叙述模式是借由一个具体问题来引出的一系列算法,数据结构等等方面的技巧性策略。共分三篇,基础,性能,应用。每篇涵盖数章,章内案例都非常切实棘手,解说也生动有趣。自个呢也是头一次接触编程技巧类的书籍... 查看详情
java超简明入门学习笔记
Java编程思想第4版学习笔记(二)第三章操作符&第四章控制执行流程(流程控制语句) 第三章和第四章的内容主要是讲操作符和流程控制语句,Java的大多数操作符和流程控制语句都和C/C++的十分类似,因此... 查看详情
tij读书笔记02-控制执行流程
body,td{font-family:微软雅黑;font-size:10pt;}TIJ读书笔记02-控制执行流程TIJ读书笔记02-控制执行流程if-else迭代无条件分支switch语句所有条件语句都是以条件表达式的真假来决定执行路径,也就是通过布尔测试结果来决定程序的执行路径.... 查看详情
java编程思想(控制执行流程)
Java使用了C的所有流程控制语句。涉及的关键字包括if-else、while、do-while、for、return、break以及选择语句switch。然而,在java中,并不支持goto语句。但仍然可以进行类型goto那样的跳转,但比起典型的goto,有了很多限制。 ... 查看详情
《快乐编程大本营》java语言训练班-第4课:java流程控制
《快乐编程大本营》java语言训练班-第4课:java流程控制第1节.顺序执行语句第2节.条件分支语句:if条件语句第3节.条件分支语句:switch条件语句第4节.条件分支语句:三元运算符第5节.循环语句:for循环第6节.循环语句:while循环学... 查看详情