问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

求JAVA代码?

发布网友 发布时间:2022-05-14 07:06

我来回答

2个回答

热心网友 时间:2023-10-09 11:58

/*
Simple calculator
input from cin,output to cout
简单计算器:支持加减乘除取余、正负数、括号

主要实现:

1.两个类Token和Token_stream:将输入表达式分为单词如1.82,+,(,存储在Token类对象中,Token_stream类实现能缓存1个单词的流

2.三个实现语法的函数expression(),term(),primary():实现表达式计算顺序

3.计算流程函数calculate():用循环实现任意次数表达式计算,直到出错或正常退出

The grammar is:

Statement:
Expression
Print
Quit
Print:
;
Quit:
q
Expression
Term
Expression + Term
Expression - Term
Term:
primary
Term * primary
Term / primary
Term % primary
Primary:
Num
( Expression )
+ primary
- primary
Num:
floating-point-literal
*/

#include <iostream>
using namespace std;

class Token;
class Token_stream;

void keep_window_open();
double expression();
double term();
double primary();
void welcome();
void calculate();

const char number = '8';
const char print = ';';
const char quit = 'e';
const string prompt = ">";
const string myresult = "=";

class Token{
public:
char m_kind;
double m_value;
Token(char kind = '\0', double value = 0)
:m_kind(kind)
,m_value(value)
{}
};

class Token_stream{
public:
Token get();
void putback(Token t);
Token_stream()
:m_full(false)
,m_buffer('\0', 0)
{}
private:
bool m_full;
Token m_buffer;
};
//定义能够缓存1个单词的流ts
Token_stream ts;

Token Token_stream::get()
{
//缓冲区有单词,从缓冲区中取单词
if(true == m_full){
m_full = false;
return m_buffer;
}
//缓冲区没有单词,从输入流中取单词
char ch;
cin>>ch;
switch(ch){
case '+':
case '-':
case '*':
case '/':
case '%':
case '(':
case ')':
case print:
case quit:
return Token(ch);
case '.':
case '0':case '1':case '2':case '3':case '4':
case '5':case '6':case '7':case '8':case '9':
{
cin.putback(ch);
double val;
cin>>val;
return Token(number, val);
}
default:
{
cout<<"err input!"<<endl;
keep_window_open();
}
}
}

void Token_stream::putback(Token t)
{
if(true == m_full){
cout<<"err: m_buffer is full."<<endl;
keep_window_open();
return;
}
m_full = true;
m_buffer = t;
}

void keep_window_open()
{
char ch;
fflush(stdin);
cin>>ch;
exit(EXIT_FAILURE);
}

//处理+ - 加、减运算
double expression()
{
double left = term();
Token t = ts.get();
while(true){
switch(t.m_kind){
case '+':
left += term();
t = ts.get();
break;
case '-':
left -= term();
t = ts.get();
break;
default:
ts.putback(t);
return left;
}
}
}

//处理* / % 乘、除、取余运算
double term()
{
double left = primary();
Token t = ts.get();
while(true){
switch(t.m_kind){
case '*':
left *= primary();
t = ts.get();
break;
case '/':
{
double d = primary();
if(0 == d){
cout<<"divide into zero"<<endl;
keep_window_open();
}
left /= d;
t = ts.get();
break;
}
case '%':
{
double d = primary();
int i1 = int(left);
int i2 = int(d);
if(i1 != left){
cout<<"left operand not int"<<endl;
keep_window_open();
}
if(i2 != d){
cout<<"right operand not int"<<endl;
keep_window_open();
}
if(i2 == 0){
cout<<"% divide into 0"<<endl;

}
left = i1 % i2;
t = ts.get();
break;
}
default:
ts.putback(t);
return left;
}
}
}

//处理()- + 括号、正、负运算
double primary()
{
Token t = ts.get();
switch(t.m_kind){
case number:
return t.m_value;
case '(':
double d = expression();
t = ts.get();
if(')' != t.m_kind){
cout<<"expected ')'"<<endl;
keep_window_open();
}
return d;
case '-':
return -primary();
case '+':
return +primary();
default:
cout<<"expected primary!"<<endl;
keep_window_open();
}
}

void calculate()
{
while(cin){
cout<<prompt;
Token t = ts.get();
while(prinwww.scxhdzs.com#kind)t = ts.get();
if(quiwww.scxhdzs.com#kind)return;
else
ts.putback(t);
cout<<myresult<<expression()<<endl;
}
}

void welcome()
{
cout<<"Welcome to our simple calculator."<<endl
<<"-----------------------------"<<endl
<<"floating-point numbers"<<endl
<<"operator: '+' '-' '*' '/' '%'"<<endl
<<"negative: '-'"<<endl
<<"positive: '+'"<<endl
<<"end of expression: ';'"<<endl
<<"quit: 'e'"<<endl
<<"-----------------------------"<<endl;
}

int main()
{
welcome();
calculate();
cout<<"See you."<<endl;
keep_window_open();
return 0;
}

热心网友 时间:2023-10-09 11:58

你可以用java调用js 代码, 然后js中有eval('表达式'), 这样就可以帮你运行任何数据表达式了
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
用手柄玩实况足球2012, 实况足球12如何进行手柄设置,以及窗口模式的设置? 带娃去感受乡村的夏天,这53条乡村游线要收藏好 一般签名用什么笔 怎么去追女孩的技巧 清朝有多少汉人被封王 《水滴石穿》告诉我们什么道理 重庆有哪些批发市场 重庆有哪些大型市场 重庆最大零食批发市场 罗麦公司现在发展怎么样呢,是和普通人运作吗?? java Scanner cin=new Scanner(System.in);这段代码的(System.in)是什么意思? java编程:用非递归调用的方法解决Fibonacci数列,求Fibonacci数列的第四十项 操作系统课程设计:如何用c或c++或java模拟dos文件的建立与使用? 初学Java,请问这段代码哪里错了? 我想用bat运行java程序,程序需要标准输入,我想在bat中设定它的标准输入值,不知道该怎么做 c语言中输入函数是scanf C++是cin 那么java是什么? 请问java高手。从键盘输入一个数的语句是什么?c++中是cin&gt;&gt;n;java中有哪些语句能实现? 请问用Java怎么从键盘输入?? 比如C语言用scanf C++用cin 那java用哪种呢?? java中有关cin.hasNext();求高手!! JAVA里面对应C++里面 cin&gt;&gt;x 的句子是? java中有输入吗???像c++中的cin一样 c++里面的cin在JAVA语言里是什么?JAVA怎么用? 华为游戏中心怎么升l3 这段java代码中的cin是什么意思? 还有刚开始不应该像图一上那样打吗? xrv家用选哪个配置好 海口市和三亚市哪里有章鱼小丸子原材料批发 河北邯郸哪里有卖海鲜市场,龙虾,八爪鱼等,谢谢 91助手把我的游戏文件类型改成了“91助手NPK安装器怎么改回来 简述简历的定义 请问在调试java出现有关的问题 帮我取消下短信通知 下载短信软件到手机? 手机能下载短信吗? 漏夏全部攻略 我想找些漏夏的图,有什么地方有的么 要很多 漏夏汉化黑屏,但是还有声音,而且游戏还在运行 消毒液上百分之99.999杀菌与百分之99杀菌区别是啥? 99.999保留两位小数是() 杀菌率99.99和99.999的区别? 男士项链上面标志99.999%是什么意思 杀菌率99.999%是什么概念? 99.999%铁在冷的浓硫酸中可以钝化 翅的读音 默默无闻的环卫工人日记250字 清洁工人写人日记九百字 工程师和工人日记30字 韵和翅都是整体认读音节吗 css html 高手请进 日记一千字左右在工地做工
  • 焦点

最新推荐

猜你喜欢

热门推荐