目录
第一次作业
一、简答题
1.标识符的命名规则?
答:● 由26个英文字母大小写,0-9 ,_或 $ 组成 数字不可以开头。
● 不可以使用关键字和保留字,但能包含关键字和保留字。
● Java中严格区分大小写,长度无限制。
● 标识符不能包含空格。
● 注意:在起名字时,为了提高阅读性,要尽量有意义, “见名知意”
2.Java数据类型分几大类?,基本类型有哪些?
答:分为两大类(基本数据类型,引用数据类型)
基本数据类型分为 数值型 (整数类型:byte,short,int,long 浮点类型:float,double);字符型(char);布尔型(boolean)
3.基本数据类型转换规则是什么?
答:java中可以从任意基本类型转型到另外的基本类型 . 例外 : boolean 类型不可以转换为其他的数据类型。
默认转换 : 数值型,字符型,浮点型的数据在混合运算中相互转换,转换时遵循原则: 容量小的类型默认转换为容量大的数据类型;数据类型按容量大小排序为: byte,short,char-->int-->long-->float-->double byte,short,char之间不会互相转换,他们三者在计算时首先会转换为int类型
强制转换 :容量大的数据类型转换为容量小的数据类型时,要加上强制转换符,但可能造成精度降低或溢出;使用时要格外注意。
有多种类型的数据混合运算时,系统首先自动的将所有数据转换成容量最大的那一 种数据类型,然后再进行计算。
4.常用的运算符有哪几大类,分别是什么?
答:算数运算符(+,-, * ,/,%,++,--);字符串连接运算符( +);比较运算符(>,<,>=,<=,==,!=);逻辑运算符(! , &,| , &&,||)赋值运算符(= ,+ = ,- = , * = ,/ =);条件运算符,位运算符(<< ,>> ,>>> ,& ,| ,^ , ~)
5.“+” 运算符有哪几种用法,需要注意什么?
答:作为正号;作为加号;作为字符串连接,共计三种用法,需要仔细辨别使用的位置,位置不同意义不同,同时注意作为连接符时左右两边必须都是字符串。
6.“++”运算符在使用时需要注意什么?
答: ++在前,先运算后取值;++在后,先取值后运算
7.& 与 && 的区别?
答:&时,左边无论真假,右边都参与计算;&&时,如果左边为真,右边参与运算,但如果左边为假,右边无论长短都不参与运算。
二,看程序,写结果
-
int i = 1; i += ++i; i最终的值是多少
答: i=i+(++i) ---> i=2+2结果为4 X 改:i=i+(++i) --->i=1+2----->结果为3
-
int i = 1;
boolean b = !(i++ == 3) && (i++==3);
System.out.println(b);
System.out.println(i);
输出结果?
◯答:!(2==3)&&(2==3) --->true&&false---->结果为b=false √ i=2 X 改 !(1==3) && (2==3) ---->true&&false i=3 ( i++进行了两次)
-
int i = 1; int j = ++i + i++ + ++i + ++i + i++; 问 j最终的结果是多少?i最终的值多少?
答: int j = 2+2+4+5+5
= 18
int i = 6 √
-
int x = 4; int y =x++ + ++x + x*10;
y的值?
答: int y = 4+6+6*10
= 70 √
5.int a = 10, b = 10, c = 10; boolean result = a++ == 10 && b-- == 10 || ++c == 10; 结果? ◯ 答: result=false × result=true a=11 √ b=10 × 改9 true && true --->true||++c==10---->短路或中,左边为真,不进行右边运算 c=10 √ 10==10&&10==10|| 不运行 右边
6.运算符问题,下面代码分别输出什么? public static void main(String[] args) { int i1 = 10, i2 = 10; System.out.println("i1 + i2 = " + i1 + i2); System.out.println("i1 - i2 = " + i1 - i2); System.out.println("i1 * i2 = " + i1 * i2); System.out.println("i1 / i2 = " + i1 / i2); }
◯答: ()第二行语句报错
改:第一句+在这道题是起连接符作用,i1+i2=1010
第二句“i1-i2=”字符串--->+i1连接字符串---->但-i2只能表示减法运算,而字符串不能参与数值运算
第三句乘法运算先运算,所以是i1*i2=连接了一个10 *10 即 i1 * i2= 100
第四句除法运算先运行除法,所以是i1/i2=连接了一个10/10 即i1/i2=1
7.class Test{ public static void main (String [] args) { short a,b,C; a=1; b=2; C=a+b; //short+short----->int a += 2; } } 以上代码中,哪一句是错误的?
◯答: c=a+b short 类型在计算时首先会默认转换为int类型 ,但最开始c定义的是short类型 √
8. class Test4 { public static void main (String [] args) { boolean x=true; boolean y=false; short z=42; if((z++==42)&&(y=true)) z++; if((x=false)||(++z==45)) System.out.println(”z=”+z); } } 输出结果: z=
◯答: z=43 × 改 z=45 true &&y=true 此时y=true是把true赋值给了y,并不是y==true把y与true比较 注意看 仔细 所以true&&true---->执行z++ ---->再执行下一句false||45==45(为真)即false||true ----->结果为真,则 最终输出结果z=45
9. class TestApp{ public static void main (String[] args){ for (int i=0; i<10;i++){ if(i==3){ break; } System.out.print (i); } } } 输出结果:
答:i=3 × 改 012 当i==3时,执行break 停止,则不再执行下面的语句, 所以只输出三次
10. class Test{ public static void main (String[] args){ boolean state=false; int i=2; if((++i>2)&&(state=true)) i++; //4 if((++i>4)||(state=false)) i++; //6 System.out .println (i); } } 输出结果:
答: i=4 × 改 6 无论++i还是i++ 单独看i的话,值都是已经+1后的,但如果有其他变量 如b 接收值(被赋值)操作时,++在前,先运算再取值,(a=2 b=++a)此时b为3,a为3 ++在后,先取值再运算(a=2 b=a++)此时b为2,a为3
11. class WhileTests{ public static void main (String [] args) { int x=5; while(++x<4) { --x; } System.out.println( "x="+x); } } 输出结果: x=
答: x=6 √
※12.下面程序运行的结果正确的是: public class Demo{ public static void main (String args[]) { int num=0; for (int i=0;i<100;i++) { num=num++; } System.out.println("num="+num); } }
※答: num=1 × 改 num=0
13.编译运行以下程序后,输出结果是( ) public class Demo{ public static void main (String args[]) { int x=4; double r = ((x>4) ? 99.9:9); System.out.println(r); } }
答:9 × 改9.0 原本应该是9 但因为是double类型所以只能显示9.0
14.下面的程序编译运行的结果是: public class Demo{ public static void main (String args[]) { int c; System. out. println(c); //局部变量未初始化,所以报错,只有成员变量会默认初始化 System. out. println(c++); System. out. println(c); } }
答: 011 × 局部变量未初始化,所以报错
15.下面程序运行的结果正确的是: public class Demo{ public static void main (String args[]) { int n = 100; int m = 20; if (m++ <= 20 || n == n++) System.out.println(n); System.out.println(m); } }
答: m=21 n=101 × 改 100 21 m++先取值,再自增,true在||左边,所以右边语句不执行
16.给定如下java代码,编译运行之后结果是: class Demo{ public static void main(String args[]) { for (int i=0;i<3; i++) { System.out.print(i); } System. out. print (i); } }
答:0 1 2 3 × 编码错误 i 是局部变量,在for循环中定义和作用,作用域受限 所以第二个system取不到i的值
三、编程.编程题
1.判断某一年是否为闰年
通过Scanner 输入一个年份,然后判断概念是否是闰年 闰年判断标准(满足任何一个) 1.如果能够被4整除&&但是不能被100整除
-
能够被400整除
// 判断某一年是否为闰年 // 通过Scanner 输入一个年份,然后判断概念是否是闰年 // 闰年判断标准(满足任何一个) // 1.如果能够被4整除&&但是不能被100整除 // 2.能够被400整除 import java.util.Scanner; public class Text01 { public static void main(String[] args) { System.out.println("请输入年份"); Scanner mysacnner = new Scanner(System.in); int year = mysacnner.nextInt(); if(year>0){ if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) { System.out.println(year + "是闰年"); } else { System.out.println(year + "不是闰年"); } } else System.out.println("输入的年份有误"); } }
2.根据指定月份,打印该月份所属的季节,3,4,5春季 678夏季 9 10 11秋季 12 ,1,2 冬季
答案:见下面switch语句的穿透例题
3.我家的狗5岁了,5岁的狗相当于人的多大呢?,其实狗的前两年,每一年相当于人的10.5岁,之后每增加一岁就增加4岁,那么5岁的狗相当于人的年龄就应该是10.5+10.5+4+4+4=33岁.
编写程序获取用户输入狗的年龄(整数),通过程序输出显示相当于人的年龄.如果为负数请提示.
//我家的狗5岁了,5岁的狗相当于人的多大呢?,其实狗的前两年,每一年相当于人的10.5岁,之后每增加一岁就增加4岁,
// 那么5岁的狗相当于人的年龄就应该是10.5+10.5+4+4+4=33岁.
// 编写程序获取用户输入狗的年龄(整数),通过程序输出显示相当于人的年龄.如果为负数请提示.
import java.util.Scanner;
public class Text03 {
public static void main(String[] args) {
System.out.println("请输入狗的年龄");
Scanner MyScanner = new Scanner(System.in);
int DogAge = MyScanner.nextInt();
double PersonAge = 0;
if (0<DogAge &&DogAge <= 2) {
PersonAge = DogAge*10.5;
System.out.println("相当于人的年龄"+PersonAge);
}else if (DogAge>2){
PersonAge = 10.5*2+(DogAge-2)*10.5;
System.out.println("相当于人的年龄"+PersonAge);
}else
System.out.println("输入有误");
}
}
4.一直青蛙在一口11米深的井底向上爬,白天向上爬3米,晚上向下滑2米,总共需要几天可以爬出.
写程序实现.
//一直青蛙在一口11米深的井底向上爬,白天向上爬3米,晚上向下滑2米,总共需要几天可以爬出.
//需定义井深Jheiget=11;爬行高度sum;爬行天数day;
//day++;白天sum+=3;晚上sum-=2;if (sum >= 11)则结束程序
//未涉及变量需要自增更新i++之类的,不考虑for循环,所以可以考虑while与if判断语句
public class Text04 {
public static void main(String[] args) {
int day = 0;
int Jheight = 11;
int sum = 0;
while(true){
day++;
sum+=3;
if (sum >=Jheight ){
break;
}else{
sum-=2;
}
}
System.out.println("总共需要"+day+"天");
}
}
5.输出100以内最大的5个奇数
//输出100以内最大的5个奇数
//要求最大的奇数,所以从后往前,
// 奇数的实现可以通过给100+1后,倒着连续-2,
// 5个奇数所以减五次
public class Text05 {
public static void main(String[] args){
int sum = 100+1;
for (int i = 1;i<=5;i++){
sum-=2;
System.out.print(sum +" ");
}
}
}
6.有1、2、3、4四个数字,能组成多少个互不相同且一个数字中无重复数字的三位数?
//有1、2、3、4四个数字,能组成多少个互不相同且一个数字中无重复数字的三位数?
//123 124 132 134 142 143
//213 214 231 234 241 243
//312 314 321 324 341 342
//412 413 421 423 431 432
//题目要求三位数,个位,十位,百位,所以可以使用三个for循环嵌套
//有 1 2 3 4 这四个数字构成,那么循环的内容就是1 2 3 4
//每一位互不相同,所以用if来确保
public class Text06 {
public static void main(String[] args){
//符合条件的三位数计数器累加
int count = 0;
//百位数,由1~4构成
for (int i = 1;i <= 4 ;i++){
//十位数,由1~4构成
for (int j = 1;j <= 4;j++){
//个位数,由1~4构成
for (int k = 1;k <= 4;k++){
//每一位互不相同,if来确保
if (i != j && j != k && i != k){
System.out.print(" "+i+j+k+" ");
count++;
}
}
}
}
System.out.println("共计"+count+"个不同的三位数");
}
}
7.编程一个程序,计算今天是今年的第几天.
例如: 输入年 2022 输入月 8 输入天 16,输出228天
//自己第一次写的方法,非常啰嗦,
//7.编程一个程序,计算今天是今年的第几天.
// 例如: 输入年 2022 输入月 8 输入天 16 结果是227天
//思路分析:先输入年份判断是否是闰年,因为闰年2月有29天
//四年一闰,百年不闰,四百年再闰
//输入月份,1 3 5 7 8 10 12 都有31天 4 6 9 11 有30天 平年2月28天 闰年2月29天
import java.util.Scanner;
public class Text07 {
public static void main(String[] args){
int year = 0;
int month = 0;
int day = 0;
int sum = 0;
Scanner MyScanner01 = new Scanner(System.in);
System.out.println("请输入年份");
year = MyScanner01.nextInt();
if (year > 0){
Scanner MyScanner02 = new Scanner(System.in);
System.out.println("请输入月份");
month = MyScanner02.nextInt();
if (month > 0 && month <= 12){
Scanner MyScanner03 = new Scanner(System.in);
System.out.println("请输入天");
day = MyScanner03.nextInt();
if (day > 0 && day <= 31){
if ((year % 4 == 0 && year % 100 != 0) ||( year % 400 == 0)){
switch (month){
case 1 :sum=(day);
break;
case 2 :sum=(31+day);
break;
case 3 :sum=(31+29+day);
break;
case 4 :sum=(31*2+29+day);
break;
case 5 :sum=(31*2+29+30+day);
break;
case 6 :sum=(31*3+29+30+day);
break;
case 7 :sum=(31*3+29+30*2+day);
break;
case 8 :sum=(31*4+29+30*2+day);
break;
case 9 :sum=(31*5+29+30*2+day);
break;
case 10 :sum=(31*5+29+30*3+day);
break;
case 11 :sum=(31*6+29+30*3+day);
break;
case 12 :sum=(31*6+29+30*4+day);
break;
}
}else{
switch (month){
case 1 :sum=(day);
break;
case 2 :sum=(31+day);
break;
case 3 :sum=(31+28+day);
break;
case 4 :sum=(31*2+28+day);
break;
case 5 :sum=(31*2+28+30+day);
break;
case 6 :sum=(31*3+28+30+day);
break;
case 7 :sum=(31*3+28+30*2+day);
break;
case 8 :sum=(31*4+28+30*2+day);
break;
case 9 :sum=(31*5+28+30*2+day);
break;
case 10 :sum=(31*5+28+30*3+day);
break;
case 11 :sum=(31*6+28+30*3+day);
break;
case 12 :sum=(31*6+28+30*4+day);
break;
}
}
System.out.println("今天是今年的第"+sum+"天");
}else{System.out.println("天数输入必须在0~31之间");}
}else{System.out.println("月份输入必须在1~12之间");}
}else{ System.out.println("年份输入必须大于0"); }
}
}
//乐扣上的类似题
//数组+for循环+if语句
import java.util.Scanner;
class Solution2 {
public static void main(String[] args) {
int ans = 0;
Scanner MyScanner01 = new Scanner(System.in);
System.out.println("请输入年份");
int year = MyScanner01.nextInt();
System.out.println("请输入月份");
int month = MyScanner01.nextInt();
System.out.println("请输入天");
int day = MyScanner01.nextInt();
int[] amount = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
++amount[1];
}
for (int i = 0; i <month - 1; i++) {
ans += amount[i];
}
int end = ans + day;
System.out.println("今天是今年的第"+end+"天");
}
}
8.猴子吃桃问题。猴子第一天摘下若干个桃子,当时就吃了一半,还不过瘾,就又吃了一个。第二天又将剩下的桃子吃掉一半,又多吃了一个。以后每天都吃 前一天剩下的一半零一个。到第 10 天在想吃的时候就剩一个桃子了,求第一天共 摘下来多少个桃子?
public class Text08{
public static void main(String[] args){
int num = 1;
int day = 10;
System.out.println("第" + day + "天有桃子:" + num);
for (day = 9; day >= 1; day--) {
num = 2 * (num + 1);
System.out.println("第" + day + "天有桃子:" + num);
}
System.out.println("猴子在第1天摘了" + num + "个桃子");
}
}