| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 2338 人关注过本帖
标题:纯小白求助......这个java算法应该怎么写!!!!
取消只看楼主 加入收藏
java小白兔
Rank: 1
等 级:新手上路
帖 子:29
专家分:3
注 册:2018-11-7
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
纯小白求助......这个java算法应该怎么写!!!!

图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册


[此贴子已经被作者于2018-11-21 06:43编辑过]

2018-11-12 12:27
java小白兔
Rank: 1
等 级:新手上路
帖 子:29
专家分:3
注 册:2018-11-7
收藏
得分:0 
回复 2楼 幻紫灵心
用栈怎么写呢?原理我懂,就是看表达式的优先级和数字的进栈出栈,具体要怎么写呢?
2018-11-12 17:21
java小白兔
Rank: 1
等 级:新手上路
帖 子:29
专家分:3
注 册:2018-11-7
收藏
得分:0 
回复 3楼 java小白兔
import
import
import java.util.ArrayList;
public class Main{
    public static void main(String[] args)throws Exception{
        //1读取输入的表达式
        InputStreamReader irs = new InputStreamReader(System.in);
        BufferedReader br = new BufferedReader(irs);
        String express = br.readLine();
        
        //2将表达式中的数值分割出来
        String[] valueS = express.split("\\+|-|\\*|/");
        ArrayList<Integer> valueArrayList = new ArrayList<Integer>();
        ArrayList<Integer> valueArrayList1 = new ArrayList<Integer>();
        for(String s: valueS){
            int n = Integer.parseInt(s);
            valueArrayList.add(n);
        }
        //3将表达式中的操作符分割出来
        ArrayList<Character> opsArrayList = new ArrayList<Character>();
        ArrayList<Character> opsArrayList1 = new ArrayList<Character>();
        for(int i =0;i<express.length();i++){
            char ops = express.charAt(i);
            if(ops == '+' || ops == '-' || ops == '*' || ops == '/'){
                opsArrayList.add(ops);
            }
        }
        
        //4循环表达式,将表达式中所以的*或/的式子进行计算
        int index = 0;
   flag:while(index < opsArrayList.size()){//这个while的条件可以一直为true;
            //5找到第一个*或/的位置startIndex。如果没有则跳出循环
            char c = opsArrayList.get(index);
            while( c != '*' && c != '/'){
                index++;
               
                if(index >= opsArrayList.size()){
                    break flag;//break flag 可以跳出两次层循环的。就是跳出flag的位置。表明该表达式中没有*或/。
                }
                c = opsArrayList.get(index);
            }
            int startIndex = index;
            
            //6找到连续几个*或/的最后一个位置endIndex;
            c = opsArrayList.get(startIndex);
            while( c == '*' || c == '/'){
                index++;
                if(index >= opsArrayList.size()){
                    break;//跳出本while循环,表明找到最后一个操作符,进行7的子表达式计算
                }
                c = opsArrayList.get(index);
            }
            int endIndex = index-1;
            
            //7对这个*或/的子表达式进行计算,得出结果sum
            int sum = valueArrayList.get(startIndex);
            for(int i = startIndex;i<= endIndex;i++){
                char cops = opsArrayList.get(i);
                if(cops == '*'){
                    sum *= valueArrayList.get(i+1);
                }else if(cops == '/'){
                    sum = sum / valueArrayList.get(i+1);
                }
            }
            //8删除刚计算的子表达式中的操作数以及操作符。并把结果sum放入第一个操作数的位置startIndex
            for(int i = 1;i<= (endIndex-startIndex)+1;i++){
                opsArrayList.remove(startIndex);
                valueArrayList.remove(startIndex);
            }
            valueArrayList.remove(startIndex);
            valueArrayList.add(startIndex,sum);
        }
        //9将得到的只包含+或-表达式进行计算
        int result = valueArrayList.get(0);
        for(int i=0;i<opsArrayList.size();i++){
            char cops = opsArrayList.get(i);
            if(cops == '+'){
                result += valueArrayList.get(i+1);
            }else if(cops == '-'){
                result -= valueArrayList.get(i+1);
            }
        }
        System.out.println(result);
    }
}
2018-11-13 07:54
java小白兔
Rank: 1
等 级:新手上路
帖 子:29
专家分:3
注 册:2018-11-7
收藏
得分:0 
回复 2楼 幻紫灵心
你能帮我看下我写的这个代码嘛,有点错误
import
import
import java.util.ArrayList;
public class Main{
    public static void main(String[] args)throws Exception{
        //1读取输入的表达式
        InputStreamReader irs = new InputStreamReader(System.in);
        BufferedReader br = new BufferedReader(irs);
        String express = br.readLine();
        
        //2将表达式中的数值分割出来
        String[] valueS = express.split("\\+|-|\\*|/");
        ArrayList<Integer> valueArrayList = new ArrayList<Integer>();
        ArrayList<Integer> valueArrayList1 = new ArrayList<Integer>();
        for(String s: valueS){
            int n = Integer.parseInt(s);
            valueArrayList.add(n);
        }
        //3将表达式中的操作符分割出来
        ArrayList<Character> opsArrayList = new ArrayList<Character>();
        ArrayList<Character> opsArrayList1 = new ArrayList<Character>();
        for(int i =0;i<express.length();i++){
            char ops = express.charAt(i);
            if(ops == '+' || ops == '-' || ops == '*' || ops == '/'){
                opsArrayList.add(ops);
            }
        }
        
        //4循环表达式,将表达式中所以的*或/的式子进行计算
        int index = 0;
   flag:while(index < opsArrayList.size()){//这个while的条件可以一直为true;
            //5找到第一个*或/的位置startIndex。如果没有则跳出循环
            char c = opsArrayList.get(index);
            while( c != '*' && c != '/'){
                index++;
               
                if(index >= opsArrayList.size()){
                    break flag;//break flag 可以跳出两次层循环的。就是跳出flag的位置。表明该表达式中没有*或/。
                }
                c = opsArrayList.get(index);
            }
            int startIndex = index;
            
            //6找到连续几个*或/的最后一个位置endIndex;
            c = opsArrayList.get(startIndex);
            while( c == '*' || c == '/'){
                index++;
                if(index >= opsArrayList.size()){
                    break;//跳出本while循环,表明找到最后一个操作符,进行7的子表达式计算
                }
                c = opsArrayList.get(index);
            }
            int endIndex = index-1;
            
            //7对这个*或/的子表达式进行计算,得出结果sum
            int sum = valueArrayList.get(startIndex);
            for(int i = startIndex;i<= endIndex;i++){
                char cops = opsArrayList.get(i);
                if(cops == '*'){
                    sum *= valueArrayList.get(i+1);
                }else if(cops == '/'){
                    sum = sum / valueArrayList.get(i+1);
                }
            }
            //8删除刚计算的子表达式中的操作数以及操作符。并把结果sum放入第一个操作数的位置startIndex
            for(int i = 1;i<= (endIndex-startIndex)+1;i++){
                opsArrayList.remove(startIndex);
                valueArrayList.remove(startIndex);
            }
            valueArrayList.remove(startIndex);
            valueArrayList.add(startIndex,sum);
        }
        //9将得到的只包含+或-表达式进行计算
        int result = valueArrayList.get(0);
        for(int i=0;i<opsArrayList.size();i++){
            char cops = opsArrayList.get(i);
            if(cops == '+'){
                result += valueArrayList.get(i+1);
            }else if(cops == '-'){
                result -= valueArrayList.get(i+1);
            }
        }
        System.out.println(result);
    }
}
2018-11-13 07:55
java小白兔
Rank: 1
等 级:新手上路
帖 子:29
专家分:3
注 册:2018-11-7
收藏
得分:0 
回复 6楼 zc2546885976
多谢大佬
2018-11-13 16:15
java小白兔
Rank: 1
等 级:新手上路
帖 子:29
专家分:3
注 册:2018-11-7
收藏
得分:0 
回复 7楼 幻紫灵心
多谢,万分感谢
2018-11-13 20:00
快速回复:纯小白求助......这个java算法应该怎么写!!!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020742 second(s), 10 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved