JAVA11 求最小公倍数

循环:
//计算m、n中较大者
int max=Math.max(m,n);
//从max到m*n之间找最小公倍数
for(int i=max;i<=m*n;i++){
//如果既能被m整除又能被n整除,说明是最小公倍数,直接返回
if(i%m==0&&i%n==0){
return i;
}
}
return -1;
}
int max=Math.max(m,n); 与**int max=m>n ? m:n;**等效

JAVA12 小球走过路程计算

float sum=0;
for(int i=0;i<n;i++){
sum+=h;//加上落下的距离
h=h/2;//弹起距离缩短一半
if(i==n-1){
System.out.println(String.format("%.3f", h)+" "+String.format("%.3f", sum));
}
sum+=h;//加上弹上去的距离
}

JAVA13 求平均数

double sum=0;
int n=0,i=0;
while((i=scan.nextInt())>0){
sum+=i;
n++;
}
System.out.println(String.format("%.2f",sum/n));

JAVA14 判断质数

Erlang
int c=0;
for(int i=1;i<number+1;i++){
if(number%i==0){
c++;
}
}
return c>2 ? false:true;
精简后:
Erlang
int i=2;
for(;number%i!=0;i++);
return i==number ? true:false;
JAVA15 计算整数位数

Erlang
if(num<=0) System.out.print(num);
int c=0;
while(num>0){
num/=10;
c++;
}
System.out.print(c);

JAVA16 数组遍历

min=ary[0];
max=ary[0];
for(int i=0;i<ary.length;i++){
if(ary[i]>max){
max=ary[i];
}
if(ary[i]<min){
min=ary[i];
}
}
System.out.println(max+" "+min);
max = ary[0];
min = ary[0];
for(int i=0;i<ary.length;i++){
max=Math.max(ary[i],max);
min=Math.min(ary[i],min);
}
System.out.println(max+" "+min);
1. max = Math.max(ary[i], max);
- 作用 :从当前数组元素
ary[i]和当前最大值max中,取较大值并更新到max变量里。 - 原理 :
Math.max(a, b)是 JavaScript 内置方法,接收两个参数,返回其中数值更大的那个。 - 遍历场景逻辑 :初始化时,
max一般设为-Infinity(负无穷),这样数组的第一个元素必然会成为初始最大值;后续每遍历一个元素,都和当前max比较,把更大的值存进去,最终得到整个数组的最大值。
2. min = Math.min(ary[i], min);
- 作用 :从当前数组元素
ary[i]和当前最小值min中,取较小值并更新到min变量里。 - 原理 :
Math.min(a, b)和Math.max正好相反,接收两个参数,返回其中数值更小的那个。 - 遍历场景逻辑 :初始化时,
min一般设为Infinity(正无穷),这样数组的第一个元素必然会成为初始最小值;后续每遍历一个元素,都和当前min比较,把更小的值存进去,最终得到整个数组的最小值。
JAVA17 数组倒转

int i=0,t;
while(i<arr.length/2){
t=arr[i];
arr[i]=arr[arr.length-1-i];
arr[arr.length-1-i]=t;
i++;
}
int left=0,right=arr.length-1;
while(left<right){
int temp=arr[left];
arr[left]=arr[right];
arr[right]=temp;
left++;
right--;
}

JAVA18 二维数组求和

for(int i=0;i<arr.length;i++){
for(int j=0;j<arr[i].length;j++){
sum+=arr[i][j];
}
}
for(int[] arr1 : arr){
for(int arr2 : arr1){
sum=sum+arr2;
}
}
return sum;
-
外层循环 :
for(int[] arr1 : arr)arr是一个二维数组(int[][]类型)。- 每次迭代时,
arr1会指向arr中的一个一维数组元素。
-
内层循环 :
for(int arr2 : arr1)- 遍历当前一维数组
arr1,每次迭代时,arr2会指向arr1中的一个int类型元素。
- 遍历当前一维数组
-
整体作用:把二维数组
arr中的所有元素累加,最终返回总和sum。for (元素类型 变量名 : 数组/实现Iterable接口的集合) {
// 循环体,每次迭代时,变量会自动指向当前元素
}
增强 for 循环(Enhanced for Loop) ,也叫 foreach 循环,是 JDK 5 引入的语法,专门用来简化数组或集合的遍历操作。
JAVA19 修改Data类的定义

JAVA19 修改Data类的定义


class Data {
private int x;
private int y;
public Data(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
}
private 仅能在当前类内部访问,外部类(包括子类、同包类)都无法直接调用
public 可以被任何类访问,无论是否在同一个包、是否是子类
public是 "大家都能用",private是 "只有自己能用",第二段代码用 public 才是能正常用的,第一段用 private 等于锁死了用不了;this.就是 "分清重名的东西",没加 this. 的话,代码会 "认不出" 该给谁赋值,加了才会把值给对;- 第一段代码又用 private 又没加 this.,又锁门又给错东西,等于白写;第二段又用 public 又加 this.,才是又能用又没错的写法
this. 的差别(就比分清 "两个重名的人")
咱们生活里常遇到 "重名" 的情况 ------ 比如孙子叫 "小明",邻居家小孩也叫 "小明",奶奶喊 "小明过来",俩人都可能过来,分不清。这时候奶奶说 "这个 小明(咱们家的)过来",就只叫到你了 ------this.就是代码里的 "这个",专门分清 "重名的东西"
this.就一个核心用:当两个东西名字一样时,加个 this.,就知道指的是 "自己家的那个",不会弄混。
JAVA20 验证年龄

public void setAge(int age){
if(age<0){
this.age=0;
}
else if(age>200){
this.age=200;
}else{
this.age=age;
}
}
public int getAge(){
return age;
}
封装的核心价值
- 数据安全:避免外部直接操作属性导致的非法数据(比如这里的年龄异常值)。
- 低耦合 / 易维护:内部逻辑修改不影响外部代码,降低了代码的依赖风险。
- 隐藏复杂度:外部只需关注「怎么用」,不需要关注「内部怎么实现」,简化了交互成本。
-
隐藏内部属性 Person 类的
age属性通常会用private修饰,这意味着外部代码无法直接修改age(比如不能写person.age = -5;),只能通过类提供的方法间接操作。 -
通过方法控制访问逻辑 代码中的
setAge()方法就是封装的核心体现:- 当外部调用
setAge()设置年龄时,方法内部会先校验输入的合法性(小于 0 则设为 0,大于 200 则设为 200,否则正常赋值)。 - 这就避免了外部随意设置非法年龄(如负年龄、超过 200 的年龄),从根源上保证了
age属性的安全性。
- 当外部调用
-
对外提供安全接口
getAge()和setAge()是类对外暴露的「访问接口」:- 外部不需要知道
age的校验逻辑,只需要调用setAge()传值、调用getAge()取值即可。 - 后续如果要修改年龄的校验规则(比如把上限从 200 改成 150),只需要修改
setAge()的内部代码,外部调用者完全不需要改动,极大提升了代码的可维护性。
- 外部不需要知道