1:有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,把原有的数据和计算出的平均分数存放在磁盘文件 "stud "中。
student类,主要是定义了几个变量的get,set,tostring方法
public class student {
private int id;
private String name;
private float Chinese;
private float Science;
private float math;
private float avg;
@Override
public String toString() {
return "student{" +
"id=" + id +
", name='" + name + '\'' +
", Chinese=" + Chinese +
", Science=" + Science +
", math=" + math +
", avg=" + avg +
'}';
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getChinese() {
return Chinese;
}
public void setChinese(float chinese) {
Chinese = chinese;
}
public float getScience() {
return Science;
}
public void setScience(float science) {
Science = science;
}
public float getMath() {
return math;
}
public void setMath(float math) {
this.math = math;
}
public float getAvg() {
return avg;
}
public void setAvg(float avg) {
this.avg = avg;
}
}
dao类,主要定义了求平均数的方法
public class studentDao {
static float avg;
public static float avg(student s){
float ChineseGrade =s.getChinese();
float ScienceGrade = s.getScience();
float mathGrade = s.getMath();
avg = (ChineseGrade+ScienceGrade+mathGrade)/3;
return avg;
}
}
main方法,这里写了收集键盘输入的信息和将信息输出到文件中的两个方法
public class stud {
static ArrayList<student> studentList = new ArrayList<student>();
static BufferedWriter bw = null;
public static void main(String[] args) {
getMessage();
writeMessage();
}
public static void getMessage(){
Scanner input = new Scanner(System.in);
int count = 1;
for (int i=0;i<3;i++){
System.out.println("请输入第" + count + "学生的学号");
int id = input.nextInt();
System.out.println("请输入第"+count+"学生姓名");
String name = input.next();
System.out.println("请输入第"+count+"学生的语文成绩");
float ChineseGrade = input.nextFloat();
System.out.println("请输入第"+count+"学生的科学成绩");
float ScienceGrade = input.nextFloat();
System.out.println("请输入第"+count+"学生的数学成绩");
float MathGrade = input.nextFloat();
student s = new student();
if ((ChineseGrade<0)&&(ScienceGrade<0)&&(MathGrade<0)){
System.out.println("请输入正确的成绩");
continue;
}else{
s.setId(id);
s.setName(name);
s.setChinese(ChineseGrade);
s.setScience(ScienceGrade);
s.setMath(MathGrade);
s.setAvg(studentDao.avg(s));
studentList.add(s);
count++;
}
}
}
public static void writeMessage(){
try {
bw = new BufferedWriter(new FileWriter("F://stud.txt"));
for (int i = 0;i<studentList.size();i++){
bw.write("学生学号: "+studentList.get(i).getId()+
"学生姓名: "+studentList.get(i).getName()+
"语文成绩为: "+studentList.get(i).getChinese()+
"科学成绩为: "+studentList.get(i).getScience()+
"数学成绩为: "+studentList.get(i).getMath()+
"平均成绩为: "+studentList.get(i).getAvg());
bw.newLine();
}
} catch (IOException e) {
e.printStackTrace();
}finally {
if (bw != null){
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
2:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少
//兔子每月的数量依次为 1 1 2 3 5 8 13 21 ,通过这个数列可以得知在三月及三月以后每个月兔子的对数为前面两个月的和。题干中求得是总数,所以在输出时需要对数*2
public class rabitNumber {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入月份");
int m = input.nextInt();
System.out.println("第"+m+"个月兔子的数量是"+(number(m)*2);
}
public static long number(int m){
if (m == 1|m == 2){
return 1;
}else{
return number(m-1)+number(m-2);
}
}
}
3:一个景区根据游人的年龄收取不同价格的门票。请编写游人类,根据年龄段决定能够购买的门票价格并输出,然后写出测试类测试该类(类的基本实现)
创建price方法,以年龄为条件,if判断门票价格
public class tourist {
int ticketPrices;
public void prices(int age){
if(age>0&&age<8){
ticketPrices = 5;
}else if(age<18){
ticketPrices = 15;
}else if (age<65){
ticketPrices = 25;
}else{
ticketPrices = 10;
}
System.out.println("门票价格为"+ticketPrices);
}
}
测试类
public class test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
tourist ts = new tourist();
System.out.println("请输入年龄");
int age = input.nextInt();
ts.prices(age);
}
}
4:编写一个Java程序将当100,101,102,103,104,105个数以数组的形式写入到Dest.txt文件中,并以相反的顺序读出显示在屏幕上。
//创建数组
int data[] = {100,101,102,103,104,105};
//创建文件
File file = new File("Dest.txt");
try {
FileWriter fw = new FileWriter(file);
//循环输出数组内容
for (int i = 0;i< data.length;i++){
fw.write(data[i]+"\t");
}
fw.flush();
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
for (int i = data.length-1; i >=0;i--){
System.out.println(data[i]+"\t");
}
}
Java中的static Class和non static Class
1.内部静态类不需要有指向外部类的引用。但非静态内部类需要持有对外部类的引用。
2.非静态内部类能够访问外部类的静态和非静态成员。静态类不能访问外部类的非静态成员。他只能访问外部类的静态成员。
3.一个非静态内部类不能脱离外部类实体被创建,一个非静态内部类可以访问外部类的数据和方法,因为他就在外部类里面。
mysql数据库的常用索引
1. 普通索引
普通索引是MySQL中最基本索引类型,基本上对列的数据不会加任何的限制,可以允许空值和重复值,最主要的用途就是加快数据的访问速度。
2. 唯一索引
唯一索引指的是对数据添加了唯一性约束,这一列的数据当中不能够出现重复的值,但是可以有null值(至多有一个)。在创建唯一索引时会进行数据校验,如果此时已经有了重复数据,则索引创建失败。在建立唯一索引后,再向表中插入已有的重复数据时,也会被拒绝。
3. 主键索引
主键索引的特点是:非空、唯一。所以如果我们想找一列作为每条数据的唯一标识,就会将这一列声明为主键。由于主键的特点,经常会被作为其他表外键的参照列,也是在进行数据同步时的主要参照。
4. 复合索引
同一索引类型作用在多个不同列上时,可以称之为组合索引,对于主键索引,有一个特别的称呼:复合主键。(注意:复合主键与联合主键不是同一个含义,联合主键指的是将多个主键的值联合在一起,常出现在多对多逻辑的中间表中,比如:将两个有关联的数据主键定义在中间表中,然后再为中间表设立一个主键来唯一标识每一条关联数据)
5. 全文索引
全文索引主要是作用在数据类型为CHAR、VARCHAR、TEXT的列上,用于长文本的字符串搜索加速。使用全文索引时,自然语言搜索的效率要大于LIKE关键字。
mysql数据库的sql语句优化
1.避免全表扫描
2.避免索引失效
3.避免排序,不能避免,尽量选择索引排序
4.避免查询不必要的字段
5.避免临时表的创建,删除
等等等
举个栗子
1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
2.尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行
3.select count(*) from table;这样不带任何条件的count会引起全表扫描,并且没有任何业务意义,是一定要杜绝的。
4.应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。
简述spring的ioc
在java程序中,一个业务逻辑的实现往往需要多个对象来协作完成。在程序中我们使用new Object()的方式创建对象,并且还要维护对象之间的相互依赖创建。所谓IOC(Inversion of Control,控制反转),对于spring框架来说,就是由spring来负责控制对象的生命周期以及对象之间的关系。对象的创建、销毁,对象之间的相互依赖关系都由spring来完成,对象只需要关心业务逻辑本身就可以了。控制反转就是获得依赖对象的方式反转了。
Ioc不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。如何理解好Ioc呢?理解好Ioc的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”。传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象
以上内容是学习总结收集后的结果。
本人只是java学习中的小学生,有更好的想法请说明并解释,不然我怕我看不懂[捂脸]。