表达式求值

今天上课,老师教了小易怎么计算加法和乘法,乘法的优先级大于加法,但是如果一个运算加了括号,那么它的优先级是最高的。例如:
1+2 * 3=7
1 * (2+3)=5
1* 2 * 3=6
(1+2) * 3=9
现在小易希望你帮他计算给定3个数a,b,c,在它们中间添加"+", “", “(”, “)“符号,能够获得的最大值。
1+2 * 3=7
1 * (2+3)=5
1 * 2 * 3=6
(1+2) * 3=9
现在小易希望你帮他计算给定3个数a,b,c,在它们中间添加”+”, "
”, “(”, ")"符号,能够获得的最大值。
输入描述:
一行三个数a,b,c (1 <= a, b, c <= 10)
输出描述:
能够获得的最大值
示例1
输入
1 2 3
输出
9

解1:

public class MaxNum {
    public static void Max(){
        Scanner scanner = new Scanner(System.in);

        int a = scanner.nextInt();
        int b = scanner.nextInt();
        int c = scanner.nextInt();

        while (a >= 1 && a <=10 && b >= 1 && b <=10 && c >= 1 && c <=10) {
            int max1 = Math.max(a + b * c, a * (b + c));
            int max2 = Math.max(a * b * c, (a + b) * c);
            int max = Math.max(max1, max2);
            System.out.println(max);
            break;
        }
    }
    
    public static void main(String[] args) {
        Max();
    }

}

解2:

import java.io.*;
import java.util.Arrays;

public class Main{
    public static void main(String[] args) throws Exception{
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        String[] str = bf.readLine().split(" ");
        int a = Integer.parseInt(str[0]);
        int b = Integer.parseInt(str[1]);
        int c = Integer.parseInt(str[2]);

        int x1 = a+b+c;
        int x2 = a*b*c;
        int x3 = a+b*c;
        int x4 = (a+b)*c;
        int x5 = a*b+c;
        int x6 = a*(b+c);
        int[] x = {x1,x2,x3,x4,x5,x6};
        Arrays.sort(x);
        System.out.println(x[5]);
    }
}

总结:

BufferedReaderBufferedWriter简介
为了提高字符流读写的效率,引入了缓冲机制,进行字符批量的读写,提高了单个字符读写的效率。BufferedReader用于加快读取字符的速度,BufferedWriter用于加快写入的速度

BufferedReader和BufferedWriter类各拥有8192个字符的缓冲区。当BufferedReader在读取文本文件时,会先尽量从文件中读入字符数据并放满缓冲区,而之后若使用read()方法,会先从缓冲区中进行读取。如果缓冲区数据不足,才会再从文件中读取,使用BufferedWriter时,写入的数据并不会先输出到目的地,而是先存储至缓冲区中。如果缓冲区中的数据满了,才会一次对目的地进行写出。

BufferedReader
BufferedReader是为了提供读的效率而设计的一个包装类,它可以包装字符流。可以从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。

InputStreamReader类是从字节流到字符流的桥接器:它使用指定的字符集读取字节并将它们解码为字符。 它使用的字符集可以通过名称指定,也可以明确指定,或者可以接受平台的默认字符集。每次调用一个InputStreamReader的read()方法都可能导致从底层字节输入流中读取一个或多个字节。 为了实现字节到字符的有效转换,可以从基础流中提取比满足当前读取操作所需的更多字节。为了获得最高效率,请考虑在BufferedReader中包装InputStreamReader

其继承Reader类

public class InputStreamReader extends Reader {}
1)字节流到字符流的桥梁怎么理解?

1、计算机存储的单位是字节,如尽管txt文本中有中文汉字这样的字符,但是对计算机而言,其是字节形式存在的

2、字节流读取是单字节读取,但是不同字符集解码成字符需要不通过个数,因此字节流读取会报错

3、 那么就需要一个流把字节流读取的字节进行缓冲而后在通过字符集解码成字符返回,因而形式上看是字符流

4、InputStreamReader流就是起这个作用,实现从字节流到字符流的转换

2)使用指定的字符集读取字节并将它们解码为字符怎么理解?

  字节本质是8个二进制位,且不同的字符集对同一字节解码后的字符结果是不同的,因此在读取字符时务必要指定合适的字符集,否则读取的内容会产生乱码

3)它使用的字符集可以通过名称指定,也可以明确指定,或者可以接受平台的默认字符集怎么理解?

  意味着InputStreamReader类有多个方法或者多个构造方法来设置字符集

4)每次调用一个InputStreamReader的read()方法都可能导致从底层字节输入流中读取一个或多个字节怎么理解?

  read()方法会尝试尽量冲底层字节流中读取2个字符到字符缓冲区中,注意这里是尽量,若遇到文件最后字符,则就只能读取到1个字符,因此每次read()方法读取的字节数是不定的
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值