Homework20191105

代码分析:

第一个:分析如下代码,判断哪行报错,并说出报错原因

class Demo{

final int a = 10;

}

 

class Test{

public static void main(String[] args) {

Demo d = new Demo();

d = new Demo();

d.a = 20;//无法为最终变量a分配值

}

}

第二个:分析如下代码,判断哪行报错,并说出报错原因

class Demo{

int a = 10;

}

 

class Test{

public static void main(String[] args) {

final Demo d = new Demo();

d = new Demo();//无法为最终变量d分配值

d.a = 20;

}

}

第三个:分析如下代码,判断哪行报错,并说出报错原因

class Demo{

final int a = 10;

}

 

class Test{

public static void main(String[] args) {

final Demo d = new Demo();

d = new Demo();//无法为最终变量d分配值

d.a = 20;//无法为最终变量a分配值

}

}

第四个:分析如下代码,判断哪行报错,并说出报错原因

class Demo{

int a = 10;

}

 

class Test{

public static void main(String[] args) {

Demo d = new Demo();

d = new Demo();

d.a = 20;

}

}

没错误啊,感觉没啥毛病啊

第五个:分析如下代码,判断哪行报错,并说出报错原因

class Demo{

final int a;//常量不属于任何一个对象,可以调用,但不能被赋值.并且常量在定义的时候就要赋值

}

 

class Test{

public static void main(String[] args) {

Demo d = new Demo();

d = new Demo();

d.a = 20;//无法为最终变量a分配值

}

}

--------------------------------------------------------------------

1、设计:

* 动物类:姓名,年龄,吃饭,睡觉。

* 猫类(捉老鼠)和狗类(看家)

* 动物培训接口:跳高

* 会跳高的猫

/*

设计:

* 动物类:姓名,年龄,吃饭,睡觉。

* 猫类(捉老鼠)和狗类(看家)

* 动物培训接口:跳高

* 会跳高的猫

*/

class Demo03

{

public static void main(String[] args)

{

//猫类测试

Cat cat = new Cat();

cat.sleep();

    cat.highJump();

cat.catchMouse();

System.out.println("*********************************");

//狗类测试

Dog dog = new Dog();

dog.eat();

dog.lookHome();

}

}

 

 

//动物类

class Animal

{

String name;

int age;

public void eat()

{

System.out.println("我是一只小动物,我要吃饭饭");

}

public void sleep()

{

System.out.println("我是一只小动物,我要睡觉觉");

}

}

 

 

//猫类

class Cat extends Animal implements Train

{

public void catchMouse()

{

System.out.println("我是一只小猫猫,我要捉老鼠");

}

public void highJump()

{

System.out.println("我是一只小猫猫,我会跳高哦");

System.out.println("不要问我为什么那么优秀,因为我偷偷上了补习班");

}

}

 

 

//狗类

class Dog extends Animal

{

public void lookHome()

{

System.out.println("我是一只小狗狗,我要看家");

}

}

 

//培训接口

interface Train

{

public abstract void highJump();

}

2、/*现有两种  

OldPhone NewPhone; 两个类都有call()  sendMessage() 方法(考虑向上抽取一个父类);

已知接口IPlay中有一个方法 playGame(),NewPhone添加玩游戏的功能;

要求: 分别测试OldPhone和NewPhone的两个方法,再测试新手机palyGame()的方法.

*/

class Demo04

{

public static void main(String[] args)

{

//测试旧手机类

OldPhone op = new OldPhone();

op.call();

op.sendMessage();

System.out.println("*************************");

 

//测试新手机类

NewPhone np = new NewPhone();

np.call();

np.sendMessage();

np.playGame();

}

}

 

//手机类

class Phone

{

public void call()

{

System.out.println("我是一个手机,我可以打电话");

}

public void sendMessage()

{

System.out.println("我是一个手机,我可以发短信");

}

}

 

 

//旧手机类

class OldPhone extends Phone

{

 

}

 

 

//新手机类

class NewPhone extends Phone implements IPlay

{

 

public void playGame()

{

System.out.println("我可以玩游戏咯");

}

}

 

 

//接口IPlay

interface IPlay

{

public abstract void playGame();

}

 

-------------------------------------------------------------------------

1、/*分析以下需求,并用代码实现:

(1)定义数字字符串数组{"010","3223","666","7890987","123123"}

(2)判断该数字字符串数组中的数字字符串是否是对称(第一个数字和最后一个数字相等,第二个数字和倒数第二个数字是相等的,依次类推)的,并逐个输出

(3)如:010 是对称的,3223 是对称的,123123 不是对称的

(4)最终打印该数组中对称字符串的个数

 

提示:循环获取字符串的每一个字符,依次比较第一个和最后一个,第二个和倒数第二个。。。

*/

class Demo05

{

public static void main(String[] args)

{

String[] str = {"010","3223","666","7890987","123123"};

int count = 0;

for (int n = 0; n < str.length; n++)

{

char[] ch = str[n].toCharArray();//将每一个字符串转为字符数组ch

int n1,n2;

for (n1 = 0,n2 = ch.length-1; n1 < n2 ; n1++,n2--)

{

if (ch[n1] != ch[n2])

{

break;

}

}

if (n1 >= n2)//010这种是刚好=,3223这种是>

{

count++;

System.out.println("第" + count + "个对称字符串为:" + str[n]);

}

}

System.out.println("一共有" + count + "个对称字符串");

}

}

 

2./*分析以下需求,并用代码实现:

(1)从键盘循环录入录入一个字符串,输入"end"表示结束

(2)将字符串中大写字母变成小写字母,小写字母变成大写字母,其它字符用"*"代替,并统计字母的个数

举例:

键盘录入:Hello12345World

输出结果:hELLO*****wORLD

  总共10个字母

*/

import java.util.Scanner;

class Demo06

{

public static void main(String[] args)

{

Scanner sc = new Scanner(System.in);

while (true)

{

System.out.println("请录入一个字符串(录入end结束程序):");

String str = sc.nextLine();

if (str.equals("end"))

{

break;

}

int count = 0;

char[] chs = str.toCharArray();

for (int n = 0; n < chs.length; n++)

{

char ch = chs[n];

if (ch >= 'A' && ch <= 'Z')

{

count++;

ch = (char)(ch + 32);

}

else if (ch >= 'a' && ch <= 'z')

{

count++;

ch = (char)(ch - 32);

}

else

{

ch = '*';

}

 

System.out.print(ch);

}

System.out.println();

System.out.println("总共" + count + "个字母");

}

}

}

3、/*

键盘录入一个字符串,

统计该字符串中的大写字母、小写字母、数字字符和其他字符分别有多少个

例如,键盘录入abcABCD12345!@#$%&,

输出结果为:小写字母有3个,大写字母有4个,数字字符有5个,其他字符有6个。

*/

import java.util.Scanner;

class Demo07

{

public static void main(String[] args)

{

Scanner sc = new Scanner(System.in);

System.out.println("请输入一个字符串:");

String str = sc.nextLine();

char[] chs = str.toCharArray();

int upperCaseCount = 0;//大写字母

int lowerCaseCount = 0;//小写字母

int digitCount = 0;//数字

int otherCount = 0;//其他字符

for (int n = 0; n < chs.length; n++)

{

char ch = chs[n];

if (ch >= 'A' && ch <= 'Z')

{

upperCaseCount++;

}

else if (ch >= 'a' && ch <= 'z')

{

lowerCaseCount++;

}

else if (ch >= '0' && ch <= '9')

{

digitCount++;

}

else

{

otherCount++;

}

}

System.out.println("小写字母有" + lowerCaseCount + "个,大写字母有" + upperCaseCount + "个,数字字符有" + digitCount + "个,其他字符有" + otherCount + "个。");

}

}

4、/*

定义一个方法,功能如下:给定一个数组,转换成一个字符串

例如:数组为int[] arr = {1, 2, 3},字符串为[1, 2, 3]

*/

class Demo08

{

public static void main(String[] args)

{

int[] arr = {1, 2, 3};

String str = toString(arr);

System.out.println(str);

 

}

public static String toString(int[] arr)

{

String str = "[";

for (int n = 0; n < arr.length; n++)

{

if (n == arr.length-1)

{

str += arr[n] + "]";

break;

}

str += arr[n] + ", ";

}

return str;

}

}

5、/*定义一个方法,功能如下:给定一个字符串,返回该字符串的反转形式

例如:字符串为abcdef,返回结果为fedcba

*/

class Demo09

{

public static void main(String[] args)

{

String str = "abcdef";

System.out.println(reverseStr(str));

}

public static String reverseStr(String s1)

{

char[] chs = s1.toCharArray();

String s2 = "";

for (int n1 = 0,n2 = chs.length-1; n1 < n2; n1++,n2--)

{

char temp = chs[n1];

chs[n1] = chs[n2];

chs[n2] = temp;

}

for (int n = 0; n < chs.length; n++)

{

s2 += chs[n];

}

return s2;

}

}

-----------------------------------------------------------------------

3、/*定义两个类Dog,SmallDog,SmallDog继承Dog

  说明一:关于Dog

  两个属性,狗的名字(dogName,String),狗的年龄(dogAge,int)

  一个方法,dogWalk(),打印一句话简单描述狗走路的样子

  一个构造方法,无参数,在此构造方法中初始化dogName,dogAge

  说明二:关于SmallDog

  继承Dog,不添加任何属性和方法

  最后,在测试类中的main方法中生成SmallDog类的对象,

  访问属性dogName和dogAge,并打印出他们的值;调用dogWalk(),看看效果

*/

class Demo10

{

public static void main(String[] args)

{

SmallDog sd = new SmallDog();

System.out.println("dogName:" + sd.dogName);

System.out.println("dogAge:" + sd.dogAge);

sd.dogWalk();

}

}

 

//狗类

class Dog

{

String dogName;

int dogAge;

public void dogWalk()

{

System.out.println("大家好,我是一只狗狗,我正迈着六亲不认的步伐散着步");

}

public Dog()

{

dogName = "GouPengZi";

dogAge = 3;

}

}

 

 

//小狗类

class SmallDog extends Dog

{

 

}

 

4、/*在第1题的基础做修改

  说明:关于SmallDog

  添加两个set方法分别能够设置属性dogName和dogAge的值,

  在测试类中的main方法中调用这两个方法为属性设置值,

  再次访问这两个属性并打印看看和第二题的打印输出是否相同

  重写dogWalk(),打印一句话具体描述小狗走路的样子,

  在测试类main方法中调用dogWalk(),看看和第二题中的调用效果是否有变化

*/

class Demo11

{

public static void main(String[] args)

{

SmallDog sd = new SmallDog();

System.out.println("dogName:" + sd.dogName);

System.out.println("dogAge:" + sd.dogAge);

sd.dogWalk();

System.out.println("**************************");

sd.setDogName("XiongLuoLuo");

sd.setDogAge(5);

System.out.println("dogName:" + sd.dogName);

System.out.println("dogAge:" + sd.dogAge);

sd.dogWalk();

}

}

 

//狗类

class Dog

{

String dogName;

int dogAge;

public void dogWalk()

{

System.out.println("大家好,我是一只狗狗,我正迈着六亲不认的步伐散着步");

}

public Dog()

{

dogName = "GouPengZi";

dogAge = 3;

}

}

 

 

//小狗类

class SmallDog extends Dog

{

public void setDogName(String dogName)

{

this.dogName = dogName;

}

public void setDogAge(int dogAge)

{

this.dogAge = dogAge;

}

public void dogWalk()

{

System.out.println("大家好,我是一只小毛狗,我又萌又可爱");

}

}

5、/*定义一个运输类(Transport)和它的两个子类;

汽车类(Vehicle)和飞机类(Airplane)

  说明一:关于Transport

  两个属性,速度(speed,int)载重量(load,float)

  两个get方法,能够取得两个属性的值

  一个构造方法,能够初始化这两个属性

  一个show()方法,调用俩个get方法,取得两个属性的值并打印

 

  说明二:关于Vehicle(交通工具)

  继承Transport

  添加两个属性,车轮数(wheels,int),车重量(weight,float)

  添加两个get方法,能够取得两个新添加属性的值

  一个构造方法,调用父类的构造方法,并且能够初始化新添加的两个属性

  一个show()方法,

  调用父类的show()方法打印speed和load两个属性,

  调用新添加的两个get方法取得wheels和weight属性的值并打印

 

  说明三:关于Airplane

  和说明二的要求一致,只要求新添加的两个属性

  为发动机类型(enginertype,String)发动机数量(enginers,int)

  最后,在测试类main方法中生成汽车类和飞机类的对象

*/

class Demo12

{

public static void main(String[] args)

{

//交通工具测试类

Vehicle v = new Vehicle();

v.show();

System.out.println("************************");

//飞机测试类

Airplane a = new Airplane();

a.show();

}

}

 

//运输类

class Transport

{

int speed;

float load;

public Transport()

{

speed = 30;

load = 50.2f;

}

public void show()

{

System.out.println("速度为:" + getSpeed());

System.out.println("载重为:" + getLoad());

}

public int getSpeed()

{

return speed;

}

public float getLoad()

{

return load;

}

 

}

 

 

 

//交通工具类

class Vehicle extends Transport

{

int wheels;

float weight;

public Vehicle()

{

super();

wheels = 8;

weight = 45;

}

public int getWheels()

{

return wheels;

}

public float getWeight()

{

return weight;

}

public void show()

{

super.show();

System.out.println("车轮数为:" + getWheels());

System.out.println("车重量为:" + getWeight());

}

}

 

 

  //飞机类

  class Airplane extends Transport

  {

  String enginertype;

  int enginers;

  public Airplane()

  {

super();

enginertype = "wakaka";

enginers = 22;

  }

  public String getEnginertype()

  {

return enginertype;

  }

  public int getEnginers()

  {

return enginers;

  }

  public void show()

  {

super.show();

System.out.println("发动机类型为:" + getEnginertype());

System.out.println("发动机数量为:" + getEnginers());

  }

  }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值