java基础3
基础3
【文章是用来帮助自己巩固知识的,如果有什么不对的地方,还望评论指出,理性探讨】
break、continue、switch
- break:用于选择结构和循环结构,表示结束当前的一层结构
- continue:只能用于循环结构,表示跳过本次循环继续下次循环(只能跳过一层循环)
- switch()中需要一个选项,选项只能是byte/short/char/int,从JDK1.7开始,允许使用String
- 如果每一个case之后都有break,case顺序不影响结果
- 如果有一个或者多个case之后没有break,那么这个时候case之间的顺序影响结果,顺次往下执行,直到遇到break;
- 只要其他的case都不符合则自动划归到default,最好加上break;
1
目录,再往上一拉
// 输入一个数字,输出这个数字是一个几位数
// 整除10,判断商,为0,就是个数
public static int lengthNum(int num) {
int count=0; //计数
while(num>=1) {
num/=10;
count++;
}
return count;
}
2
目录,再往上一拉
// 输入数字表示月份,然后输出这个月份对应的天数(平年)
// 31天:1 3 5 7 8 10 12
// 30天:4 6 9 11
// 28天:2
int month = s.nextInt();
switch(month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
System.out.println(31);break;
case 4:
case 6:
case 9:
case 11:
System.out.println(30);
break;
case 2:
System.out.println(28);
break;
default:
System.out.println("Illegal month!!!");break;
}
import java.util.Scanner;
public class SwitchCaseExer2 {
// 练习:输入三个数字表示年月日,输出这一天在这一年是第几天
// 需要判断平年闰年:逢百整除400;不逢百整除4
public static void main(String[] args){
// 获取年月日
Scanner s = new Scanner(System.in);
int year = s.nextInt();
int month = s.nextInt();
int day = s.nextInt();
// 定义一个变量来记录总天数
int sum = 0;
// 根据月份确定到底要加上多少天
switch(month){
case 12:sum += 30; // 经历11月的30天
case 11:sum += 31; // 经历10月的31天
case 10:sum += 30;
case 9: sum += 31;
case 8: sum += 31;
case 7: sum += 30;
case 6: sum += 31;
case 5: sum += 30;
case 4: sum += 31;
case 3: // 加上2月的天数 - 平年和闰年的判断
if(year % 100 != 0 && year % 4 == 0 || year % 400 == 0){
sum += 29;
} else {
sum += 28;
}
case 2: sum += 31;
case 1: sum += day;
}
System.out.println(sum);
}
}
for、(if、 else if、else)、(while、do while)
- for()内有3部分组成,对于for循环而言,如果第二部分的控制条件没有写,那么默认为true,这个时候就成了一个死循环
- 习惯上如果变化不规律或者次数不确定一般使用while循环;如果变化规律或者是次数固定,一般是用for循环
for循环的例子
目录,再往上一拉
0
public class LoopExer {
// 一个for循环实现99乘法表
public static void main(String[] args){
/*
*
**
***
****
*****
*/
for(int i = 1, j = 1; i <= 9; j++){
// 无论哪一行,上来都是先打印*
System.out.print("*");
// 判断是否是打印完成本行最后一个*
if(j == i){
// 换行
System.out.println();
// 行数+1
i++;
// *从头重新开始计数
j = 0;
}
}
}
}
1
目录,再往上一拉
public class LoopExer {
public static void main(String[] args){
// 打印九九乘法表
/*
for(int i = 1; i <= 9; i++){
for(int j = 1; j <= i; j++){
System.out.print(j + "*" + i + "=" + (i * j) + "\t");
}
System.out.println();
}
*/
/*
*****
*****
*****
*****
*****
*/
/*
for(int i = 1; i <= 5; i++){
for(int j = 1; j <= 5 - i; j++)
System.out.print(" ");
for(int j = 1; j <= 5; j++)
System.out.print("*");
System.out.println();
}
*/
/*
** **
**** ****
****** ******
***************
*************
***********
*********
*******
*****
***
*
*/
// 百钱百鸡 --- 3文钱1只公鸡,2文钱1只母鸡,1文钱3只小鸡;100文钱如何买恰好100只鸡?
// 计算机的运算就是凑数,满足3个条件:100只小鸡,100块钱,小鸡的个数是整数
for(int i = 1; i < 33; i++){ // 表示公鸡的个数
for(int j = 1; j < 50; j++){// 表示母鸡的个数
// 计算小鸡的个数
int k = 100 - i - j;
if(k % 3 == 0 && i * 3 + j * 2 + k / 3 == 100){
System.out.println("公鸡" + i);
System.out.println("母鸡" + j);
System.out.println("小鸡" + k);
System.out.println("==================");
}
}
}
}
}
2
目录,再往上一拉
import java.util.Scanner;
public class LoopDemo2 {
public static void main(String[] args){
Scanner s = new Scanner(System.in);
int n = s.nextInt();
// 标记这个数字是否是一个质数
// 规定如果为true表示是一个质数,如果为false表示不是一个质数
boolean b = true;
// 判断一个数字是否是一个质数
// 从2开始逐个往后取余,看是否还有别的因数,如果没有别的因数,那么就是一个质数,反之就说明不是质数
for(int i = 2; i < n; i++){
// 如果能够取余,说明n除了1和本身以外还有别的因数,那么n就不是质数
if(n % i == 0){
b = false;
break;
}
}
if(b)
System.out.println(n + "是一个质数");
else
System.out.println(n + "不是一个质数");
}
}
3
目录,再往上一拉
public class LoopDemo {
public static void main(String[] args){
// *******
/*
for(int i = 1; i <= 7; i++){
// 不换行打印
// ln -> line
System.out.print("*");
}
System.out.println();
*/
/*
*******
*******
*******
*******
*/
// 循环的嵌套
/*
for(int count = 1; count <= 5; count++){
for(int i = 1; i <= 7; i++){
System.out.print("*");
}
System.out.println();
}
*/
/*
*
**
***
****
*****
******
行数:1 -> n
第i行*的个数:1->i
*/
/*
for(int i = 1; i <= 6; i++){
for(int j = 1; j <= i; j++){
System.out.print("*");
}
System.out.println();
}
*/
/*
******
*****
****
***
**
*
行数:n -> 1
每一行的*的个数:i -> 1
*/
/*
for(int i = 6; i > 0; i--){
for(int j = i; j > 0; j--){
System.out.print("*");
}
System.out.println();
}
*/
/*
-----*
----**
---***
--****
-*****
******
行数:1 -> n
空格的个数:1 -> n-i
*的个数:1 -> i
*/
/*
for(int i = 1; i <= 6; i++){
// 先打印空格
for(int j = 1; j <= 6 - i; j++){
System.out.print(" ");
}
// 打印*
for(int k = 1; k <= i; k++){
System.out.print("*");
}
System.out.println();
}
*/
/*
******
*****
****
***
**
*
行数: n -> 1
空格个数: n-i -> 1
*的个数: i -> 1
*/
for(int i = 6; i > 0; i--){
for(int j = 6 - i; j > 0; j--)
System.out.print(" ");
for(int j = i; j > 0; j--)
System.out.print("*");
System.out.println();
}
}
}
while循环的例子
import java.util.Scanner;
public class WhileExer {
public static void main(String[] args){
// 1. 求1-100以内所有的奇数的和
/*
// 记录和
int sum = 0;
int i = 1;
while(i <= 100){
sum += i;
i += 2;
}
System.out.println(sum);
*/
// 2. 打印100以内能被3整除而不能被7整除的数字
// 思路:先获取所有的3的倍数,然后再判断这个倍数能否被7整除
/*
int i = 0;
while(i <= 100){
// 判断能否被7整除
if(i % 7 != 0)
System.out.println(i);
i += 3;
}
*/
// 3. 输入一个数字,输出这个数字是一个几位数
// 思路:看能除以几次10
/*
Scanner s = new Scanner(System.in);
int n = s.nextInt();
int count = 0;
while(n != 0){
n /= 10;
count++;
}
System.out.println(count);
*/
}
2
目录,再往上一拉
// 4. 输入一个数字,输出这个数字的所有的因数
Scanner s = new Scanner(System.in);
int n = s.nextInt();
int i = 1;
while(i <= n){
if(n % i == 0)
System.out.println(i);
i++;
}
5 读入一个三位数,计算其各位数字之和。例如: 123,各位数字之和为6*/
class Exer7{
public static void sum(int n){
int i = n % 10;
int j = n / 10;
int k = j % 10;
int l = n / 100;
System.out.println(i + k + l);
}
}
13. 搬砖问题:36块砖,36人搬,男搬4,女搬3,两个小孩抬1砖,
要求一次全搬完,问男、女和小孩各若干?
public static void banZhuan(){
for(int i = 1; i <= 9; i++){
for(int j = 1; j <= 12; j++){
int k = 36 - i - j;
if(4 * i + 3 * j + k / 2 == 36 && k % 2 == 0){
System.out.println(i + "," + j + "," + k);
}
}
}
}
3
目录,再往上一拉
17. 求水仙花数。所谓水仙花数,是指一个三位数abc,如果满足a3+ b3+ c3= abc,则abc是水仙花数
public static void flower(){
for(int i = 100; i <= 999; i++){
int c = i % 10;
int x = i % 100;
int b = x / 10;
int a = i / 100;
if(a * a * a + b * b * b + c * c * c == i){
System.out.println(i);
}
18. 输入一个整数, 计算它各位上数字的和。(注意:是任意位的整数)
// 除 / 取的是左边的, % 取得是右边的数字
public static void sum_3(int n){
int sum = 0;
while(n != 0){
sum += (n % 10);
n /= 10;
}
System.out.println("各位数字的和" + "=" + sum);
}
19. 如果一个数等于其所有因子之和,我们就称这个数为"完数",例如6 的因子为1,2,3,6=1+2+3,6就是一个完数.
请编程打印出1000 以内所有的完数
public static void wanshu(int n){
int sum = 0;
for(int i = 1; i <= n / 2; i++){
if(n % i == 0){
sum += i;
}
}
if(sum == n){
System.out.println(n + "是一个完数");
}else{
System.out.println(n + "不是一个完数");
}
}
/*21. 计算圆周率:中国古代数学家研究出了计算圆周率最简单的办法:
PI=4/1 - 4/3 + 4/5 - 4/7 + 4/9 - 4/11 + 4/13 - 4/15 + 4/17......这个算式的结果会无限接近于
圆周率的值,我国古代数学家祖冲之计算出,圆周率在3.1415926和3.1415927 之间,
请编程计算,要想得到这样的结果,
他要经过多少次加减法运算?*/
public static void pi(){
double i = 1;
double sum = 0;
while(true){
if(i % 2 == 0){
sum -= 4 / (2 * i - 1);
}else{
sum += 4 / (2 * i - 1);
}
// System.out.println(i + "," + sum);
if(sum >= 3.1415926 && sum <= 3.1415927){
System.out.println(i - 1);
break;
}
i++;
}
}
}
4
目录,再往上一拉
/*22. 已知:faibonacci(费波那契)数列的前几个数分别为0,1,1,2,3,5……。
从第3 项开始,每一项都等于前两项的和。读入一个整数
n,编程求出此数列的前n 项。*/
public static void faibonacci(int n){
int a = 0,b = 1,c = 0;
System.out.print(0 + "\t" + 1 + "\t" );
for(int i = 0;i <= n; i++){
c = a + b;
a = b;
b = c;
System.out.print(c + "\t");
}
}
/*23. 一个int 类型的整数由32 个二进制位组成,每个二进制位的值要么为0要么为1。
要求读入一个int 类型的整数n,计算它的32 个二进
制位中总共有多少位为1?*/
public static void binary(int n){
int count = 0;
while(n != 0){
int k = n % 2;
if(k == 1){
count++;
}
n /= 2;
}
System.out.println(count);
}
判断一个数是不是质数?
public static boolean prime(int n){
if(n < 2){
return false;
}
if(n == 2){
return true;
}
if(n % 2 == 0){
return false;
}
for(int i = 2; i < n; i++){
if(n % i == 0){
return false;
}
}
return true;
}