学习心得
一、专业课
1、类结构
1) 类 = 成员变量+方法 (属性和行为 (方法/函数))
1、 访问修饰符:方法允许被访问的权限范围, 可以是 public、protected、private 甚至可以省略 ,其中 public 表示该方法可以被其他任何代码调用
2、 返回值类型:方法返回值的类型,如果方法不返回任何值,则返回值类型 指定为 void ;如果方法具有返回值,则需要指定返回值的类型,并且在方法体中使 用 return 语句返回值
3、 方法名:定义的方法的名字,必须使用合法的标识符
4、 参数列表:传递给方法的参数列表,参数可以有多个,多个参数间以逗号隔开, 每个参数由参数类型和参数名组成,以空格隔开。
2) 变量,按位置划分
成员变量
局部变量
int a; //成员变量,有默认值,可以直接调用
publicstatic void main(String[] args) {
intb; //局部变量,需要赋值才可以使用,不然系统不知道这是什么值
doubled = 8.0; //实际参数 实参
fun(d);
}
//形式参数,新参
publicstatic double fun(double d) {
returnd;
}
3) 方法重载
1.同一个类中,方法名相同(返回类型一致)
2.参数不同,顺序不同,数量不同
4) 递归,方法本身调用方法本身
1.避免死循环,提供出口
//求一个数的阶乘
publicstatic int fun(int n) {
//递归出口
if(1 == n) {
return1;
}
returnn*fun(n-1);
}
5) 类的创建
构造方法
1.与类名一致,没有返回值,也没有void
6)注意 需要传多个参数时,可以用可变参数fun(int... is)(多个参数时,可变 参数一定放在最后)
2、算法题
1)//欧几里德 求最大公约数 :较小的数与两个数的余数的公约数
public static int getMeasure(inta,int b) {
//保证a小
if(a>b) {
a= a^b;
b= a^b;
a= a^b;
}
if(b%a == 0) {
returna;
}else{
returngetMeasure(a, b%a);
}
}
2)围圈报数
/* 功能说明:1、有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退 出圈子,
*问最后留下的是原来第几号的那位。*/
publicstatic void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入总人数:");
int p = input.nextInt();
/****初始化人员 ***/
boolean[] per = new boolean[p];// boolean数组表示站成一圈的人,false表示退出
for(int i = 0; i < per.length; i++) {
per[i]= true;
}
/**** 报号 ***/
intt = 0, len = per.length;
while(len > 1) {
for(int i = 0; i < per.length; i++) {
if (per[i]) {
t++;
if(t == 3) {
t= 0;
per[i]= false;
len--;
}
}
}
}
二、小组PK
1、我方题目
1、台阶问题。 楼梯有N阶,上楼可以一步上一价,也可以一次上二阶。编一个程序, 计算共有多少种不同的走法。
(递归方法)
publicclass Test {
publicstatic void main(String[] args) {
intn = 40;
System.out.println(T(n));
}
publicstatic int T(int n) {
if(n < 1) {
System.out.println("无效参数");
return-1;
}
elseif (n == 1)
return1;
elseif (n == 2)
return____________________;
else
return____________________;
}
}
答案:
2
T(n-1)+T(n-2)
2、 趣味问题——猴子吃桃。海滩上有一堆桃子,五只猴子来分。第一只猴子把这 堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二 只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿 走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
代码:
classProgram
{
public static void Main(string[] args)
{
System.out.println(PeachNumber(5));
}
public static int PeachNumber(int n)
{
if (n == 1)
{
return ______________________;
}
else
{
return _______________________;
}
}
答案
6
PeachNumber(n-1)*5+1
3.程序运行结果是:(请注意输出格式)
publicclass Test {
publicstatic void main(String[] args) {
inti = 6;
intd = 8;
getSum(i,d);
}
publicstatic void getSum(int i, double d) {
System.out.println(i+++ ":" + d);
}
publicstatic void getSum(int d, int i) {
System.out.println(i+++ ":" + d);
}
publicstatic void getSum(int... is) {
for(int i : is) {
System.out.println(i);
}
}
}
答案:
8:6
编程实现汉诺塔问题:(程序补全)
大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞 着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一 根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个 圆盘
publicclass Ham {
publicstatic void move(int num,char p1,char p2,char p3){
if(num== 1){
System.out.println("盘子从"+p1+"移到"+p3);
}else{
________________________;
________________________;
________________________;
}
}
publicstatic void main(String[] args) {
move(64,'a','b','c');
}
}
答案
move(num-1,p1,p3,p2);
System.out.println("盘子从"+p1+"移到"+p3);
move(num-1,p2,p1,p3);
5.程序运行结果是:
publicclass Class04 {
publicstatic void main(String[] args) {
intx = 2;
inty = 4;
Zz = new Z();
z.f(x,y);
System.out.println("x:"+x+"____y:"+y);
}
}
classZ{
publicvoid f(int x, int y) {
x= x + 1;
y= y + 1;
System.out.println("x:"+x+"____y:"+y);
}
}
答案
35
24
2、对方题目
class Problem{
publicstatic void main(String[] args) {
Problemp = new Problem();
inta = 3;
byteb = 5;
b+= 2;
p.fun(b,a);
}
publicvoid fun(int a ,int b ){
System.out.println("1");
}
publicvoid fun(int a,byte b){
System.out.println("2");
}
publicvoid fun(byte b,int a){
System.out.println("3");
}
publicvoid fun(int b,int a){
System.out.println("4");
}
}
以上程序 编译能否通过?
若能 写出结果;
若不能 说出原因
不能 方法重载中 参数列表不同:1 参数个数
2参数类型
3参数顺序 在参数个数相同时 这个顺序是指不同类型参数的顺序 类型相同 编译不能够通过
2
publicstatic void test(){
bytec = 1;
inta = b = 2;
b= c;
if(a>b){
a= a^b;
b= a^b;
a= a^b;
}
System.out.println("a="+a+"b="+b);
}
publicstatic void main(String[] args) {
test();
}
以上程序 编译能否通过?
若能 写出结果;
若不能 说出原因
不能,因为b并没有被声明,所以无法被赋值,编译不通过。
3
publicclass Demo3 {
publicstatic void main(String[] args) {
inti=0;
for(fun('A');fun('B')&&i<2;fun('C')){
i++;
fun('D');
}
}
publicstatic boolean fun(char c){
System.out.print(c);
returntrue;
}
}
以上程序 编译能否通过?
若能 写出结果;
若不能 说出原因
ABDCBDCB
4
递归算法实现:字符串反转;
publicString reserve(String s ){
if(s.length()<=1)
return s;
return reserve(s.substring(1))+s.charAt(0);
}
5
publicclass Test {
staticint data;
publicint method(){
returndata++;
}
publicstatic void main(String[] args) {
Testt1 = new Test();
Testt2 = new Test();
Testt3 = new Test();
t1.method();
t2.method();
data= t3.method();
System.out.println(data);
}
}
2
学习心得:
1.做题前得定好规则,规则是判断题目对错的一部分,必不可少
品读
2017年3月14日