控制台输入
//接收键盘输入
Scanner sc=new Scanner(System.in);
String str=sc.next();
int num =sc.nextInt();
float f=sc.nextFloat();
double d=sc.nextDouble();
System.out.println(str+","+num+","+f+","+d);
//接收键盘输入3个int的数,打印最大值,使用三元运算符实现
//法一
System.out.println("input a1:");
int a1=sc.nextInt();
System.out.println("input a2:");
int a2=sc.nextInt();
System.out.println("input a3:");
int a3=sc.nextInt();
int b=a1>a2?a1:a2;
int c=b<a3?a3:b;
System.out.println("最大值:"+c);
//法二
int m=Math.max(a1, a2);
m=Math.max(m, a3);
System.out.println("最大值:"+m);
语句种类:
赋值语句:x=9;
方法调用语句:System.out.print("hello");
Math.max(5,6);
import和package语句
判断:if ,switch
循环:for,while,do-while
跳转语句:break,continue
- import语句:
作用:导入类
格式:import java.util.*;
或import java.util.Scanner;
位置:class上边,package下边
数量:多个 - package:
作用:管理类
格式:package cn.tedu.demo;
位置:第一条有效句
数量:至多一条 - if语句有如下4种形式。
1.if(boolean){}
2.if(boolean){} else{}
3.if(boolean){} if(boolean){} …
4.if(boolean){} else if(boolean){} … else{}
else子句不能单独使用
- switch(){}
括号中的参数类型(byte,short,int,char)
在jdk 1.7之后参数类型为 (byte,short,int,char,String,Enum),不能是 boolean 类型。
switch 语句 的语法格式如下:
case n:
语句;
break;
//可有可无,如果有,跳出switch语句。没有,继续向下执行,和n无关。
.........
default:
语句;
注: n不能相同;default的位置是随意的
//以下结果为5,因为java代码是按顺序执行的
int n=5;
switch(n) {
default:
System.out.println("defult");
case 5:
System.out.println(5);
break;
case 1:
System.out.println(1);
break;
}
在 case 标签后的每个代码块后都有一条 break;语句,如果把下面程序中的 break;语句都注释掉,将看到如下运行结果:
5
1
switch语句会拿表达式和 case 标签后的值进行比较, 一旦遇到相等的值,程序就开始执行这个 case 标签后的代码,不再判断与后面 case、 default 标签的条件是否匹配,除非遇到 break; 才会结束。
练习题
1.接受键盘输入,如果为偶数打印输出
Scanner sc=new Scanner(System.in);
System.out.println("input num:");
int num=sc.nextInt();
if(num%2==0) {
System.out.println("偶数:"+num);
}
2.输入一个数字表示重量,
如果重量<=20,则每千克收费0.35元;
如果超过20千克不超过100千克的范围,则超过的部分按照每千克0.5元收费;
如果超过100千克,则超过的范围按照每千克0.8元收费。
计算输入的重量对应的总费用.
System.out.println("输入重量:");
int weight=sc.nextInt();
if(weight<=20) {
System.out.println(weight*0.35);
}
else if(weight>20 && weight<100) {
System.out.println(20*0.35+0.5*(weight-20));
}
else {
System.out.println(20*0.35+0.5*80+0.8*(weight-100));
}
3.控制台输入年和月,输出该年该月有多少天(year%4==0&&year%100!=0||year%400==0闰年判断条件)
System.out.println("输入年份:");
int year=sc.nextInt();
System.out.println("输入月份:");
int month=sc.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:
if(year%4==0 && year%100!=0||year%4==0) {
System.out.println("29天");
}
else {
System.out.println("28天");
}
}
4.控制台输入两个整数和运算符,输出结果
System.out.println("input a1:");
int a1=sc.nextInt();
System.out.println("input a2:");
int a2=sc.nextInt();
System.out.println("input:");
String str=sc.next();
switch(str) {
case "+":
System.out.println(a1+a2);
break;
case "-":
System.out.println(a1-a2);
break;
}
循环结构
for 循环的基本语法格式如下:
for(表达式1;表达式2;表达式3){
语句体;
}
循环原理:
表达式1完成初始化,表达式2判断条件,如果为true,执行语句体;表达式3(步长);执行表达式2,直到判断条件为false,跳出循环体
//省略了 for 循环三个部分,循环条件将一直为 true
for(;;) //正确的
while 循环的语法格式如下:
while(boolean){
循环体;
}
do while 循环的语法格式如下:
do{
循环体;
}while(boolean);
do-while至少执行一次循环体
循环语句练习题
/**1.求1-100以内所有的奇数的和----i=1;i+=2;
*
*/
public static void test1() {
int sum=0;
for(int i=1;i<=100;i+=2) {
sum+=i;
}
System.out.println(sum);
}
/**2.打印100以内能被3整除而不能被7整除的数字---先获取3的倍数
*
*/
public static void test2() {
for(int i=1;i<=100;i++) {
if(i%3==0&&i%7!=0) {
System.out.println(i);
}
}
}
/**3.输入一个数字,输出这个数字是一个几位数
*
*/
public static void test3() {
Scanner sc=new Scanner(System.in);
System.out.println("input num:");
int num =sc.nextInt();
int count=1;
while(num>=10) {
num=num/10;
count++;
}
System.out.println(num+"的位数:"+count);
}
/**4.输入一个数字,输出这个数子的所有因数
*
*/
public static void test4() {
Scanner sc=new Scanner(System.in);
System.out.println("input a:");
int a =sc.nextInt();
for(int i=1;i<=a;i++) {
if(a%i==0) {
System.out.println(i);
}
}
}
嵌套循环
各种类型的循环都可以作为外层循环,也可以作为内层循环。 下面是一个嵌套循环的示例代码。
for(int i=1;i<=10;i++){
for(int j=1;j<=5;j++){
System.out.println("*");
}
}
循环原理:外层执行一次,内层执行全部
练习一:
for(int i=1;i<=5;i++){
for(int j=1;j<=6;j++){
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<=9;i++){
for(int j=1;j<=i;j++){
System.out.print(j+"*"+i+"="+i*j+" ");
}
System.out.println();
}
控制循环结构
break:可用于switch和循环体
表示跳出循环体(switch语句体)
break语句后的代码永远不能执行
一旦在循环体中遇到 break,系统将完全结束该循环,开始执行循环之后的代码。
void f(){
int x=5;
if(x==5){
break;
}
}
//error,因为break用于循环语句
void m() {
for(;;) {
if(true)
break;
System.out.print("*");
}
}
//结果为空白,*未输出,因为break语句后的代码永远不能执行
break 语句不仅可以结束其所在的循环, 还可以直接结束其外层循环。 此时需要在 break 后紧跟一 个标签,这个标签用于标识一个外层循环。 Java 中的标签就是一个紧跟着英文冒号(:)的标识符。
// 外层循环, out 作为标识符
out:for(int i=1;i<=5;i++){
for(int j=1;j<=4;j++){
if(j==2) {
// 跳出 out 标签所标识的循环
break out;
}
System.out.print(j+"\t");
}
System.out.println();
}
程序遇到一个 break out;语句,这行代码将会导致结束 out 标签指定的循环,不是结束 break 所在的循环, 而是结束 break 循环的外层循环。
continue:可以用于循环体中
表示结束本次循环,开始新一次循环
语句后的代码永远不能执行
for(int j=1;j<=10;j++){
if(j%2==0){
continue;
//System.out.print("hello"); 此句error
}
System.out.print(j);
}
//结果为1 3 5 7 9
return :并不是专门用于结束循环的,是结束一个方法。
当一个方法执行到一个return语句时,这个方法将被结束。例如下面程序。
//一个简单的 for 循环
for (int i = 0 ; i < 3 ; i++ )
{
System . out.print1n( " i的值是" + i);
if (i == 1)
{
return;
}
System . out . println( " return 后的输出语句n" );
}
运行上面程序,循环只能执行到 i 等于 1 时, 当 i 等于 1 时程序将完全结束(当 main 方法结束时,也就是 Java 程序结束时)。与 continue 和 break 不同的是, return 直接结束整个方法, 不管这个return处于多少层循环之内 。
练习题
1.输出2-1000,所有的质数(素数)
//质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数
//结果为2,3,5,7.....
int i,j;
for(i=2;i<=1000;i++) {
for(j=2;j<i;j++) {
if(i%j==0) {
break;
}
}
if(j>i/2) {
System.out.print(i+"\t");
}
}
2.求4个阶乘的和 4!+3!+2!+1
int sum=0;
for(int i=4;i>=1;i--) {
int a=1;
for(int j=i;j>=1;j--) {
a*=j;
}
sum+=a;
}
System.out.print(sum);
//结果为33
3.百钱百鸡 — 3文钱1只公鸡,2文钱1只母鸡,1文钱3只小鸡;
100文钱如何买恰好100只鸡?
— 先定义一个循环表示公鸡,嵌套一个循环表示母鸡,计算小鸡的个数,
根据各种鸡的个数来计算钱数是否为100
for(int x=1;x<=33;x++) {
for(int y=1;y<=50;y++) {
int z=100-x-y;
if(z%3==0&&3*x+2*y+z*1/3==100) {
System.out.print("公鸡"+x+"只,母鸡"+y+"只,小鸡"+z+"只"+"\n");
}
}
}
结果如下: