1. 参数和局部变量重名会怎样
如果参数和局部变量重名会怎么样?
欢迎关注我公众号:AI悦创,有更多更好玩的等你发现!
公众号:AI悦创【二维码】

如果参数和局部变量重名会怎么样?
欢迎关注我公众号:AI悦创,有更多更好玩的等你发现!

欢迎关注我公众号:AI悦创,有更多更好玩的等你发现!
count / 2 + count % 2;公式解析,可以除的尽的,是偶数的倍数,那就是购买两件的数量。而余数则是:没有买两件「偶数」的件数。
让我们一步步分析:
fullPriceCount = count / 2 + count % 2
这行代码计算需要支付全价的商品数量
count / 2 是整数除法,得到商品总数的一半(向下取整)
count % 2 是取余操作,当总数为奇数时等于1,偶数时等于0
实际效果是:对于奇数个商品,全价商品会比半价商品多一个
举例:
如果 count = 5
count} / 2 = 2(整数除法)
count % 2 = 1
fullPriceCount} = 2 + 1 = 3(需要支付全价的商品数)
halfPriceCount = count - fullPriceCount
这行简单地用总数减去全价商品数,得到半价商品数
继续上面的例子,halfPriceCount = 5 - 3 = 2
totalCost = price * fullPriceCount + halfPriceCount * price / 2
计算总价:全价商品数量 × 单价 + 半价商品数量 × (单价/2)既然,我们要计算利润,那就不能是直接编写方法输出在控制台就结束,而应该是计算完成后,返回这个计算值。这就是我们所说的返回值。
代码不能放在 return 后面,因为 return 后面,不能放任何其它代码的;
// 下面成立
int a = 1;
return 0;
// 下面不成立:Unreachable statement
return 0;
int a = 1;
return 执行到时,整个方法就结束了;
就类似 break 的一样,不过 return 的是方法而不是循环;
适当的利用 return 有时会有意想不到的效果,比如:提前结束方法;
常规代码中:if…else if…else 等,有时候为了避免 if 执行后在执行 if 中另外一种条件的代码,则必须写在 else 里面(保证整组的判断)因为 if else 只会执行其中一个!可如果是在方法当中,我们就可以利用 return 来省略简化代码。
让我用代码示例来说明这两种写法的区别:
// 传统的 if-else 写法
public String getGrade(int score) {
String result;
if (score >= 90) {
result = "A";
} else if (score >= 80) {
result = "B";
} else if (score >= 70) {
result = "C";
} else {
result = "D";
}
return result;
}
// 使用 return 简化后的写法
public String getGradeSimplified(int score) {
if (score >= 90) {
return "A";
}
if (score >= 80) {
return "B";
}
if (score >= 70) {
return "C";
}
return "D";
}
第二种写法通过 return 语句直接返回结果,避免了 else 的使用,使代码更加简洁易读。每个条件判断后立即返回结果,后续的代码自然不会执行,因此不需要显式地用 else 来防止执行。这种模式在实际开发中被称为"卫语句"(Guard Clauses)模式。
这种优化特别适用于:
比如有一件事只能二选一:用户注册时,如果年龄大于等于18岁则是成年账号,否则是未成年账号。这种情况下,我们只能希望执行的满18岁,就不要执行未满18岁。如果在常规情况下,是必须写 else 或 else if。
// 正常编写
public class Main {
public static void main(String[] args) {
int Condition = 17;
if (Condition < 18) {
System.out.println("未满18岁");
} else {
System.out.println("已满18岁");
}
}
}
// 输出
未满18岁
// else 不能省略,会执行 已满18岁
public class Main {
public static void main(String[] args) {
int Condition = 17;
if (Condition < 18) {
System.out.println("未满18岁");
}
System.out.println("已满18岁");
}
}
// 输出
未满18岁
已满18岁
在上面代码中可以知道,是不能省略 else 的,也没有别的办法。此时 return 用上(但是必须创建方法就可以省略)
虽然,上面实现了商品描述,但是每次需要都要重新编写一下 MerchandiseDescAppMain 而且编写输出,显然很麻烦,而我们的商品又不是只有一件商品。
当然,你可以说创建一个商品就就 copy 一遍,但是重复太多次还麻烦,而且你还得考虑到,你后期添加一个新功能,那岂不是:你之前重复 copy 了几次,也就意味着你要重复做几次修改「添加新功能」。
Frame 视图和 Variable 视图。视图的作用,隐藏和显示
小超市需要:
超市名称
超市地址
停车位数量
收入总和
商品列表
商品名称
商品 id
商品库存
销售价格
进货成本「购买价格」
商品销售「销售数量」
客户
顾客名字
顾客带了多少钱
顾客是否开车过来
你好,我是悦创。
我们来系统学习 Java 中的 Random 类及其用法。Java 提供了 java.util.Random 类用于生成随机数,它是基础随机数生成工具之一。
在使用 Random 类之前,需要引入它:
import java.util.Random;
除了 String 是我们 Java 自带的类,其他的类都是我们自己创建的类。CPU、Memory、Storage。
接下来,我们用一个类来把上面串联起来。构成我们自己的手机:
/**
* @ClassName: MyPhoneMaker
* @Description: TODO
* @Author: AndersonHJB
* @date: 2022/11/22 23:08
* @Version: V1.0
* @Blog: https://bornforthis.cn
*/
public class MyPhoneMaker {
// 我的手机制造商
public static void main(String[] args) {
Phone phone = new Phone();
phone.hasFigurePrintUnlocker = true; // 指纹解锁器
phone.price = 1999; // 价格
phone.screen = new Screen(); // 屏幕
phone.screen.producer = "京东方"; // 屏幕生产商
phone.screen.size = 8.8; // 屏幕大小
CPU cpu = new CPU(); // CPU
cpu.producer = "三星"; // CPU 生产商
cpu.speed = 3.5; // CPU 速度
Memory memory = new Memory(); // 内存
memory.producer = "三星"; // 内存生产商
// memory.producer = new String("三星"); // 内存生产商,这么写没啥意义,因为双引号 Java就会自动识别字符串
memory.capacity = 4; // 容量
Storage storage = new Storage(); // 储存
storage.producer = "Intel"; // 储存生产商
storage.capacity = 128; // 容量
phone.mainboard = new Mainboard(); // 主板
phone.mainboard.cpu = cpu;
phone.mainboard.memory = memory;
phone.mainboard.storage = storage;
phone.mainboard.model = "EA888";
phone.mainboard.year = 2019;
// 想想我们创建了几个对象,有创建了几个引用?
// 有几个 new 就有几个对象
// 另外,还有 5个 string 对象
phone.prePhone = new Phone();
// 引用能互相用吗?
// Memory m1 = new Memory();
// Storage s1 = new Storage();
// Memory m2 = s1;
// Storage s2 = m1;
}
}
int:0、double:0.0、bool:true、false」数组的类名就是类型带上中括号
同一类型的数组,每个数组对象的大小可以不一样。也就是每个数组对象占用的内存可以不一样,这点和类的对象不同。
「我们可以创建每个长度不同的数组,但是类型都是 int,长度可以不一样」
「对象是通过类来创建的,类里面定义的成员变量,其实是就是对象可以使用的数据。每一个成员变量都是固定的数据类型的(引用类型或基础数据类型)。每种类型占用的大小都是固定的,也就是说:你创建一个类的对象,它占用多少内存,它是固定的,它不会变化。」
可以用引用指向类型相同大小不同的数组,因为它们属于同一种类型
类是对象的模版,对象是类的一个实例
类:类定义了一类事物, 有哪些属性。比如商品,它有:价格、名字,但是它不会规定一个具体的一个商品是什么,价格是什么。它只是规定:你是商品这个类型,那你就要有:价格、名字。
对象:我们要在现实的生活中,要突出一点的话,我们叫它实例。
一个 Java 程序中类名相同的类只能有一个,也就是类型不会重名
一个类可以有很多对象「类似:你拿一个模具「类」可以做出很多小东西「实例」」
一个对象只能根据一个类来创建「只能按一个类来,不能说按 M 类,再按 Y 类」
定义:Object 指的是根据某个类创建出来的具体实例,存在于内存中。
特点:
它是类的具体实现。
通过 new 关键字(或其他方式,如反射、克隆等)创建。
例如:
class Person {
String name;
}
public class Main {
public static void main(String[] args) {
Person p = new Person(); // 这里的 p 就是一个对象
}
}
在上述代码中,p 是 Person 类的对象。
从数据类型的角度来看,类就是自己创建了一种新的数据类型。类也叫做 “自定义类型”。一个 Java 程序中不允许类同名。
看例程,学习类和对象的使用。
问题
请问在 SuperMarket 中引用 Merchandise 类,不需要像别对语言一样使用 import 之类的语句显示引用吗?
同一个 package 里的类互相引用不需要 import 语句
public class MerchandiseUsingVariable {
public static void main(String[] args) {
// 用四个变量描述商品1
String m1Name = "茉莉花茶包 20 包";
String m1Id = "000099518";
int m1Count = 1000;
double m1Price = 99.9;
// 再用四个变量描述商品2
String m2Name = "可口可乐 330ml";
String m2Id = "000099519";
int m2Count = 1000;
double m2Price = 3.0;
// 卖出一个商品1
int m1ToSold = 1;
System.out.println("感谢购买" + m1ToSold + "个" + m1Name + "。商品单价为" +
m1Price + "。消费总价为" + m1Price * m1ToSold + "。");
m1Count -= m1ToSold;
System.out.println(m1Id + "剩余的库存数量为" + m1Count);
// 卖出3个商品2
int m2ToSold = 3;
System.out.println("感谢购买" + m2ToSold + "个" + m2Name + "。商品单价为" +
m2Price + "。消费总价为" + m2Price * m2ToSold + "。");
m2Count -= m2ToSold;
System.out.println(m2Id + "剩余的库存数量为" + m2Count);
}
}