Java笔记(第五课)

本节大致内容:

1:Scanner 减少代码冗余

2:Composition 与 嵌套调用

3:Java 的三个API

4:作业1,用第三个API判断输入彩票号码是否在区间内

5:作业2,银行程序:

1,添加银行雇员类。

2,银行雇员类的四个方法

1: 持有银行顾客数据 2:可以计算银行总存款额 3:可以添加,删除客户,4:可以对客户以余额多少进行排序.

3,主函数,主界面添加 (选择身份:雇员(进入雇员界面),顾客(进入顾客界面))

银行雇员主界面包括银行雇员类的功能

####

Scanner:放开头以减少代码冗余(提升作用域 )

Scanner最好不要放在类的属性里,而是放在一个新类里

可以将类里每一个方法中的scanner 改为放在一个新类KB的 static scanner in(共用).

class KB
{
static Scanner in = new Scanner(System.in);
}

调用时 : KB.in.nextInt();

好处 1:没有内存垃圾冗余。

2:可以直接用类名访问(KB)。

####

Composition 聚合

(一种编程形式)

(将一个类的对象当成一个类的属性)

上课所讲的body,arm,hand,finger 类,是一种Composition

对于 d.move();

可以将 . 运算符读成 的 (没有小括号时)

读成 去(有小括号时)

import java.util.*;

public class Main
{
    public static void main(String[] args)
    {
        Body d = new Body();
        d.move();
        d.lArm.move();//嵌套调用
        d.lArm.h.move();//嵌套调用
        d.lArm.h.f.move();//嵌套调用
    }
}
class Body
{
    Arm lArm;
    Body()
    {
        lArm = new Arm();
        
    }
    void move()
    {
        System.out.println("move Body!");
    }
}
class Arm
{
    Hand h;
    Arm()
    {
         h = new Hand();
    }
    void move()
    {
        System.out.println("move Arm!");
    }
}
class Hand
{
    Finger f;
    Hand()
    {
        f = new Finger();
    }
    void move()
    {
        System.out.println("move Hand!");
    }
}
class Finger
{
    void move()
    {
        System.out.println("move Finger!");
    }
}

考虑到嵌入调用有些麻烦,可以直接在move函数内部调用下一个类的move函数

import java.util.*;

public class Main
{
    public static void main(String[] args)
    {
        Body d = new Body();
        d.move();
    }
}
class Body
{
    Arm lArm;
    Body()
    {
        lArm = new Arm();
        
    }
    void move()
    {
        System.out.println("move Body!");
        lArm.move();
    }
}
class Arm
{
    Hand h;
    Arm()
    {
         h = new Hand();
    }
    void move()
    {
        System.out.println("move Arm!");
        h.move();
    }
}
class Hand
{
    Finger f;
    Hand()
    {
        f = new Finger();
    }
    void move()
    {
        System.out.println("move Hand!");
        f.move();
    }
}
class Finger
{
    void move()
    {
        System.out.println("move Finger!");
    }
}

####

Java API

1:String 类

包:java.lang.String.

只有String类可以不用 new 构造函数

下面三种形式均正确

import java.util.*;

public class Main
{
    public static void main(String[] args)
    {
        String s = new String("Hello");//第一种
        String s1 = "Hello";//第二种
        char []a={'H','e','l','l','o'};
        String s2 = new String(a);//第三种:字符数组形式
    }
}

思考:第三种String s2 = new String(a);字符数组赋值有什么作用?

String 的一些函数

  1. int length(). Obtains the number of characters in the String.

  1. char charAt(int index).Returns the character at the specified index.

  1. boolean equals (Object anObject). Returns true if the specified Object represents a String with the same sequence of characters.

  1. int indexOf(int ch). Returns the index of the first occurrence of the character.

  1. int indexOf(String str). Returns the index of the first occurrence of the String.

  1. boolean startsWith(String prefix). Checks if the String has the specified prefix.

  1. String substring(int beginIndex, int endIndex). Returns a substring.

具体讲讲indexOf函数 :用于查找子串的首字母的索引

import java.util.*;

public class Main
{
    public static void main(String[] args)
    {
        String s1 = "Hello";
        int i = s1.indexOf("ll");
        System.out.println(i);
    }
}

输出 : 2

substring函数

import java.util.*;

public class Main
{
    public static void main(String[] args)
    {
        String s1 = "Hello";
        String s3 = s1.substring(1,3); //左闭右开
        System.out.println(s3);
    }
}

输出 : el

**关于 == 与内存分配

摘用https://blog.csdn.net/SmartAnt_5658/article/details/80824733?spm=1001.2014.3001.5506

import java.util.*;
public class Main
{
    public static void main(String[] args)
    {
        String str1 = "java";
        String str2 = new String("java");
        String str3 = "java";
    }
}

在这里 str1 = str3, 而 str1 != str2;

我们知道,对象间的比较可通过“==”运算符和“equals()”方法两种方式进行,“==”运算符用于比较两个对象的内存地址的值是否相等,而“equals()”方法则是用比较两个对象的内容是否一致。在这里,str1与str3相等,说明str1和str3是指向同一个内存空间的。如下图所示:

***

####

第二类 :The Wrapper Classes 包装类

对应着相应基本数据类型

tips: 1:类名首字母都大写 FishEnergy (实义单词)

2:变量名,函数名(第二个单词首字母大写):fishEnergy(),nextInt(),

The Wrapper Classes :

Java offers classes that mimic the primitives. There is one such class for each primitive. Together, these classes are called the wrapper classes:

java.lang.Byte

java.lang.Short

java.lang.Integer

java.lang.Long

java.lang.Character

java.lang.Float

java.lang.Double

java.lang.Boolean

模板

public class WrapperConversion { 
    public static void main(String[] args) { 
        Integer objectValue = new Integer(100);
        int intValue = objectValue.intValue(); 
        long longValue = objectValue.longValue(); 
        double doubleValue = objectValue.doubleValue();     String stringValue = objectValue.toString(); 
    
        System.out.println( "objectValue: " + objectValue);     System.out.println( "intValue: " + intValue); 
        System.out.println( "longValue: " + longValue); 
        System.out.println( "doubleValue: " + doubleValue); 
        System.out.println( "stringValue: " + stringValue); 
    } 
} 

上课演示的代码 //报错了,不是很懂,先不放代码

####

第三类:StringTokenizer class

(给字符串定义一个标志符)

Tokenizing is the process of breaking a string into smaller pieces called tokens. Tokens are separated, or delimited, by a character or group of characters.

The StringTokenizer class is part of the package java.util. The following is a list of some of the methods in the class StringTokenizer:

StringTokenizer(String str). Constructs a string tokenizer. The tokenizer uses the default delimiter set, white space.

StringTokenizer(String str, String delim). Constructs a string tokenizer. The argument delim contains the character delimiters for separating tokens.

boolean hasMoreTokens(). Tests if there are more tokens to extract.

String nextToken(String delim). Returns the next token in the string. (通常放循环中)

int countTokens(). Obtains the number of tokens left to be extracted, not the number of tokens in the string.

课上代码

import java.util.*; 
public class ProductInfo { 
    public static void main(String[] args) {
        String data = "Mini Discs 74 Minute (10-Pack)_5_9.00"; 
        StringTokenizer tknzr = new StringTokenizer(data, "_"); //以"_"分隔符
        String name = tknzr.nextToken(); 
        String quantity = tknzr.nextToken(); 
        String price = tknzr.nextToken(); 
        System.out.println( "Name: " + name); 
        System.out.println( "Quantity: " + quantity); 
        System.out.println( "Price: " + price); 
    }
 } 

输出:

Name: Mini Discs 74 Minute (10-Pack)

Quantity: 5

Price: 9.00

观察发现是以 "_"为分隔符进行读取.

tips:若再调用一次Token则会报错

####

Token 使用的两种方式

import java.util.*; 
public class Main { 
    public static void main(String[] args) {
        String str = KB.in.next();
        StringTokenizer sT = new StringTokenizer(str, ",");
        int count = sT.countTokens();
        for(int i = 0 ;i < count ; i++)
        {
            String temp = sT.nextToken();
            System.out.println(temp);
        }
        //一般不用,因为当你需要对输入进行增加与删改,出错概率高
    }
 } 

//一般不用,因为当你需要对输入进行增加与删改,出错概率高

import java.util.*; 
public class Main { 
    public static void main(String[] args) {
        String str = KB.in.next();
        StringTokenizer sT = new StringTokenizer(str, ",");
        
        while(sT.hasMoreTokens())
        {
            String temp = sT.nextToken();
            System.out.println(temp);
        }
    }
 } 

//循环调用

tips: 为什么可以直接使用KB类? 因为文件夹已经有了KB.class,可以直接使用,在其他java文件可以直接使用,若删除,则不能调用KB.

####

作业1:用第三个API(Token)判断输入彩票号码是否在区间内

(可以翻看java笔记1,里面有代码,进行修改即可)

package caipiao
import java.util.*;
import java.lang.Integer;
public class caipiao
{
    public static void main(String[] args)
    {
        //1:定义
        int[] my = new int [10];
        int[] ran2 = new int [10];
        
        String my_cp = KB.sc.next();//读取一个字符串作为我的彩票号码,每个号码用 , 分开
        StringTokenizer tknzr = new StringTokenizer(my_cp,",");
        
        
        boolean[] number = new boolean [1000];
        boolean[] rannumber = new boolean [1000];
        
        //2:输入
        int cnt = 0;//计数器,当等于7时说明 输入7个我的彩票的号码 均合法
            while(tknzr.hasMoreTokens())
            {
            
            Integer x = Integer.valueOf(tknzr.nextToken()); //取出string的值,转换为整数
            if(cnt ==7) break;
            if(!number[x] && x>=0 && x <=35)
            {
                
                my[cnt] = x;
                number[my[cnt]] = true;//标记为该彩票号码已出现过
                cnt++;//计数器加一
                
            }
            
            else
            {
                System.out.println("输入数字不符合,请重新输入7个彩票号码");
                for(int i = 0;i<cnt;i++) number[my[i]] = false;//把状态重新设置为false
                cnt = 0;//计数器归零
                my_cp = KB.sc.next();//重新输入字符串
                tknzr = new StringTokenizer(my_cp,",");

            }
            }
        
        //3:算法
        
        for(int i = 0; i < 7;i++)
        {
            ran2[i] = (int)(Math.random() * 35 +1);
            if(!rannumber[ran2[i]] && ran2[i] <=35 && ran2[i] >= 1)//满足在区间内,且没有重复
            {
                rannumber[ran2[i]] = true;//标记为该彩票号码已出现过
                
            }
            else
            {
                i--;//否则重新生成随机号码.
            }
            
        }
        
        //4:输出
        
        for(int i = 0;i < 7; i++)
        {
            System.out.printf("%d ",my[i]);
        }
        System.out.println();
        
        for(int i = 0;i < 7; i++)
        {
            System.out.printf("%d ",ran2[i]);
        }
        
        
        //5:判断中奖号码数量
        int num = 0;
        for(int i = 0;i < 7;i++)
        {
            for(int j = 0; j < 7; j++)
            {
            if(my[i] == ran2[j])
            {
                num++;
                break;
            }
            }
        }
        System.out.println();
        System.out.printf("恭喜你中了%d个号码\n",num);
        
        
    }
}
class KB//用于读入
{
    static Scanner sc = new Scanner(System.in);
    
}

####

作业2,银行程序:

1,添加银行雇员类。

2,银行雇员类的四个方法

1: 持有银行顾客数据 2:可以计算银行总存款额 3:可以添加,删除客户,4:可以对客户以余额多少进行排序.

已经完成,先贴上大致代码,具体细节与注释,有空时加.

###

雇员类

class employee
{
    String name;
    String job;
    String pwd;
    int ID;
    
    
    
    
    void getCustomerData(Cust st[])
    {
        System.out.println("请输入你需要获取的顾客的id");
        int ID = KB.sc.nextInt();
        for(int i = 0 ;i<st.length;i++)
        {
            if(ID == st[i].ID)
            {
                System.out.println("成功查找到该用户");
                System.out.println("该用户信息如下: ");
                System.out.println("***\tID: " + st[i].ID);
                System.out.println("***\t姓名: " + st[i].name);
                System.out.println("***\t密码: " + st[i].pwd);
                System.out.println("***\t余额: " + st[i].m);
                break;
            }
        
        }
        
    }
    employee()
    {
    }
    
    employee(String name,String job,int ID,String pwd)
    {
        this.name = name;
        this.job = job;
        this.ID = ID;
        this.pwd = pwd;
    }
    
    void countTotalMoney(Cust st[])
    {
        double sum =0;
        for(int i = 0 ;i<Cust.numbers;i++)
        {
            
            sum += st[i].m;
            
        }
        System.out.println("银行账户总额为:" + sum);
        
    }
    
    void addCustomer(Cust st[])
    {
        System.out.println("请输入添加账户的ID :");
        int id = KB.sc.nextInt();
        System.out.println("请输入添加账户的姓名 :");
        String name = KB.sc.next();
        System.out.println("请输入添加账户的密码 :");
        int pwd = KB.sc.nextInt();
        System.out.println("请输入该账户初始金额 :");
        double m = KB.sc.nextDouble();
        st[Cust.numbers] = new Cust(name,id,pwd,m);
        
    }
    
    void deleteCustomer(Cust st[])
    {
        System.out.println("请输入你所需要删除的用户ID :");
        int id = KB.sc.nextInt();
        for(int i =0;i<Cust.numbers;i++)
        {
            if(id == st[i].ID)
            {
                System.out.println("查找到该用户,是否删除->Y");
                String cmd = KB.sc.next();
                if(cmd.equals("Y"))
                {
                    for(int j = i+1;j < Cust.numbers;j++)//由于没有用到链表存储用户,故通过数组右往左赋值的方式来删除用户
                    {
                         st[j-1] = st[j];
                    }
                    Cust.numbers--;//numbers减1.
                    
                }
                break;
            }
            
        }
        
    }
    
    void sortCustomer(Cust st[])
    {
        //为了不破坏原有的数组结构,故采用一个新数组进行排序
        Cust st2[] = new Cust[100];
        for(int i = 0 ;i < Cust.numbers;i++)
        {
            st2[i] = st[i];
        }
        //写一个简单的冒泡排序算法
        for(int i =0;i < Cust.numbers-1;i++)
        {
            for(int j = 1;j < Cust.numbers-i-1;j++)
            {
                if(st2[j-1].m > st2[j].m)
                {
                    double temp = st2[j-1].m;
                    st2[j-1].m = st2[j].m;
                    st2[j].m = temp;
                    
                }
            }
        }
        //展示排序后的用户数据
        for(int i = 0 ;i < Cust.numbers;i++)
        {
            System.out.print(st2[i].name + " ");
        }
        System.out.println();//换行
    }
    
    void runCustomer(Cust st[])
    {
        System.out.println("请输入操作:");
        System.out.println("****统计银行账户总额\t1****");
        System.out.println("****添加用户\t2****");
        System.out.println("****删除用户\t3****");
        System.out.println("****用户余额排序\t4****");
        System.out.println("****退出\t5****");
        int cmd = KB.sc.nextInt();
        switch(cmd)
        {
            case 1:
                countTotalMoney(st);
                break;
            case 2:
                addCustomer(st);
                break;
            case 3:
                deleteCustomer(st);
                break;
            case 4:
                sortCustomer(st);
                break;
            case 5:
                System.exit(1);
            default:
                break;
        }
    }
    
}

###

完整程序

package customer;

import java.util.Scanner;
/*5:作业2,银行程序:
1,添加银行雇员类。
2,银行雇员类的四个方法
1: 持有银行顾客数据 2:可以计算银行总存款额 3:可以添加,删除客户,4:可以对客户以余额多少进行排序.*/

public class Main
{
    public static void main(String[] args)
    {
        Cust st[] = new Cust[100];
        employee em[] = new employee[100];
        //有了构造函数后可以直接在 new 分配内存后赋值
        em[0] = new employee("kkk","Accountant",111,"123456");
        st[0] = new Cust("张晓红",111,123456,1000);
        st[1] = new Cust("张晓丽",222,123456,10000);
        
        
        boolean flg = true;
        while(flg)
        {
            System.out.println("请选择模式!");     
            System.out.println("***\t1雇员模式***");
            System.out.println("***\t2顾客模式***");
            int cmd = KB.sc.nextInt();
            switch(cmd)
            {
        case 1:
            employeeMenu(em,st);
            break;
        case 2:
            customerMenu(st);
            
            break;
        case 3:
            flg =false;
            System.exit(1);
        default:
            break;
            }
        }
            
        
        
        
        
    }
    public static void customerMenu(Cust st[])
    {
        System.out.println("请输入您的账户!");
        int ID = KB.sc.nextInt();
        boolean find = false;
        for(int i = 0 ;i < Cust.numbers; i++)
        {
            if(ID == st[i].ID)
            {
                find = true;
                System.out.println("请输入密码!");
                int password = KB.sc.nextInt();
                if(password == st[i].pwd)
                {
                    boolean flg = true;
                    System.out.println("登入账户成功!");
                    while(flg)
                    {
                        st[i].run(st);
                        System.out.println("输入_> Y 退出!");
                        String cmd = KB.sc.next();
                        if(cmd.equals("Y"))
                        {
                            flg = false;
                        }
                    }
                }
                
                break;
            }
        }
        if(!find) System.out.println("查无此顾客用户!");
        
    }
    
    public static void employeeMenu(employee em[],Cust st[])
    {
        System.out.println("请输入您的账户!");
        int ID = KB.sc.nextInt();
        boolean find = false;
        for(int i = 0 ;i < em.length; i++)
        {
            if(ID == em[i].ID)
            {
                find = true;
                System.out.println("请输入密码!");
                String password = KB.sc.next();
                if(password.equals(em[i].pwd))
                {
                    boolean flg = true;
                    System.out.println("登入账户成功!");
                    while(flg)
                    {
                        em[i].runCustomer(st);
                        System.out.println("输入_> Y 退出!");
                        String cmd = KB.sc.next();
                        if(cmd.equals("Y"))
                        {
                            flg = false;
                        }
                    }
                }
                
                break;
            }
        }
        if(!find) System.out.println("查无此雇员用户!");
    }
}
class KB//用于输入 
{
    static Scanner sc = new Scanner(System.in);
}
class Cust
{
    int ID;
    double m;
    int pwd;
    String name;
    static int numbers = 0;//记录总账户数量
    //重载构造函数(不需要传递参数)
    Cust()
    {
        numbers++;
    }
    //构造函数,用于初始化
    Cust(String name,int ID, int pwd,double m)
    {
        this.name = name;
        this.ID = ID;
        this.pwd = pwd;
        this.m = m;
        numbers++;
    }
    
    void dM()
    {
        
        System.out.println("请输入要转账的金额!");
        double mo = KB.sc.nextDouble();
        m+=mo;
        System.out.println("存款成功!");
    }
    
    void gM()
    {
        
        System.out.println("请输入需要取出的金额!");
        double mo = KB.sc.nextDouble();
        if(m - mo > 0)
        {
            m-=mo;
            System.out.println("取款成功!");
        }
        else
        {
            System.out.println("取款失败,余额不足!");
        }
        
    }
    
    void print()
    {
        System.out.println("您当前余额为:" + m);
        
    }
    
    void zZ(Cust st[])
    {
        
        System.out.println("请输入您需要转账的对象账户!");
        int ID = KB.sc.nextInt();
        boolean find = false;
        for(int i = 0 ;i < st.length; i++)
        {
            if(st[i].ID == ID)
            {
                find = true;
                System.out.println("请输入您需要转账的金额!");
                double mo = KB.sc.nextDouble();
                if(m - mo > 0)
                {
                    m -= mo;
                    st[i].m += mo;
                    System.out.println("转账成功!");
                }
                else
                {
                    System.out.println("余额不足,转账失败!");
                }
                break;
                
            }
        }
        if(!find)
        {
            System.out.println("查无此用户!");
        }
    }
    
    void run(Cust st[])
    {
        
        
        System.out.println("****存钱\t1****");
        System.out.println("****取钱\t2****");
        System.out.println("****查询\t3****");
        System.out.println("****转账\t4****");
        System.out.println("****退出\t5****");
        
        int cmd = KB.sc.nextInt();
        switch(cmd)
        {
            case 1:
                dM();
                break;
            case 2:
                gM();
                break;
            case 3:
                print();
                break;
            case 4:
                zZ(st);
                break;
            case 5:
                System.exit(1);
            default:
                break;
        }
        
        
        
        
        
    }
}
class employee
{
    String name;
    String job;
    String pwd;
    int ID;
    
    
    
    
    void getCustomerData(Cust st[])
    {
        System.out.println("请输入你需要获取的顾客的id");
        int ID = KB.sc.nextInt();
        for(int i = 0 ;i<st.length;i++)
        {
            if(ID == st[i].ID)
            {
                System.out.println("成功查找到该用户");
                System.out.println("该用户信息如下: ");
                System.out.println("***\tID: " + st[i].ID);
                System.out.println("***\t姓名: " + st[i].name);
                System.out.println("***\t密码: " + st[i].pwd);
                System.out.println("***\t余额: " + st[i].m);
                break;
            }
        
        }
        
    }
    employee()
    {
    }
    
    employee(String name,String job,int ID,String pwd)
    {
        this.name = name;
        this.job = job;
        this.ID = ID;
        this.pwd = pwd;
    }
    
    void countTotalMoney(Cust st[])
    {
        double sum =0;
        for(int i = 0 ;i<Cust.numbers;i++)
        {
            
            sum += st[i].m;
            
        }
        System.out.println("银行账户总额为:" + sum);
        
    }
    
    void addCustomer(Cust st[])
    {
        System.out.println("请输入添加账户的ID :");
        int id = KB.sc.nextInt();
        System.out.println("请输入添加账户的姓名 :");
        String name = KB.sc.next();
        System.out.println("请输入添加账户的密码 :");
        int pwd = KB.sc.nextInt();
        System.out.println("请输入该账户初始金额 :");
        double m = KB.sc.nextDouble();
        st[Cust.numbers] = new Cust(name,id,pwd,m);
        
    }
    
    void deleteCustomer(Cust st[])
    {
        System.out.println("请输入你所需要删除的用户ID :");
        int id = KB.sc.nextInt();
        for(int i =0;i<Cust.numbers;i++)
        {
            if(id == st[i].ID)
            {
                System.out.println("查找到该用户,是否删除->Y");
                String cmd = KB.sc.next();
                if(cmd.equals("Y"))
                {
                    for(int j = i+1;j < Cust.numbers;j++)//由于没有用到链表存储用户,故通过数组右往左赋值的方式来删除用户
                    {
                         st[j-1] = st[j];
                    }
                    Cust.numbers--;//numbers减1.
                    
                }
                break;
            }
            
        }
        
    }
    
    void sortCustomer(Cust st[])
    {
        //为了不破坏原有的数组结构,故采用一个新数组进行排序
        Cust st2[] = new Cust[100];
        for(int i = 0 ;i < Cust.numbers;i++)
        {
            st2[i] = st[i];
        }
        //写一个简单的冒泡排序算法
        for(int i =0;i < Cust.numbers-1;i++)
        {
            for(int j = 1;j < Cust.numbers-i-1;j++)
            {
                if(st2[j-1].m > st2[j].m)
                {
                    double temp = st2[j-1].m;
                    st2[j-1].m = st2[j].m;
                    st2[j].m = temp;
                    
                }
            }
        }
        //展示排序后的用户数据
        for(int i = 0 ;i < Cust.numbers;i++)
        {
            System.out.print(st2[i].name + " ");
        }
        System.out.println();//换行
    }
    
    void runCustomer(Cust st[])
    {
        System.out.println("请输入操作:");
        System.out.println("****统计银行账户总额\t1****");
        System.out.println("****添加用户\t2****");
        System.out.println("****删除用户\t3****");
        System.out.println("****用户余额排序\t4****");
        System.out.println("****退出\t5****");
        int cmd = KB.sc.nextInt();
        switch(cmd)
        {
            case 1:
                countTotalMoney(st);
                break;
            case 2:
                addCustomer(st);
                break;
            case 3:
                deleteCustomer(st);
                break;
            case 4:
                sortCustomer(st);
                break;
            case 5:
                System.exit(1);
            default:
                break;
        }
    }
    
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值