bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

逆波蘭java代碼 逆波蘭式代碼

用Java寫的計算器的程序!不需要界面!

用java寫的計算器的程序,主要是通過控制臺輸入,主要方法是使用scanner類來接收用戶從鍵盤輸入的一個算式,通過分解算式,存入兩個字符串,判斷中間的的符號,進行相應計算,如下代碼:

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:域名注冊雅安服務器托管、營銷軟件、網站建設、桑日網站維護、網站推廣。

System.out.println("-----------------------------------");

System.out.println("請輸入一個算術表達式,如:45*23");

Scanner?in?=?new?Scanner(System.in);//接收用戶從鍵盤輸入的字符

String?str?=?in.nextLine();

StringBuffer?buffer?=?new?StringBuffer();//保存左側的數(shù)字

StringBuffer?buffer1?=?new?StringBuffer();//保存右側的數(shù)字

char?t?=?'?';//保存運算符

for?(int?i?=?0;?i??str.length();?i++)?{

if?(str.charAt(i)?==?'+'?||?str.charAt(i)?==?'-'

||?str.charAt(i)?==?'*'?||?str.charAt(i)?==?'/')?{

t?=?str.charAt(i);//識別是什么運算符

for?(int?j?=?i?+?1;?j??str.length();?j++)?{

buffer1.append(str.charAt(j));

}

break;

}?else?{

buffer.append(str.charAt(i));

}

}

String?c?=?buffer.toString();

String?d?=?buffer1.toString();

double?a?=?Double.parseDouble(c);

double?b?=?Double.parseDouble(d);

double?sum?=?0;

if?(t?==?'+')?{

sum?=?a?+?b;

}

if?(t?==?'-')?{

sum?=?a?-?b;

}

if?(t?==?'*')?{

sum?=?a?*?b;

}

if?(t?==?'/')?{

sum?=?a?/?b;

}

System.out.println("程序運算...");

System.out.println(c+t+d+"="+sum);

System.out.print("-----------------------------------");

運行結果如下:

Java計算字符串中的數(shù)學表達式的值算法怎么寫?

代碼網上很多,只說說算法吧

12+8/4-5+(3-4)

把這樣的表達式拆成:(操作數(shù))(操作符) 、

12+

8/

4-

5+(

3-

4)

(術語叫做逆波蘭式)

默認的計算順序是從左往右,記為left。另設從右往左,記為right

設計Element類,具有 操作數(shù) operant, 操作符operator, 操作順序 order三個屬性

用兩個先進后出的棧結構StackElement a,b;

一開始所有的Element都在a中,逐個彈出計算合并值,

當遇到乘、除、括號時計算順序改變成right,把當前結果放到b中暫存。

直到再次遇到加、減、)右括號時,意味計算順序復位成left,先把b中的暫存結果全部合并后,再繼續(xù)算a中的剩余數(shù)據(jù)

最后合并成一個結果值。

表達式求值 逆波蘭表達式算法 java版

表達式求值 逆波蘭表達式算法 如下:

import java.util.ArrayList;

import java.util.List;

public class MyStack {

private ListString l;

private int size;

public String top;

public MyStack() {

l = new ArrayListString();

size = 0;

top = null;

}

public int size() {

return size;

}

public void push(String s) {

l.add(s);

top = s;

size++;

}

public String pop() {

String s = l.get(size - 1);

l.remove(size - 1);

size--;

top = size == 0 ? null : l.get(size - 1);

return s;

}

}

import java.util.ArrayList;

import java.util.List;

public class Nbl {

private static MyStack ms1 = new MyStack();//生成逆波蘭表達式的棧

private static MyStack ms2 = new MyStack();//運算棧

/**

* 將字符串轉換為中序表達式

*/

public static ListString zb(String s) {

ListString ls = new ArrayListString();//存儲中序表達式

int i = 0;

String str;

char c;

do {

if ((c = s.charAt(i)) 48 || (c = s.charAt(i)) 57) {

ls.add("" + c);

i++;

} else {

str = "";

while (i s.length() (c = s.charAt(i)) = 48

(c = s.charAt(i)) = 57) {

str += c;

i++;

}

ls.add(str);

}

} while (i s.length());

return ls;

}

/**

* 將中序表達式轉換為逆波蘭表達式

*/

public static ListString parse(ListString ls) {

ListString lss = new ArrayListString();

for (String ss : ls) {

if (ss.matches("\d+")) {

lss.add(ss);

} else if (ss.equals("(")) {

ms1.push(ss);

} else if (ss.equals(")")) {

while (!ms1.top.equals("(")) {

lss.add(ms1.pop());

}

ms1.pop();

} else {

while (ms1.size() != 0 getValue(ms1.top) = getValue(ss)) {

lss.add(ms1.pop());

}

ms1.push(ss);

}

}

while (ms1.size() != 0) {

lss.add(ms1.pop());

}

return lss;

}

/**

* 對逆波蘭表達式進行求值

*/

public static int jisuan(ListString ls) {

for (String s : ls) {

if (s.matches("\d+")) {

ms2.push(s);

} else {

int b = Integer.parseInt(ms2.pop());

int a = Integer.parseInt(ms2.pop());

if (s.equals("+")) {

a = a + b;

} else if (s.equals("-")) {

a = a - b;

} else if (s.equals("*")) {

a = a * b;

} else if (s.equals("\")) {

a = a / b;

}

ms2.push("" + a);

}

}

return Integer.parseInt(ms2.pop());

}

/**

* 獲取運算符優(yōu)先級

* +,-為1 *,/為2 ()為0

*/

public static int getValue(String s) {

if (s.equals("+")) {

return 1;

} else if (s.equals("-")) {

return 1;

} else if (s.equals("*")) {

return 2;

} else if (s.equals("\")) {

return 2;

}

return 0;

}

public static void main(String[] args) {

System.out.println(jisuan(parse(zb("0-8+((1+2)*4)-3+(2*7-2+2)"))));

}

}

java :轉變?yōu)槟娌ㄌm表示式的代碼報錯:堆棧溢出,怎么解決?

while(Character.isDigit(chars[i])||chars[i]=='.') {

s.append(chars[i]);

}

這一段是死循環(huán)。。stack一直追加參數(shù),所以溢出了

java 關于逆波蘭表達式的兩個題

import java.util.Stack;

/**

* @author wengsh

* @date 2010-6-3 用 輸入 (6+5)*(5+5) 測試一下

*/

public class MyDemo {

public static void main(String[] a) {

StackCharacter stack = new StackCharacter();

StringBuffer sb = new StringBuffer();

if (a.length 1) {

System.out.println("參數(shù)長度不夠");

} else {

String s = a[0].trim();

char[] c = s.toCharArray();

try {

for (int i = 0; i c.length; i++) {

int priority = getPriority(c[i]);

if (priority == -1) { // 如果是數(shù)字

sb.append(c[i]); // 輸出數(shù)字或都字母

} else {

if (stack.isEmpty()) {// 當棧為空時

stack.push(c[i]); // 把字符壓入棧

} else {// 當棧為不空時

if (priority == -2) { // 如果是 ')'

while (!stack.isEmpty()

getPriority(stack.peek()) != 8) {

sb.append(stack.pop());// 把'('之上的字符彈出棧并輸出

}

stack.pop(); // 棧彈出'('

} else {

// 當要壓入棧的字符的優(yōu)先級小于 等于棧頂字符的優(yōu)先級且棧頂字符不為'('時

while (!stack.isEmpty()

priority = getPriority(stack.peek())

getPriority(stack.peek()) != 8) {

sb.append(stack.pop()); // 彈出棧頂字符并輸出

}

stack.push(c[i]);// 將此時的字符壓入棧頂

}

}

}

}

// 讀到輸入末尾

while (!stack.isEmpty()) {

sb.append(stack.pop()); // 彈出棧中所有元素并輸出

}

System.out.println(sb); // 結果 65+55+*

System.out.println(calstack(sb.toString()));//結果 110.0

} catch (Exception e) {

e.printStackTrace();

}

}

}

/**

* 獲得字符串優(yōu)先級如果字符不在給定的范圍內,則拋出異常,數(shù)字和字母的優(yōu)先級最低

*

* @param c

* @return

* @throws Exception

*/

public static int getPriority(char c) throws Exception {

int priority = -1;

if (Character.isDigit(c)) {

priority = -1;

} else if (Character.isLetter(c)) {

priority = 0;

} else {

if (c == '(') {

priority = 8;

} else if (c == '*' || c == '/') {

priority = 5;

} else if (c == '+' || c == '-') {

priority = 4;

} else if (c == ')') {

priority = -2;

} else {

throw new Exception("無法解析的前序表達式: " + c);

}

}

return priority;

}

/**

* 計算棧結果

* 6+5*8

* @param s

* @return

*/

public static float calstack(String s) {

StackFloat stack = new StackFloat();

char[] c = s.toCharArray();

try {

for (int i = 0; i c.length; i++) {

int priority = getPriority(c[i]);

if (priority == -1) {

stack.push(new Float(Character.digit(c[i], 10)));

} else {

stack.push(cal(stack.pop(), stack.pop(), c[i]));

}

}

} catch (Exception e) {

e.printStackTrace();

}

return stack.pop();

}

/**

* a b 運算

* @param a

* @param b

* @param opertor

* @return

*/

public static float cal(float a, float b, char opertor) {

float r = 0;

switch (opertor) {

case '+':

r = a + b;

break;

case '-':

r = a - b;

break;

case '*':

r = a * b;

break;

case '/':

r = a / b;

break;

}

return r;

}

}

怎樣用JAVA寫出逆波蘭表達式求值部分的源代碼(提供代碼框架)

下面的代碼是用來計算表達式的,看看是不是你要的

public class OPNode {

char op;// 運算符號

int level;// 優(yōu)先級

//設置優(yōu)先級

public OPNode(String op) {

this.op = op.charAt(0);

if (op.equals("+") || op.equals("-")) {

this.level = 1;

} else if (op.equals("*") || op.equals("/")) {

this.level = 2;

} else if (op.equals("(")) {

this.level = -3;

} else {

this.level = -1;

}

}

}

//主類

import java.util.Deque;

import java.util.LinkedList;

import java.util.List;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class OPText {

public static void main(String[] args) {

String expression = "2+2+(8-2)/3";// 要計算的表達式

List list = new LinkedList();

//正則式

Pattern entryOfExpression = Pattern

.compile("[0-9]+(\\.[0-9]+)?|\\(|\\)|\\+|-|\\*|/");

Deque stack = new LinkedList();//棧

Matcher m = entryOfExpression.matcher(expression);

while (m.find()) {

//提取語素

String nodeString = expression.substring(m.start(), m.end());

if (nodeString.matches("[0-9].*")) {

list.add(Double.valueOf(nodeString));//如果是數(shù)字直接送入列表

} else {

OPNode opn = new OPNode(nodeString);//如果是運算符

int peekLevel = (stack.peek() == null) ? 0 : ((OPNode) stack

.peek()).level;

if (opn.level =peekLevel) {

stack.push(opn);//新的運算符比舊的優(yōu)先級別高則入棧

} else {

if (opn.level == -1) {

OPNode temp = (OPNode) stack.pop();

while (temp.level != -3) {//如果為"("則一直出棧一直到")"

list.add(temp);

System.out.println(nodeString);

temp = (OPNode) stack.pop();

}

} else if (opn.level == -3) {

stack.push(opn);

} else {//如果新運算符比棧頂運算符底則一直出棧

OPNode temp = (OPNode) stack.pop();

while (temp.level opn.level) {

list.add(temp);

if (stack.isEmpty()) {

break;

}

temp = (OPNode) stack.pop();

}

stack.push(opn);

}

}

}

}

OPNode temp = null;

while (!stack.isEmpty()) {

temp = (OPNode) stack.pop();

list.add(temp);

}//后續(xù)表達式計算

stack.clear();

for (Object o : list) {

if (o instanceof Double) {

stack.push(o);//為數(shù)字入棧

} else {

double op2 = ((Double) stack.pop()).doubleValue();

double op1 = ((Double) stack.pop()).doubleValue();

switch (((OPNode) o).op) {

case '+':

stack.push(op1 + op2);

break;

case '-':

stack.push(op1 - op2);

break;

case '*':

stack.push(op1 * op2);

break;

case '/':

stack.push(op1 / op2);

break;

}

}

}

System.out.println("結果為:" + stack.pop());

}

}

呃,太晚了,沒心思去改了

明天再說

分享題目:逆波蘭java代碼 逆波蘭式代碼
轉載來源:http://vcdvsql.cn/article16/hehhgg.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站策劃定制開發(fā)ChatGPT電子商務云服務器App設計

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

h5響應式網站建設