昨天的代码补充(if-else,随机数)
/*
编写程序,由键盘输入三个整数分别存入变量num1,num2,num3。
对它们进行排序(使用 if-else if-else),并且从小到大输出
说明:
1.if-else结构可以相互嵌套使用
2.如果if-else结构中的执行语句中只有一行时,相应的一对{}大括号可以省略,但不建议这样做
*/
import java.util.Scanner;
class IfTest2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入第一个整数");
int num1 = scanner.nextInt();
System.out.println("请输入第二个整数");
int num2 = scanner.nextInt();
System.out.println("请输入第三个整数");
int num3 = scanner.nextInt();
if (num1 > num2){
if(num3 > num1){
System.out.println(num2 + "," + num1 + "," + num3);
}else if (num3 <= num2){
System.out.println(num3 + "," + num2 + "," + num1);
}else{
System.out.println(num2 + "," + num3 + "," + num1);
}
}else{
if(num3 > num2){
System.out.println(num1 + "," + num2 + "," + num3);
}else if (num3 <= num1){
System.out.println(num3 + "," + num1 + "," + num2);
}else{
System.out.println(num1 + "," + num3 + "," + num2);
}
}
//如何获取一个随机数:10 - 99
double value = (int)(Math.random()*90) + 10;//[0.0,1.0) -->[10.0,100.0)-->[10,99]
System.out.println(value);
//公式:[a,b] : (int)(Math.random()*(b - a + 1) + a)
}
}2.5.3 switch-case结构
/*
分支结构之二:switch-case
1.格式
switch(表达式){
case 常量1:
语句1;
//break;
case 常量2:
语句2:
//break;
....
case 常量N:
语句N:
//break;
default:
语句N;
//break;
}
2.说明:
①根据switch表达式中的值,依次匹配各个case中的常量,一旦匹配成功,则进入相应case结构中,调用其执行语句。
当调用完执行语句后,则仍然继续向下执行其他case结构中的执行语句,
直到遇到break关键字或此switch-case结构末尾结束为止
②break,可以使用在switch-case结构中,表示一旦执行到此关键字,就跳出switch-case结构
③switch结构的表达式,只能是如下的6种数据类型之一:
byte,short,char,int,枚举类型(jdk5.0新增),String(7.0新增)
④case之后只能声明变量,不能声明范围
⑤break关键字是可选的
⑥default:相当于if-else中的else。
default结构是可选的。
*/
class SwitchCaseTest {
public static void main(String[] args) {
int number = 5;
switch(number){
case 0:
System.out.println("zero");
break;
case 1:
System.out.println("one");
break;
case 2:
System.out.println("two");
break;
case 3:
System.out.println("three");
break;
default:
System.out.println("other");
}
}
}
合并特性说明
/*
例题:对学生成绩大于60分的,输出"合格",低于六十分的输出"不合格"
说明:
如果switch-case结构中的多个case执行语句相同,可以合并
*/
class SwitchTest1{
public static void main(String[] args) {
/*
int score = 78;
switch(score){
case 0:
case 1:
.....
case 100:
}*/
int score = 78;
switch(case/10){
case 0 :
case 1 :
case 2 :
case 3 :
case 4 :
case 5 :
System.out.println("不及格");
break
case 6 :
case 7 :
case 8 :
case 9 :
case 10 :
System.out.println("及格");
break;
}
}
}
2.5.4循环结构
在某些条件满足的情况下,反复执行代码的功能。
/*
For循环结构的使用
一、循环结构的四个要素
①初始化条件
②循环条件 --->循环条件是boolean类型
③循环体
④迭代条件
二、for循环的结构
for(①;②;){
③
}
执行过程:① - ② - ③ - ④ - ② - ③ -.....- ②
*/
class ForTest {
public static void main(String[] args) {
for (int i = 1;i <= 5 ;i++ ){//i=1,2,3,4,5
System.out.println("Hello World");
}
//练习:
int num = 1;
for (System.out.print('a');num <= 3 ;System.out.print('c'),num++){
System.out.print('b');
}
//输出结果:abcbcbc
//例题:遍历100以内的偶数,要输出所有偶数的和
int sum = 0;//记录所有偶数的和
for (int i = 1;i <= 100 ;i++ ){
if(i % 2 == 0){
System.out.println(i);
sum += i;
}
}
System.out.println("总和为:" + sum);
}
}
练习题1:
/*
if else 练习题
说明:
else结构是可选的
2.针对于条件表达式:
>如果多个条件表达式之间是"互斥"的关系(或没有交集的关系),哪个判断和执行语句声明在上面还是在下面,无所谓
>如果多个条件表达式之间有交集的关系,需要根据实际情况,考虑清楚应该将哪个结构声明在上面
>如果多个条件表达式之间有包含关系,通常情况下需要将范围小的声明在范围大的上面,否则范围小的就没有机会运行了
*/
import java.util.Scanner;
class IfTest {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入你的成绩(0-100):");
int score = scan.nextInt();
if (score == 100){
System.out.println("BMW");
}else if (score > 80 && score <= 99){
System.out.println("iphone");
}else if (score > 60 && score <= 80){
System.out.println("ipad");
}else{
System.out.println("none");
}
}
}
练习题2:
/*
题目:输入两个正整数m和n,求其最大公约数和最小公倍数
*/
import java.util.Scanner;
class ForTest {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入第一个正整数:");
int m = scan.nextInt();
System.out.println("请输入第一个正整数:");
int n = scan.nextInt();
//获取最大公约数
//获取两个数中的最小值
int min = (m <= n)?m : n;
for(int i = min;i >=1 ;i--){
if (m % i==0 && n % i ==0){
System.out.println(i);
break;//一旦在循环中执行到break就跳出循环
}
}
//获取最小公倍数
//获取两个数中的较大值
int max = (m >= n)?m:n;
for(int i = max;i <= m * n;i++){
if(i % m == 0 && i % n == 0){
System.out.println(i);
break;
}
}
}
}
2.5.5Do-While循环
/*
do-while循环使用
一、循环结构的四个要素
①初始化条件
②循环条件 --->循环条件是boolean类型
③循环体
④迭代条件
二、do-while循环结构
1
do{
3;
4;
}while{2};
执行过程1-3-4-2-3-4.......-2
说明:
1.do-while循环至少会执行一次循环体
2.开发中,使用for和while更多一些,较少使用do-while
*/
class DoWhileTest {
public static void main(String[] args) {
//遍历100以内的偶数,并计算所有偶数的和及偶数的个数
int sum = 0;//记录总和
int count = 0;//记录个数
int num = 1;
do{
if (num % 2 == 0){
System.out.println(num);
sum += num;
count++;
}
num++;
}while(num <=100);
System.out.println("总和为" + sum);
System.out.println("个数为" + count);
//******************
int number1 = 10;
while(number1 > 10){
System.out.println("Hello-while") ;
number1--;
}
int number2 = 10;
do{
System.out.println("Hello-do");
number2--;
}while(number2 > 10);
}
}
2.5.6 while(true)
/*
题目:
从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入为0时程序结束。
说明:
1.不在循环条件部分限制次数的结构;for(;;)或while(true)
2.结束循环有几种方式:
方式一:循环条件部分返回false
方式二:在循环体中,执行break
*/
import java.util.Scanner;
class ForWhileTest {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int positiveNumber = 0;//记录正数的个数
int negativeNumber = 0;//记录负数的个数
while(true){
int number = scan.nextInt();
//判断number的正负情况
if(number > 0){
positiveNumber++;
}else if (number < 0){
negativeNumber++;
}else{
//一旦执行break,跳出循环
break;
}
}
System.out.println("输入的正数个数为:" + positiveNumber);
System.out.println("输入的负数个数为:" + negativeNumber);
}
}
2.5.7嵌套循环
/*
嵌套循环的使用
1.嵌套循环:将一个循环结构A声明在另一个循环结构B的循环体中,就构成了嵌套循环
2.
外层循环:循环结构B
内层循环:循环结构A
3.说明
内层循环结构遍历一遍,只相当于外层循环循环体执行了一次
假设外层循环需要执行m次,内层循环需要执行n次,此时内层循环的循环体一共执行了m*n次
4.技巧:外层循环控制行数,内层循环控制列数
*/
class ForForTest{
public static void main(String[] args) {
//******
System.out.println("******");
for(int i = 1;i <= 6;i++){
System.out.print("*");
}
System.out.println();
//****************************
for(int j = 1;j <= 4;j++){
for(int i = 1;i <= 6;i++){
System.out.print("*");
}
System.out.println();
}
//************************
for (int i = 1;i <= 5 ;i++){//控制行数
for (int j = 1;j <= i;j++ ){//控制列数
System.out.print("*");
}
System.out.println();
}
//*************************
for (int i = 1;i <= 5 ;i++){//控制行数
for (int j = 1;j <= 5-i;j++ ){//控制列数
System.out.print("*");
}
System.out.println();
}
//****************
//上半部分
//下半部分
}
}
练习题3(质数)
/*
100以内所有质数的输出
质数:素数,只能被1和它本身整除的自然数.-->从2开始到这个数-1结束为止,都不能被这个数本身整除
最小的质数是2
*/
class PrimeNumberTest {
public static void main(String[] args) {
boolean isFlag = true;//表示i是否被j除尽
for (int i = 2;i <= 100 ;i++ ){//遍历100以内的自然数
for (int j = 2;j < i ;j++ ){//被i去除
if (i % j == 0){//i被j除尽
isFlag = false;
}
}
//
if(isFlag == true){
System.out.println(i);
}
//重置isFlag
isFlag = true;
}
}
}
练习题3 优化算法
/*
100以内所有质数的输出
质数:素数,只能被1和它本身整除的自然数.-->从2开始到这个数-1结束为止,都不能被这个数本身整除
最小的质数是2
优化方法
无优化 17083ms
优化1 2659ms
优化2 1066ms
*/
class PrimeNumberTest1 {
public static void main(String[] args) {
boolean isFlag = true;//表示i是否被j除尽
//获取当前时间的毫秒数
long start = System.currentTimeMillis();
for (int i = 2;i <= 100000 ;i++ ){//遍历100以内的自然数
for (int j = 2;j < Math.sqrt(i);j++ ){//被i去除
if (i % j == 0){//i被j除尽
isFlag = false;
break;//优化一:只对本身非质数的自然数是有效的
}
}
//
if(isFlag == true){
System.out.println(i);
}
//重置isFlag
isFlag = true;
}
long end = System.currentTimeMillis();
System.out.println("所花费的时间为:" + (end-start));
}
}
2.5.8特殊关键字的作用
break continue
/*
break和continue关键字的使用
使用范围 循环中使用的作用(不同点) 相同点
switch-case
break: 循环结构 结束当前循环 关键字后面不再执行语句
continue: 循环结构 结束当次循环
*/
class BreakContinueTest {
public static void main(String[] args) {
for (int i = 1;i <= 10;i++ ){
if (i % 4 == 0){
break;
}
System.out.print(i);
}
System.out.println();
for (int i = 1;i <= 10;i++ ){
if (i % 4 == 0){
continue;
}
System.out.print(i);
}
}
}

京公网安备 11010502036488号