1. for循环语法格式需要注意的地方
- 格式1(死循环)
for(;;){} - 格式2(死循环)
int i=1;
for(;i<10;) - 格式3(正确)
int a,b;
for(int i=0,j=0;true;j++,i++){} - 格式4
int a,b;
for(int i=0,j=0;true,i<10;j++,i++){}//错误
for(int i=0,j=0;true||i<10;j++,i++){}
boolean check(){return true}
for(int i=0,j=0;check();j++,i++){}
注意:初始化条件只能是一条语句 - 使用场景
for:次数
while:当…时候
do…while:直到…时候
2. 跳转语句
- break:表示跳出,结束
用在在循环体和switch语句 - continue:跳出本次循环
- 注意的问题:如果在同一个块中,break和continue后不可以有语句,永远也到达不了
Unreachable code异常(continue同理,一个块里面,跳转语句后不能有语句):
public static void main(String[] args) {
int i=3;
while(true){
if(i==3){
break;
System.out.println("end");
}
}
}
public static void main(String[] args) {
int i=3;
while(true){
if(i==3)
break;
System.out.println("end");
}
}
用continue求1-100的和:
public static int test2() {
int sum = 0;
for (int i = 1; i <= 100; i++) {
if (i % 2 != 0)
continue;
sum += i;
}
return sum;
}
public static void main(String[] args) {
System.out.println(test2());
}
- return语句
void f(){
return;
}
//错误
void f(){
return;
System.out.println(“end”);
}
3. 标号语句
- 给外层循环起名字,给内层循环起名字没啥意义,默认跳出内层
- 使用在break 和 continue后面
4. 数组
-
定义:具有相同数据类型,按照一定顺序组合而成的一个数据类型。
-
特点:数据类型相同;有序;下标(索引0~长度-1)
-
一维数组:
- 定义:数据类型 [] 变量名;
int[] arr;
int arr[];
int[] arr[],b; //arr是二维数组,b是一维数组
- 创建数组(数组是在分类上属于引用类型,所以要分配内存)
arr = new int[10]; //new了便在堆内存中申请了空间,对应的数据类型会有默认值 - 赋值
注意:两种花括号赋值是有区别的,第一种不能分开,分开就错了;而第二种new会返回一个地址。
补充:局部变量在使用之前必须初始化,局部变量没有默认值 - 使用数组数据
- sysout(arr[0]);
- for循环
- 增强for
- Arrays.toString(arr);\
- 数组复制
private static void test1() { int[] a = {1,2,3,4,5,6}; int[] b = new int[10]; System.arraycopy(a, 0, b, 0, 3); System.out.println(Arrays.toString(a));; System.out.println(Arrays.toString(b)); ; }
- 数组的扩容
//数组的扩容,重新创建一个数组 private static void test2() { int[] a = new int[]{1,2,3,4}; a = Arrays.copyOf(a, a.length+1); //a重新指向之后,之前的就被回收了 System.out.println(Arrays.toString(a)); }
- Syestem.arraycopy()和Arrays.copyof()的区别:
https://blog.csdn.net/balsamspear/article/details/85069207 ArrayList底层就是用它来实现的扩容
https://blog.csdn.net/balsamspear/article/details/85078599 - 数组排序
- 定义:数据类型 [] 变量名;
import java.util.Arrays;
/*
* 冒泡排序:相邻两个比较,交换,沉到底部,二层循环控制的是每趟的长度(最大的在路上)
* 快速排序:溜一圈,把最大的放到第一个位置(最大的位置定死)
*
*/
public class Demo12 {
public static void main(String[] args) {
int[] arr = {7,2,9,4,1};
test(arr);
System.out.println(Arrays.toString(arr));
Outer:for(int i = 1; i < 3 ; i++) {
Inner:for(int j = 1; j < 3; j++) {
if(j == 2)
continue Outer;
System.out.println(i + ","+ j);
}
}
}
private static void test(int[] arr) {
for(int i=0;i<arr.length;i++){
int min = arr[i];
for(int j = i + 1;j<arr.length;j++){
if(arr[j] < min){
min = arr[j];
swap(arr,i,j);
}
}
}
}
private static void swap(int[] arr, int i, int j) {
arr[i] = arr[i] ^ arr[j];
arr[j] = arr[i] ^ arr[j];
arr[i] = arr[i] ^ arr[j];
}
}
public class Demo11 {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5};
test(arr);
System.out.println(Arrays.toString(arr));
}
private static void test(int[] arr) {
boolean key = false;
for(int i=0;i<arr.length-1;i++){
for(int j =0;j<arr.length-i-1; j++){
System.out.println("111");
if(arr[j] > arr[j+1]){
swap(arr,j,j+1);
key =true;
}
}
if(!key){
break;
}
}
}
private static void swap(int[] arr, int i, int j) {
arr[i] = arr[i] ^ arr[j];
arr[j] = arr[i] ^ arr[j];
arr[i] = arr[i] ^ arr[j];
}
}
练习题
-
对于代码:
public class Test {
public static void main(String[] args){
int i = 3;
if(i < 3)
System.out.println(“haha”);
System.out.println(“hehe”);
}
}
的输出结果是:B
A. haha B. hehe C. haha hehe D. hehe haha E. 编译时报错 -
对于代码:
public class Test {
public static void main(String[] args){
int i = 0;
while(i<10);
{
System.out.println(i);
i++;
}
}
}
的运行结果是:
A. 0 B. 1 C. 10 D. 编译报错 E. 没有输出 -
对于代码:
public class Test {
public static void main(String[] args){
int i = 5;
switch(i){
default:
int y = 5;
case 4:
y += 4;
case 3:
y += 3;
break;
case 2:
y += 2;
case 1:
y += 1;
}
System.out.println(y);
}
}
的运行结果是:D
A.15 B. 12 C. 9 D. 5 E. 编译时报错 -
对于代码:
public class Test {
public static void main(String[] args){
Outer:for(int i = 1; i < 3 ; i++) {
Inner:for(int j = 1; j < 3; j++) {
if(j == 2)
continue Outer;
System.out.println(i + “,” + j);
}
}
}
}
的运行结果是:A、B
A. 1,1 B. 1,2 C. 2,1 D. 2,2 E. 编译时报错
二、 编程题
1.读入一个三位数,计算其各位数字之和。例如: 123,各位数字之和为6
public class Demo3 {
public static void test() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个一个数:");
int s = sc.nextInt();
int sum = 0;
while (s % 10 != 0) {
sum += (s % 10);
s /= 10;
}
System.out.println(sum);
}
public static void main(String[] args) {
test();
}
}
2. 计算1+2+3+…+100 的和
public class Demo5 {
public static int addSum(int n){
if(n==0)
return 0;
return n+addSum(n-1);
}
public static void main(String[] args) {
System.out.println(addSum(100));;
}
}
3.计算1+3+5+…+99 的和
public class Demo13 {
public static void add(){
int sum = 0;
for(int i=1;i<100;i++){
if(i%2!=0){
sum += i;
}
}
System.out.println(sum);
}
public static void main(String[] args) {
add();
}
}
4.读入一个小于10 的整数n,输出它的阶乘n!
private static void jc() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数");
int x = sc.nextInt();
int sum = 1;
for(int i=1;i<=x;i++){
sum *=i;
}
System.out.println(sum);
}
5.求100 以内所有能被3 整除但不能被5 整除的数字的和。
6.“百钱买百鸡”是我国古代的著名数学题。题目这样描述:3文钱可以买1只公鸡,2文钱可以买一只母鸡,1文钱可以买3只小鸡。用100 文
钱买100 只鸡,那么各有公鸡、母鸡、小鸡多少只?
7.搬砖问题:36块砖,36人搬,男搬4,女搬3,两个小孩抬1砖,要求一次全搬完,问男、女和小孩各若干?
public class Demo14 {
public static void main(String[] args) {
test();
}
private static void test() {
for(int a = 0; a<=36; a++)
for(int b = 0; b<=36; b++)
for(int c = 0; c<=36; c++){
if(a*8+6*b+c==72&&a+b+c==36)
System.out.println(a+" "+b+" "+c);
}
}
}
8.读入一个整数n,输出如下图形:
当输入 n=3时,输出:
*
***
*****
当输入n=4时,输出:
*
***
*****
*******
public class Demo7 {
public static void test() {
int key = 1;
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数字:");
int x = sc.nextInt();
for (int i = x; i > 0; i--) {
for (int j = 1; j < i; j++) {
System.out.print(" ");
}
for (int m = key; m >= 1; m--)
System.out.print("*");
System.out.println();
key = key + 2;
}
}
public static void main(String[] args) {
test();
}
}
- 输出99 乘法表
package cn.tedu.day03.demo;
public class Demo2 {
public static void test1(){
for(int i=0;i<4;i++){
for(int j=0;j<5;j++){
System.out.print("*");
}
System.out.println();
}
}
public static void test2(){
for(int i=0;i<5;i++){
for(int j=0;j<=i;j++){
System.out.print("*");
}
System.out.println();
}
}
public static void cfb(){
for(int i=1;i<=9;i++){
for(int j=1;j<=i;j++){
System.out.print(i+"x"+j+"="+i*j+"\t");
}
System.out.println();
}
}
public static void main(String[] args) {
test1();
System.out.println("===================");
test2();
System.out.println("==================");
cfb();
}
}
- 求水仙花数。所谓水仙花数,是指一个三位数abc,如果满足a3 + b3 + c3 = abc,则abc是水仙花数。
public class Demo6 {
public static void test() {
for (int i = 100; i < 1000; i++) {
int sum = 0;
int key = i;
while (key != 0) {
sum += (key % 10) * (key % 10) * (key % 10);
key /= 10;
}
if (sum == i)
System.out.println(i);
}
}
public static void main(String[] args) {
test();
}
}
12. 输入一个整数, 计算它各位上数字的和。(注意:是任意位的整数)
- 输入一整数A,判断它是否质数。
public class Demo4 {
static int sum = 0;
public static void test() {
System.out.println(1);
System.out.println(2);
for (int i = 3; i <= 1000; i++) {
for (int j = 2; j <= Math.sqrt(i) + 1; j++) {
if (i % j == 0)
break;
if ((int) Math.sqrt(i) + 1 == j) {
System.out.println(i);
sum++;
}
}
}
}
public static void main(String[] args) {
test();
System.out.println(sum);
}
}