java实训第三天7/28

来源:互联网 发布:淘宝产品摄影班 编辑:程序博客网 时间:2024/06/07 08:13
1.一个.java文件是否可以包含多个类,有什么限制
 可以包含多个类
 只有一个类可以包含main方法,该类的名必须与文件名相同
有且只有与文件同名的类可以是public修饰的
2.&与&&的区别:
  & :是位运算符,比较的两边是二进制数据,不会发生短路
只能对 byte short char int long
  &&:逻辑运算符,把两个表达式 并列为一个表达式
会发生短路,两边是boolean类型的数据
 | 与 ||
3.a:short s1=1;s1=s1+1;有什么错?b:short s1=1;s1+=1;有什么错?
a:错误,1 是int类型 int 类型不能直接赋值给short类型,必须强制类型转换
s1=(short)(s1+1);
b:正确,+=,java自动处理类型
short s1=1;s1+=1;//相当于 s1=(short)(s1+1);

4.char 类型是否可以存放一个汉字?为什么?
可以,存放一个汉字,char类型 以 Unicode码存放数据
char c='喊';

5.用最有效的方式计算 2 乘以 8 的结果
2<<3  
2*8
你好吗? 
6.运算符的优先级:做选择题
a:() .  
b:前置 ++ --
c:* / %
d:+ -
e:比较运算符
f:逻辑运算符
g:赋值运算符
h:后置++ --
猜拳游戏---exe
1.条件分支
a)if语句
1)单一分支:在满足条件的情况下 多执行某些内容
if(条件){

}
常用于:满足条件 退出循环
2)二选一:常用于登录
if(条件){

}else{

}
3)多选一:根据身份跳转不同的页面
if(条件1){

}else if(条件2){

}else{

}

注意:if中的条件 范围 由小到大
int age=18;
if(age>80){

}else if(age>70){

}else if(age>60){

}
b)switch:就是简化 多重if的等值判断
其中 每一个 case 就相当于 一个 if 判断

switch(变量){
case 值1:

break;
case 值2:

break;
default:

}
注意: 
1)每一个case 后的值 必须不相同
2)每一个case 后 必须添加 break
如果没有添加break 从满足条件的 case 开始往后执行
直到遇到break为止
3)在每一个case中不能重复定义变量
尽量 把变量声明在switch的外面
4)case 的值 没有顺序
5)switch比较的值有严格的要求
i)如果jdk1.6及以前 只能是 byte short char int 类型
ii)如果是 1.7 以后 可以是 byte short char int String
不建议使用String


编码结束,运行的时候,必须保证每一个条件分支都你能测试


循环:
1.while
声明 循环变量=初始值;//决定while循环是否继续执行
while(循环条件){
//代码

必须修改循环变量的值;
}

int i=1;
while(i<=10){

i++;
}


int num=1234;
while(num>0){

num=num/10;
}
如何用while循环解决问题:
a)某些操作 需要重复执行
b)循环变量,用于判决是否循环的值
  循环的条件
  更循环变量的值


2.循环次数明确
输出1-100直接所有数字
int i=1;
while(i<=100){

i++;
}
3.循环次数不明确,
控制台输入n个数字 直到 用户输入0为止

while(true){
int n=input.nextInt();
if(n==0){
break;
}
}


ResultSet 结果集
while(rst.next()){

}
4.打印100--1000之间的所有水仙花数
while
int i=100;
while(i<1000){
int g=i%10;
int s=i/10%10;
int b=i/100;
if(i==g*g*g+s*s*s+b*b*b){
System.out.println(i);
}
i++;
}
5. 获取0-100之间 被5 整除的数字
int i=0;
while(i<=100){
System.out.println(i);
i+=5;
}
6.输出1--1000 之间能被6和7同时整除的数字一行显示 3 个
并显示所有数字的和
7.根据用户输入的年月日 获取是这一年的第几天  1900 10 21
1900
10 
21
年:1900
月:11
日:21

1.当前月份 前的每个月几天
int month=12;
int i=1;
int sum=0;//总天数
while(i<month){
int day=0;
switch(i){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
day=31;
break;
case 2:
if((y%4==0&&y%100!=0)||y%400==0){
day=29;
}else{
day=28;
}
break;
default:
day=30;
break;
}
sum+=day;
i++;
}
sum+=d;


思考:
假如 每个月都30天  7 21 
(7-1)*30+21
1)2月 28 29  -1 -2
2) 包含两个大月  +2 
(1-1)*30 +0
` (2-1)*30 +1
(3-1)*30 +1
(4-1)*30 +2
(5-1)*30 +2
(6-1)*30 +3
(7-1)*30 +3
(8-1)*30 +4   
(10-1)*30 +5
(12-1)*30 +6
month<=8  (month-1)*30+month/2;
(9-1)*30 +4 +1
(11-1)*30 +5 +1

2.for循环:
for(循环变量;条件;累加值){

}

int  i=1;
while(i<=100){
System.out.println(i);
i++;
}

for(int i=1;i<=100;i++){
System.out.println(i);
}
while:用在哪些循环次数不确定的情况
for:循环的次数明确 
遍历数组
集合
强调一下:for循环的三个部分执行的次数
for(a;b;c){
d;
}
循环两次执行的顺序
a--->b---->d--->c---->b--->d--->c--->b
a;
while(b){
d;
c;
}