Java面向对象之类的练习(模拟计算器)

目录

方法之间来回调用???

 1.正常调用

 2.内存溢出

知识补充Scanner

现在看两个小程序

1.正常情况下

2.交换顺序后

发生原因

 解决方法

模拟计算器



方法之间来回调用???

 1.正常调用

public class Person {
    public String name;
    public int age;

    public Person() {
        System.out.println("我是人类构造方法");
    }
    public void eat(){
        this.sleep();
        System.out.println("我是人类吃饭方法");
    }
    public void sleep(){
        System.out.println("我是人类睡觉方法");
       // this.eat();
        
    }
}
public class Test {
    public static void main(String[] args){
        Person p = new Person();
        p.eat();
    }
}
"C:\Program Files (x86)\Java\jdk1.7.0_71\bin\java.exe "...
我是人类构造方法
我是人类睡觉方法
我是人类吃饭方法

 2.内存溢出

public class Person {
    public String name;
    public int age;

    public Person() {
        System.out.println("我是人类构造方法");
    }
    public void eat(){
        this.sleep();
        System.out.println("我是人类吃饭方法");
    }
    public void sleep(){
        System.out.println("我是人类睡觉方法");
       // this.eat();
        
    }
}
public class Test {
    public static void main(String[] args){
        Person p = new Person();
        p.eat();
    }
}
"C:\Program Files (x86)\Java\jdk1.7.0_71\bin\java.exe" ...
我是人类睡觉方法
我是人类睡觉方法
我是人类睡觉方法
我是人类睡觉方法
我是人类睡觉方法
我是人类睡觉方法
我是人类睡觉方法
我是人类睡觉方法
Exception in thread "main" java.lang.StackOverflowError
	at sun.nio.cs.UTF_8.updatePositions(UTF_8.java:77)
	at sun.nio.cs.UTF_8$Encoder.encodeArrayLoop(UTF_8.java:564)
	at sun.nio.cs.UTF_8$Encoder.encodeLoop(UTF_8.java:619)
	at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:561)

知识补充Scanner

现在看两个小程序

1.正常情况下

import java.util.Scanner;
public class TestScanner {
    public static void main(String[] args){
        //利用数组实现用户的登录
        //1.小数组来充当数据库
        //2.利用Scanner让用户输入
        Scanner input = new Scanner(System.in);
        System.out.println("请输入账号:");
        String name = input.nextLine(); //阻塞效果
        //input这个小人在消息队列内等着读取
        System.out.println("请输入密码:");
        int password = input.nextInt(); //阻塞效果

        //3.比较
        System.out.println("接收到了账号名:" + name);
        System.out.println("接收到了密码:" + password);

    }
}
"C:\Program Files (x86)\Java\jdk1.7.0_71\bin\java.exe" ...
请输入账号:
玫瑰
请输入密码:
123
接收到了账号名:玫瑰
接收到了密码:123

2.交换顺序后

import java.util.Scanner;
public class TestScanner {
    public static void main(String[] args){
        //利用数组实现用户的登录
        //1.小数组来充当数据库
        //2.利用Scanner让用户输入
        Scanner input = new Scanner(System.in);
        //input这个小人在消息队列内等着读取
        System.out.println("请输入密码:");
        int password = input.nextInt(); //阻塞效果
        System.out.println("请输入账号:");
        String name = input.nextLine(); //阻塞效果
        

        //3.比较
        System.out.println("接收到了账号名:" + name);
        System.out.println("接收到了密码:" + password);

    }
}
"C:\Program Files (x86)\Java\jdk1.7.0_71\bin\java.exe" ...
请输入密码:
123
请输入账号:
接收到了账号名:
接收到了密码:123

发生原因

 解决方法

最好用第三个方法

import java.util.Scanner;

public class TestScanner {
    public static void main(String[] args){
        //利用数组实现用户的登录
        //1.小数组来充当数据库
        //2.利用Scanner让用户输入
        Scanner input = new Scanner(System.in);
        //input这个小人在消息队列内等着读取
        System.out.println("请输入密码:");
        String password = input.nextLine(); //阻塞效果
        //1.利用nextLine方法读取回车符
        //input.nextLine();
        //2.利用next方法读取字符串 next与nextInt不一样 不读取回车符
        //3.将账号和密码都统一用nextLine来读取
        //  出现问题:
        //  String--->int
        //  int-->String 5+"5"
        //  数据类型转化问题 前提同种大数据类型一致 基本-基本 引用-引用
        //  基本<-包装类->引用 int-Integer char-Character byte-Byte float-Float
        int value = Integer.parseInt(password);
        System.out.println("请输入账号:");
        String name = input.nextLine(); //阻塞效果

        //3.比较
        System.out.println("接收到了账号名:" + name);
        System.out.println("接收到了密码:" + value);
        System.out.println(5+5+"5"+5+5);

    }
}
"C:\Program Files (x86)\Java\jdk1.7.0_71\bin\java.exe" ...
请输入密码:
123
请输入账号:
哈哈哈
接收到了账号名:哈哈哈
接收到了密码:123
10555

模拟计算器

import java.util.Scanner;

public class Calculator {

    //设计一个方法 加法运算 是否需要提供条件 条件 两个元素 是否需要结果 计算结果
    public float add(float a,float b){
        return a+b;
    }
    //设计一个方法 减法运算
    public float substact(float a,float b){
        return a-b;
    }
    //设计一个方法 乘法运算
    public float multiply(float a,float b){
        return a*b;
    }
    //设计一个方法 除法运算
    public float divide(float a,float b){
        return a/b;
    }
    //设计一个方法 控制计算器计算流程
    public void calculate() {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入第一个数字:");
        String one = input.nextLine();
        //String -->float Float
        float a = Float.parseFloat(one);//可能会产生NumberFormatException
        //需要一个死循环 while(true){}    for(:;){}
        while (true) {
            System.out.println("请输入符号:");
            String symbol = input.nextLine(); // + - * /
            if(symbol.equals("=")){
                System.out.println("执行完毕");
                break;
            }
            if(!(symbol.equals("+")||symbol.equals("-")||symbol.equals("*")||symbol.equals("/"))){
                System.out.println("输入符号有误,只能是[ = - * /]其中一个");
                continue;
            }

            System.out.println("请输入第二个数字:");
            String two = input.nextLine();
            //String -->float Float
            float b = Float.parseFloat(two);
            switch (symbol) {
                case "+":
                    a = this.add(a, b);
                    break;
                case "-":
                    a = this.substact(a, b);
                    break;
                case "*":
                    a = this.multiply(a, b);
                    break;
                case "/":
                    a = this.divide(a, b);
                    break;

            }
            System.out.println(a);
        }
    }
}
public class Test {
    public static void main(String[] args){

        Calculator c = new Calculator();
        c.calculate();
    }
}
"C:\Program Files (x86)\Java\jdk1.7.0_71\bin\java.exe" ...
请输入第一个数字:
1
请输入符号:
+
请输入第二个数字:
2
3.0
请输入符号:
&
输入符号有误,只能是[ = - * /]其中一个
请输入符号:
/
请输入第二个数字:
5
0.6
请输入符号:
=
执行完毕

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值