天耀18期 – 07.面向对象-继承、访问权限【作业】

1. 写一个类Param,声明四个成员变量a、b、c、d,分别赋予四种访问权限。

(1)试验在同一个包中的另一个类里能访问哪几个变量?

(2)试验在不同包中的另一个类里能访问哪几个变量?

(3)试验在不同包中、用Param派生一个子类,看子类能访问哪几个变量?

 package FirstBag;

public class Param {

public int a=1;

protected int b=2;

 int c=3;

 private int d=4;

 void test () {

System.out.println("输出a的值"+a);

System.out.println("输出b的值"+b);

System.out.println("输出c的值"+c);

System.out.println("输出d的值"+d);

 }

}

package FirstBag; //在同一个 包中的一个类

public class Main {

 public static void main(String[] args) {

Param pr=new Param();

System.out.println("输出a的值"+pr.a);

System.out.println("输出b的值"+pr.b);

 System.out.println("输出c的值"+pr.c);

 System.out.println("输出d的值"+pr.d);

//private 不能在同一个包中不同文件中使用

}

 }

package FirstBag1;

/** * 不同包中的一个子类 * @author LENOVO * */

import FirstBag.Param;

public class ParamSon extends Param {

void test () {System.out.println("输出a的值"+a);

//在不同包中的子类中,public 可以使用 System.out.println("输出b的值"+b);

//在不同包中的子类中,protected 可以使用 System.out.println("输出c的值"+c);

//在不同包中的子类中,友好型不 可以使用 System.out.println("输出d的值"+d);

//在不同包中的子类中,private不 可以使用

 }

 }

ackage FirstBag1; import FirstBag.Param;

 //在不同包中的一个类

 public class Main {

public static void main(String[] args) {

Param pr1=new Param();

System.out.println("输出a的值"+pr1.a);

//在不同包中一个普通类,public 可以使用

System.out.println("输出b的值"+pr1.b); //在不同包中一个普通类,protected 不可以使用 System.out.println("输出c的值"+pr1.c);// 在不同包中一个普通类,友好型 不可以使用 System.out.println("输出d的值"+pr1.d);//在不同包中一个普通类,private不 可以使用

 }

}

2. 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8 ... 求出这个数列的前20项之和。

package FirstBag; //类方法 求有一分数序列:2/1,3/2,5/3,8/5,13/8 ... 求出这个数列的前20项之和。 public class Add {

int i;

float sum=0;

void add () {

int mem=2,dmin=1;

 for (i=1;i<=20;i++) {

sum+=mem/dmin*1.0;

mem+=dmin; dmin=mem;

}

System.out.println("前二十项的结果是:"+sum);

}

 }

 package FirstBag; //调用类方法 使用主方法得出结果

public class Main1 {

public static void main(String[] args) {

Add ad=new Add(); ad.add();

}

 }

3. 写一个工具类,提示用户,1为普通话,2 for English ,判断用户输入的数据,根据输入的数据做出对应的响应。用户输入1,则提示,您好,欢迎使用本系统;如果输入2,则提示,Hello, welcome to use this system。 package FirstBag2;

 //类方法 进入系统时提示选则语言

public class Remind {

 //提示1和2所代表的语言

void remind() {

System.out.println("如果您输入1,则为普通话,if you enter 2, for English ");

 }

 // 1和2 所选择的语言

void remind1(int a) {if (a==1) {System.out.println("您好,欢迎使用本系统");

}

else if (a==2) {

System.out.println("Hello, welcome to use this system ");

}

else {System.out.println("您输入的数据有错误");

}

}

}

//主方法

package FirstBag2;

 import java.util.Scanner;

public class Main {

public static void main(String[] args) {

Remind rm=new Remind(); rm.remind();

// 让用户输入数字 Scanner scanner=new Scanner(System.in);

System.out.println("请输入1或者2");

int s=scanner.nextInt(); rm.remind1(s);

 }

}

4. 写一个工具类,打包到tools里,计算如下题目,两列火车相向而行,问:多长时间后两车相遇。用户输入已知信息:第一列车速度(千米/小时),第二列车速度(千米/小时),两车距离(千米)。在另一个类里调用该类,测试是否正确。

 package tools;

 /** * 类方法 */

import java.util.Scanner;

 public class TrainMeetUseTime1 {

void enterNum() {

Scanner scanner=new Scanner(System.in );

System.out.println("请输入第一列车速度(千米/小时)");

float v1=scanner.nextFloat();

System.out.println("请输入第二列车速度(千米/小时)");

 float v2=scanner.nextFloat();

 System.out.println("请输入两车之间的距离(千米)");

float s=scanner.nextFloat();

 float time=s/(v1+v2);

 System.out.println("两辆火车相遇所用的时间是:"+time);

 }

}

package tools;

//主方法

public class Main {

public static void main(String[] args ) {

TrainMeetUseTime1 tmut=new TrainMeetUseTime1();

tmut.enterNum();

}

}

5. 写一工具类,判断输入的字符(char)是否为数字(使用ASCII码判断)类型,在另一个类里引入该类,然后调用工具类判断。要求打包到tools里。

 package tools;

import java.util.Scanner;

public class JudgeNumber {

void judgeNumber() {

Scanner scanner=new Scanner(System.in);

 System.out.println("请输入一个数据");

 char s=scanner.next().charAt(0);

 if (s>=47&&s<=58) {

System.out.println("您输入的是一个数字");

} else {System.out.println("您输入的不是一个数字");

}

}

}

package tools;

public class Main1 {

 public static void main(String[] args) {

JudgeNumber jn=new JudgeNumber();

jn.judgeNumber();

 }

}

6. 题目:打印杨辉三角

1

1    1  

1    2    1

1    3    3    1

1    4    6    4    1

1    5   10   10    5    1

 

6. 

 package tools;

import java.util.Scanner;

public class Main2 {

 public static void main(String[] args) {

printYFTriangle();

}

 public static void printYFTriangle(){

 System.out.println("how many lines you want:");

Scanner in = new Scanner(System.in);

 int lines = in.nextInt();

int[] a = new int[lines + 1];

int previous = 1;

for (int i = 1; i <= lines; i ++){

 for (int j = 1; j <= i; j++)

{

 int current = a[j];

 a[j] = previous + current;

previous = current;

System.out.print(a[j] + " ");

 }

System.out.println();

 }

}

}

 

 

 

 

7. 题目

吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘得到,而这对数字的位数是原数字的一半位数,并且由组成原数字的各个位数组成,以两个0结尾的数字不是吸血鬼数字。

例如:1260 = 21 * 60    1827 = 21 * 87    2187= 27 * 81  求所有四位吸血鬼数字

import java.util.Arrays;

/**
* 吸血鬼数字,高效率版本. 一个4位数字,可以拆分2个2位数数字的乘积,顺序不限。 比如 1395 =15 * 93

*/
public class VampireNumber {
public static void main(String[] arg) {
String[] str1, str2;
int sum = 0;
int from;
int to;
int val;
int count = 0;
// 双重循环穷举
for (int i = 10; i < 100; i++) {
// j=i+1避免重复
from = Math.max(1000 / i, i + 1);
to = Math.min(10000 / i, 100);
for (int j = from; j < to; j++) {
val = i * j;
/*
* 假设val = 1000a + 100b + 10c + d, 因为满足val = x * y, 则有x = 10a + b, y = 10c + d
* 则val - x - y = 990a + 99b + 9c = 9 * (110a + 11b + c),
*所以val - x - y能被9整除。 所以满足该条件的数字必定能被9整除,所以可以直接过滤其他数字。
*/
if (val % 100 == 0 || (val - i - j) % 9 != 0) {
continue;
}
count++;
str1 = String.valueOf(val).split("");
str2 = (String.valueOf(i) + String.valueOf(j)).split("");
Arrays.sort(str1);
Arrays.sort(str2);
if (Arrays.equals(str1, str2)) {// 排序后比较,为真则找到一组
sum++;
System.out.println("第" + sum + "组: " + i + "*" + j + "=" + val);
}
}
}
System.out.println("共找到" + sum + "组吸血鬼数");
System.out.println(count);
}
}

结果:

1组: 15*93=1395
2组: 21*60=1260
3组: 21*87=1827
4组: 27*81=2187
5组: 30*51=1530
6组: 35*41=1435
7组: 80*86=6880
共找到7组吸血鬼数
232

 

 

//未运行

public class XiXueGuiJudge {
public XiXueGuiJudge()
{


}


void main(){

//输入数据
Scanner scanner=new Scanner(System.in);
System.out.println("请输入一个数据");
int s=scanner.nextInt();


int i,a,b,c,d,num=s;
a=num%10;
num/=10;
b=num%10;
num/=10;
c=num%10;
num/=10;
d=num%10;
for (i=1000;i<10000;i++)
{
if ( (a*10+b)*(b*10+c)==s||
(a*10+b)*(c*10+d)==s||
(b*10+a)*(b*10+c)==s||
(b*10+a)*(c*10+d)==s||
(a*10+c)*(b*10+d)==s||
(c*10+a)*(d*10+b)==s||
(c*10+a)*(b*10+d)==s||
(a*10+d)*(b*10+c)==s||
(a*10+d)*(c*10+b)==s||
(d*10+a)*(b*10+c)==s||
(d*10+a)*(c*10+b)==s

)
{System.out.println(i+"是一个吸血鬼数字");}



}





}





package xiXueGui;

public class Main {
public static void main(String[] args)
{XiXueGuiJudge xx=new XiXueGuiJudge();
xx.main();



}
}

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值