软件工程第二次作业

github

 https://github.com/lcxyj1231

博客地址 https://www.cnblogs.com/lcxyjst/
学号后五位 61227
作业地址 https://www.cnblogs.com/lcxyjst/p/11565202.html

这次的作业让我很伤脑筋。先前以为很简单,拖到最后一天再做,最后发现我高估自己了:

写代码花了不到一个小时,弄GitHub却搞了4个多小时。。。

 

 下面是我的一些问题:

1.我下载好了Git后发现我的Git bash here 用不了,就是要报错

《fatal: destination path '.' already exists and is not an empty directory. 》

最后喊了大三学帮忙还是弄不起,再加上我不会c#,瞬间崩溃。

 

解决方法:最后我放弃了vs,使用idea去管理Git,java我也比较熟练。以下是我的connection截的图:

 

 

 

 

 

 

**** 用idea去管理Git真的很方便


2.我从idea直接将Git上的项目弄过来没法用:

报错信息:

《IDEA 'Error:java: 无效的源发行版: 12' 解决方案》

解决方法:最后百度知道,原来从Git上弄过来的项目还没有配置默认的jdk和out路径,另外最重要的是Mark directory as选项不正确,所以不能按正常平时新建的项目一样运行

截图:

 

 

 ***我也通过这次机会更加熟悉了idea的强大配置

 3.代码的问题,我的代码中间出了一些小差错,因为我使用的是边写边改的模型。。。

每次运行结果都会报异常。(代码参考了一些博客,但是最后还是自己完成的)

解决:最后我判断了一下0才解决,为了让除法运算能够整除,我用Hashset储存了除号上一个数的因子,除号下一个数将从因子集合中挑选:

public static int getset(int last){
        Set<Integer> set=new HashSet<>();
        for(int i=1;i<=last;i++){
            if(last%i==0)
                set.add(i);
        }
        int m= (int) (Math.random() * set.size())+1;
        for(int q:set){
           m--;
           if(m==0)return q;
        }
        return 1;
    }

4.最艰难的时刻到了,我不会上传,看了几个教程还是不会,于是我请教了助教(侯肖*)学长,终于我发现了自己的错误。

错误:我的代码上传到了另外新建的仓库,后来才知道原来代码必须上传到自己克隆过来的那个repositories,不然无法pull  request。。。

自己被自己蠢哭。。。

解决方法:没啥办法,直接返工。

上传截图

 

 

总结:总的来说,这次作业我完成的有点糟糕,被GitHub玩弄于鼓掌,还好我是计科院团队的人(学长资源比较丰富),很多学长给我了建议。其实几个小时的忙活,我也有很多收获,我会使用一些GitHub的基本功能了,以前就是咋学也看不懂(可能是因为英文) 我也学会了用idea去操作Git和GitHub。不得不说idea真的很强大。。但是我还是用不来(吐血)

 

以下是我的全部代码:

 

 

package src.mysido;

import com.sun.javafx.css.CalculatedValue;
import sun.applet.Main;

import java.io.*;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class fourprogram {
    private static String[] op = { "+", "-", "*", "/" };
    public static void main(String[] args) {
        int n;
        Scanner sc=new Scanner(System.in);
        n=sc.nextInt();

        BufferedWriter bw=null;
        File f=new File("E:\\result.txt");
        if(!f.exists()) {
            try {
                f.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        try {
            bw = new BufferedWriter(new FileWriter(f));
        }  catch (IOException e) {
            e.printStackTrace();
        }
        for(int i=0;i<n;i++){
            String myneed=MakeFormula();
            int p= solve.Calcula(myneed);
            myneed+=p;
            System.out.println(myneed);
            try {
                bw.write(myneed);
                bw.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        try {
            bw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static int getset(int last){
        Set<Integer> set=new HashSet<>();
        for(int i=1;i<=last;i++){
            if(last%i==0)
                set.add(i);
        }
        int m= (int) (Math.random() * set.size())+1;
        for(int q:set){
           m--;
           if(m==0)return q;
        }
        return 1;
    }
    public static String MakeFormula(){

        StringBuilder build = new StringBuilder();

        int count = (int) (Math.random() * 2) + 1;// generate random count

        int start = 0;

        int number1 = (int) (Math.random() * 99) + 1;

        build.append(number1);
        int last=number1;
        while (start <= count){

            int operation = (int) (Math.random() * 4); // generate operator
            int number2 = (int) (Math.random() * 99) + 1;
            if(operation==3){
                if (last%number2!=0){
                    number2 = getset(last);
                }
            }
            last=number2;
            build.append(op[operation]).append(number2);
            start ++;
        }
        build.append('=');
        return build.toString();
    }
}


package src.mysido;
import java.util.HashMap;
import java.util.Map;
import java.util.Stack;

public class solve {
    static Map<String, Integer> OPT_PRIORITY_MAP = new HashMap<String, Integer>() {
        private static final long serialVersionUID = 6968472606692771458L;
        {
            put("+", 2);
            put("-", 2);
            put("*", 3);
            put("/", 3);
            put("=", -1);
        }
    };
    public static int getPriority(String opt1, String opt2) {
        int priority = OPT_PRIORITY_MAP.get(opt2) - OPT_PRIORITY_MAP.get(opt1);
        return priority;
    }
    public static void compareAndCalc(Stack<String> optStack, Stack<Integer> numStack,
                                      String curOpt) {
        // 比较当前运算符和栈顶运算符的优先级
        String peekOpt = optStack.peek();
        int priority = getPriority(peekOpt, curOpt);
        if (priority == -1 || priority == 0) {
        // 栈顶运算符优先级大或同级,触发一次二元运算
            String opt = optStack.pop(); // 当前参与计算运算符
            int num2 = numStack.pop(); // 当前参与计算数值2
            int num1 = numStack.pop(); // 当前参与计算数值1
            int res = frealCalc(opt, num1, num2);
            numStack.push(res);
            // 运算完栈顶还有运算符,则还需要再次触发一次比较判断是否需要再次二元计算
            if (optStack.empty()) {
                optStack.push(curOpt);
            } else {
                compareAndCalc(optStack, numStack, curOpt);
            }
        } else {
            optStack.push(curOpt);
        }
    }


    static int Calcula(String exp) {

        StringBuilder curNumBuilder = new StringBuilder(16);
        Stack<String> optStack = new Stack<>(); // 运算符栈
        Stack<Integer> numStack = new Stack<>();
        for (int i = 0; i < exp.length(); i++) {
            char c = exp.charAt(i);
            if (c >= '0' && c <= '9') curNumBuilder.append(c);
            else {
                if (curNumBuilder.length() > 0) {// 如果追加器有值,说明之前读取的字符是数值,而且此时已经完整读取完一个数值
                    numStack.push(Integer.valueOf(curNumBuilder.toString()));
                    curNumBuilder.delete(0, curNumBuilder.length());
                }
                String curOpt = String.valueOf(c);
                if (optStack.empty()) {// 运算符栈栈顶为空则直接入栈
                    optStack.push(curOpt);
                } else {
                    if (curOpt.equals("=")) {
                        if(numStack.size()==1)return numStack.pop();
                        while (!optStack.empty()){
                            int s1=numStack.pop();
                            int s2=numStack.pop();
                            String p=optStack.pop();
                            int res=frealCalc(p,s2,s1);
                            numStack.push(res);
                        }
                        return numStack.pop();

                    } else {
                        compareAndCalc(optStack,numStack,curOpt);
                    }

                }


            }
        }
        return 0;
    }
    private static int frealCalc(String curOpt, int a, int b) {
        if(curOpt.equals("+"))return a+b;
        if(curOpt.equals("-"))return a-b;
        if(curOpt.equals("*"))return a*b;
        if(curOpt.equals("/"))return a/b;
        return 0;
    }
}

 

运行截图:

 

 

 

 

 

终于---心累的软工第二次作业完成了

 

posted @ 2019-09-21 22:37  ****l****  阅读(239)  评论(4编辑  收藏  举报