开篇碎碎念:
海口今天的天气简直破天荒的热,34°,出门就被太阳晒得睁不开眼睛,身体也被热浪包围,幸好下午没课可以在寝室里吹空调敲代码学Java,想点杯咖啡结果被商家取消了,绝绝子,算了还是喝开水吧,最近肠胃也不是很好。最近新买了一个显示器敲代码学习的效率简直飞起,再也不用一个屏幕开几个页面眼睛都看花啦,修图也是嘎嘎香,码字效率也飞起!!
正题:
今天摸鱼没学太多,写了两篇python二级考试题,看了Java的方法重载和递归算法
python二级错题:
数据组织的维度:
一维数据:
由对等关系的有序或无序数据构成,采用线性方式组织
对应列表、数组和集合等概念
二维数据:
由多个一维数据构成,是一维数据的组合形式
表格是典型的二维数据,对应数据中的矩阵
多维数据:
由一维或二维数据在新维度上扩展而成
高维数据:
仅利用最基本的二元关系展示数据间的复杂程度
例如:键值对,字典
文件打开: open和with open
区别:with语句访问完文件后不需要将其关闭,直接使用open()方法时需要用close()方法关闭文件
文件读取:
- read([size])方法:从文件当前位置起读取size个字节,若无参数size或者为负数,则表示读取至文件结束为止,它范围为字符串对象.
- readline()方法:从字面意思可以看出,该方法每次读出一行内容,所以,读取时占用内存小,比较适合大文件,该方法返回一个字符串对象。
- readlines()方法:读取整个文件所有行,保存在一个列表(list)变量中,该列表可以由Python的for in 结果进行处理,每行作为一个元素,但读取大文件会比较占内存。
文件的写入
append()函数在列表最后添加一个元素
JAVA学习
方法重载机制 : 功能相似的我们可以用方法重载来完成
public class fa{
public static void main(String[] args){
int x = sumint(10,20);
System.out.println(x);
long y = sumlong(10L,20L);
System.out.println(y);
double z = sumdouble(10.2,20.0);
System.out.println(z);
}
public static int sumint(int a,int b){
return a+b;
}
public static long sumlong(long a,long b){
return a+b;
}
public static double sumdouble(double a,double b){
return a+b;
}
}
*/
//使用方法重载
//代码简介整齐 功能相似可以使方法名相同
public class fa{
public static void main(String[] args){
System.out.println(sum(10,20));
System.out.println(sum(10.2,22.2));
System.out.println(sum(10L,80L));
}
public static int sum(int a,int b){
return a+b;
}
public static long sum(long a,long b){
return a+b;
}
public static double sum(double a,double b){
return a+b;
}
}
什么时候考虑使用方法重载?
在同一个类中如果功能1和功能2的功能相似
那么可以考虑将他们的方法名一至,既美观又便于记忆。
如果两个功能不相似那么使用方法重载就会很麻烦。
使用方法重载条件
1.在同一个类中
2.方法名相同
3.参数列表不同(个数、排序、类型不同)
//参数个数不同
public class fa{
public static void main(String[] args){
m1();
m1(100);
}
public static void m1(){
System.out.println("m1无参数的执行");
}
public static void m1(int a){
System.out.println("m2有一个int");
}
}
排列顺序不一样也可以
递归
方法递归
方法自己调用自己;当递归时程序没有结束条件,一定会发生栈内存溢出错误stackoverrflowError
所以递归一定要有结束条件
假设结束条件是对的,是合法的,递归有时候也会出现栈内存溢出错误,因为可能递归的太深,栈内存不够了,因为一直在压栈;不建议在实际开发中轻易选择递归,用for循环更好,占用内存少;但在极少数情况下不用递归,程序执行不了。
/* for循环求和
import java.util.*;
public class ruguo{
public static void main(String[] args){
System.out.print("请输入一个整数:");
Scanner s = new Scanner(System.in);
int a = s.nextInt();
int he = 0;
for (int i=1; i <= a; i++ ){
he += i;
}
System.out.println(he);
}
}
*/
//递归求和
public class di{
public static void main(String[] args){
int a = sum(1000);
System.out.println(a);
}
public static int sum(int n){
if(n == 1){
return 1;
}
return n + sum(n-1);
}
}
使用递归方法时的栈内存变换图像
递归求阶乘
public class di{
public static void main(String[] args){
int a = sum(5);
System.out.println(a);
}
public static int sum(int n){
if(n == 1){
return 1;
}
return n*sum(n-1);
}
}