首页 > 其他分享 >定义类强化——定义Goods类表示商品

定义类强化——定义Goods类表示商品

时间:2024-03-30 13:34:27浏览次数:18  
标签:count Goods 定义 int price toString 强化 public String

现需要编写一个计算商品总价值的程序,现要求:
1、定义一个表示商品的类:Goods,Goods类要包含:

  • 一个私有成员变量String name表示商品的名称;
  • 一个私有成员变量float price表示商品的价格,并定义setPrice(float price)方法用于修改商品价格;
  • 一个私有成员变量int count表示商品的数量,并定义setCount(int count)方法用于修改商品数量;
  • 一个带参数的构造器:Goods(String name, float price, int count),初始化Goods对象的三个成员变量;
  • 一个方法String toString()方法,用于返回包含商品信息的字符串,该方法返回的字符串内容格式见下面的格式说以及测试用例输出;

toString方法返回格式:

"商品:商品名的单价为:单价元,数量为:数量,合计总价值:总价元";

上述返回字符串中标红色的部分为变量,其他部分为固定内容。

裁判测试类Main:

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入商品的名称、单价和数量,中间用空格分开");
        String name = scanner.next();
        float price = scanner.nextFloat();
        int count = scanner.nextInt();
        Goods goods = new Goods(name,price,count);
        System.out.println(goods.toString());
        //修改商品的单价和数量
        goods.setCount(100);
        goods.setPrice(25.5f);
        System.out.println(goods.toString());
    }
}

输入样例:

在这里给出一组输入。例如:

钢笔 20 100

输出样例:

在这里给出相应的输出。例如:

 前面的代码咱们不再做讨论:

代码奉上就行:
 

class Goods
{
    private String name;
    private float price;
    private int count;



    public Goods(String name,float price,int count)
    {
        this.name = name;
        this.price = price;
        this.count = count;
        
    }
    public void setPrice(float price)
    {
        this.price = price;
    }
     public void setCount(int count)
     {
        this.count = count;
     }
}

划重点: 

关于toString方法

toString方法,看方法名就知道与String有关。我们看一眼API文档:

不错,确实返回类型是字符串。那么,我们就借此发挥发挥:是把传入的内容变成字符串,还是就是简单的打印前面传过来的字符串

package toStringTest;

public class ToStringTest {
    public static void main(String[] args) {
        int a = 3;
        
        System.out.println(a);//对照组,我们本意就是打印a的值
        System.out.println(a.toString());//测试
     
    }
}

结果:

 咱们idea报错了,报错内容:

怎么理解?int类型属于值类型,我们toString方法前面的对象应该是引用类型。编译器看见你给一个int类型,哎,它以为你是按着语法来给了它一个引用类型。结果没想到,你给了它一个基本值类型,人编译器自然无法解引用。

引用类型在java里面包括:类、接口、数组

那我这时候又有想法了,值类型的数组可以吗?

package toStringTest;

public class ToStringTest {
    public static void main(String[] args) {
        
        int[] arr1 = {1,2,3,4,5};//创建一个int型的数组,并且初始化
        
        System.out.println(arr1.toString());//我们把数组名传过去,调用它的toString方法,希望能打印数组这个内容


    }

这次咱没报错了,又是猜一猜的环节:输出内容是什么呢?

 

 好嘛,给我们打印的是这个数组的地址。事情发展到这儿,也能理解:这c语言的数组名就是代表数组首元素的地址。这里也不例外,数组确实是引用类型,但数组名.toString()方法,是打印这个数组名,数组名->数组地址,即打印数组地址。

我们尝试让它打印元素:

好好好,报错了,说明toString()前面只能传一个引用——说地址也不过分。

那么按照上面的经验,我们知道toString()前面必然是个引用类型——我们试试

字符串

 String arr = "Labor is the most glorious.";//实例化String类
        System.out.println(arr);//对照组
        System.out.println(arr.toString());//咱们希望调用这个引用类型的toString()方法也是实现对这个字符串的打印

题外话:Everything is an object。字符串本身就是个类,它在创建对象时候是可以默认省掉new + 构造器。

不负所望

我们试着传个对象:

public class ToStringTest {
    public static void main(String[] args) {


       Print print = new Print();
        //System.out.println(print.d.toString());这里toString()方法前面也报错,可见紧挨着toString()也必须是个引用类型
        System.out.println(print.s.toString());//打印print里面的字符串成员变量
        System.out.println(print.toString());//和上面传个数组名具有异曲同工之妙
    }
}
class Print
{
   public String s = "abc";
   public double d = 3.0;
}

 我们来看看结果:

小总结:

看来,toString()方法就是打印前面的内容,返回是个字符串,传过来的得是个引用类型

万一我们想要根据需求打印内容:我们就可以在相应类里面对方法进行重写(这也叫方法重载)

咱们这笔锋一转,插叙结束,如这道题: 

 那么,想返回一个固定格式,我们可以这样:
 

public String toString()
    {
        float sum = price * count;
         return "商品:"+name+"的单价为:"+price+"元,数量为:"+count+",合计总价值:"+sum+"元";//返回格式,参数可以直接和字符串用+拼接
        
    }

我们可以看到这个toString方法是在Goods类里面进行重写,调用成员变量可以不用getter方法,返回的时候就是值和字符串相接,进行打印。

小总结:

toString()方法就是打印方法,前面来个引用类型对其进行调用,返回格式不满意,尽管在类里面对方法重写。

至于重写的是哪里的代码,就是我们后面要谈的父类...

完整代码参考:
 

class Goods
{
    private String name;
    private float price;
    private int count;



    public Goods(String name,float price,int count)
    {
        this.name = name;
        this.price = price;
        this.count = count;
        
    }
    public void setPrice(float price)
    {
        this.price = price;
    }
     public void setCount(int count)
     {
        this.count = count;
     }
    public String toString()
    {
        float sum = price * count;
         return "商品:"+name+"的单价为:"+price+"元,数量为:"+count+",合计总价值:"+sum+"元";
        
    }

}

标签:count,Goods,定义,int,price,toString,强化,public,String
From: https://blog.csdn.net/2301_80682565/article/details/137168331

相关文章