答题(office的题型)自动评分系统怎么做?利用java

答题(office的题型)自动评分系统怎么做?利用java,第1张

package com.test

import java.lang.reflect.Method

//实现打开浏览器并跳到指定网址的类

public class BareBonesBrowserLaunch {

  public static void openURL(String url) {  

       try {  

           browse(url)  

       } catch (Exception e) {  

       }  

   }  

 

   private static void browse(String url) throws Exception {  

       //获取 *** 作系统的名字  

       String osName = System.getProperty("os.name", "")  

       if (osName.startsWith("Mac OS")) {  

           //苹果的打开方式  

           Class fileMgr = Class.forName("com.apple.eio.FileManager")  

           Method openURL = fileMgr.getDeclaredMethod("openURL", new Class[] { String.class })  

           openURL.invoke(null, new Object[] { url })  

       } else if (osName.startsWith("Windows")) {  租搭乎

          //windows的打开方式。  

           Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + url)  

       } else {  

           // Unix or Linux的打开方式  

           String[] browsers = { "firefox", "opera", "konqueror", "epiphany", "mozilla", "netscape" }  

           String browser = null  

           for (int count = 0 count < browsers.length && browser == null count++)  

               //执行代码,在brower有值后跳出,  

               //这里是如果进程创建成功了,==0是表示正常结束。  

               if (Runtime.getRuntime().exec(new String[] { "which", browsers[count] }).waitFor() == 0)  

                   browser = browsers[count]  

           if (browser == null)  

               throw new Exception("Could not find web browser")  

           else  

               //这个值在上面已经成功的得到了一个进程。  

     枝尺       弊悉   Runtime.getRuntime().exec(new String[] { browser, url })  

       }  

   }  

}

//主方法 测试类

public static void main(String[] args) {

    String url = "http://iteye.blog.163.com/"         

    BareBonesBrowserLaunch.openURL(url)  

}

你的想法是好的,但是我仔细构思了一遍,太难了。

首先难点就是怎么生成题目。也是最难得,因为有太多不确定,弄不好就会出现负数结果的题目。

然后是题目的解答,这个难点就不说了,这个我在几年前就写好了。一直没用上,现在却用上了。

还有,你要窗体,可是我不会用swing

还有你要的四则混合运算是多长的,我总不能写一个有1000多个数字写成的式子吧。

题目中是否涉及到小数

下面是我的计算代手蔽码:

package compute

public class CaculateString {

private String str, s

private int p1, p2

public CaculateString(String str) {

this.str = str

this.clear()

this.check()

}

public String caculate() {

while (isEnd(str)) {

p2 = str.indexOf(")")

if (p2 != -1) {

s = str.substring(0, p2)

p1 = s.lastIndexOf("("旅薯橡)

s = str.substring(p1 + 1, p2)

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

s = this.caculateNumber(s)

if (p2 == (str.length() - 1))

str = str.substring(0, p1) + s

else

str = str.substring(0, p1) + s + str.substring(p2 + 1)

} else {

str = str.substring(0, p1) + str.substring(p2 + 1)

}

} else

str = this.caculateNumber(str)

}

return str

}

private String caculateNumber(String ss) {

int p3 = 0, p4 = 0, p5 = 0

char b = ' ', c = ' '

String s1 = null, s2 = null

double d1 = 0.0, d2 = 0.0, d3 = 0.0

if (ss.charAt(0) == '+') {

ss = ss.substring(1)

if (ss.indexOf("+") == -1 &&ss.indexOf("-") == -1

&&ss.indexOf("*") == -1 &&ss.indexOf("/") == -1)

return ss

} else if (ss.charAt(0) == '-') {

if (ss.indexOf("+", 1) == -1 &&ss.indexOf("-", 1) == -1

&&ss.indexOf("*", 1) == -1 &&ss.indexOf("拆旁/", 1) == -1)

return ss

}

while (isEnd2(ss)) {

p3 = 0

p4 = 0

p5 = 0

if (ss.indexOf("*") == -1 &&ss.indexOf("/") == -1) {

for (int i = 0i <ss.length()i++) {

b = ss.charAt(i)

if (b == '+' || b == '-') {

if (p3 == 0 &&i != 0) {

p3 = i

c = b

} else if (p3 != 0 &&i != (p3 + 1)) {

p4 = i

break

}

}

}

if (p4 == 0) {

s1 = ss.substring(0, p3)

s2 = ss.substring(p3 + 1)

} else {

s1 = ss.substring(0, p3)

s2 = ss.substring(p3 + 1, p4)

}

d1 = Double.parseDouble(s1)

d2 = Double.parseDouble(s2)

if (c == '+')

d3 = d1 + d2

else if (c == '-')

d3 = d1 - d2

if (p4 == 0)

ss = new Double(d3).toString()

else

ss = new Double(d3).toString() + ss.substring(p4)

} else {

if (ss.indexOf("*") == -1) {

c = '/'

p4 = ss.indexOf("/")

} else if (ss.indexOf("/") == -1) {

c = '*'

p4 = ss.indexOf("*")

} else if (ss.indexOf("*") >ss.indexOf("/")) {

c = '/'

p4 = ss.indexOf("/")

} else if (ss.indexOf("*") <ss.indexOf("/")) {

c = '*'

p4 = ss.indexOf("*")

}

for (int i = p4 - 1i >= 0i--) {

b = ss.charAt(i)

if (b == '+' || b == '-') {

if ((i - 1) != 0 &&ss.charAt(i - 1) != '+'

&&ss.charAt(i - 1) != '-') {

p3 = i

break

} else if ((i - 1) != 0

&&(ss.charAt(i - 1) == '+' || ss.charAt(i - 1) == '-')) {

p3 = i - 1

break

}

}

}

for (int i = p4 + 1i <ss.length()i++) {

b = ss.charAt(i)

if ((b == '+' || b == '-' || b == '*' || b == '/')

&&(i - 1) != p4) {

p5 = i

break

}

}

if (p3 == 0)

s1 = ss.substring(0, p4)

else

s1 = ss.substring(p3 + 1, p4)

if (p5 == 0)

s2 = ss.substring(p4 + 1)

else

s2 = ss.substring(p4 + 1, p5)

d1 = Double.parseDouble(s1)

d2 = Double.parseDouble(s2)

if (c == '*')

d3 = d1 * d2

else if (c == '/')

d3 = d1 / d2

if (p3 == 0 &&p5 == 0)

ss = new Double(d3).toString()

else if (p3 == 0 &&p5 != 0)

ss = new Double(d3).toString() + ss.substring(p5)

else if (p3 != 0 &&p5 == 0)

ss = ss.substring(0, p3 + 1) + new Double(d3).toString()

else if (p3 != 0 &&p5 != 0)

ss = ss.substring(0, p3 + 1) + new Double(d3).toString()

+ ss.substring(p5)

}

}

return ss

}

private boolean isEnd(String str) {

if (str.indexOf("(") != -1 || str.indexOf(")") != -1

|| str.indexOf("+", 1) != -1 || str.indexOf("-", 1) != -1

|| str.indexOf("*", 1) != -1 || str.indexOf("/", 1) != -1)

return true

return false

}

private boolean isEnd2(String ss) {

if (ss.indexOf("+", 1) != -1 || ss.indexOf("-", 1) != -1

|| ss.indexOf("*", 1) != -1 || ss.indexOf("/", 1) != -1)

return true

return false

}

private void clear() {

str = str.replaceAll(" ", "")

}

private void check() {

int right = 0, left = 0

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

char a = str.charAt(i)

if (a != '0' &&a != '1' &&a != '2' &&a != '3' &&a != '4'

&&a != '5' &&a != '6' &&a != '7' &&a != '8' &&a != '9'

&&a != '+' &&a != '-' &&a != '*' &&a != '/' &&a != '('

&&a != ')' &&a != '.') {

System.exit(0)

}

if (a == '(')

left++

else if (a == ')')

right++

}

if (left != right) {

System.exit(0)

}

}

public static void main(String args[]) {

System.out.println(new CaculateString("((1-(0/3))*7)+8").caculate())

}

}

是空指针异常

这一行 if(s.matches("\n")){

我拆改把s.matches("\n")直接改为true.

然后再if里旅蠢判面加里跟踪语句,

再运行后,提示是空指针异常.

提示是 if(s.matches(\\d+\\s+)){

和getAverage(ss[i])

这两行出错.

你的SS[i]初始化后的,默认每个值是null.

你又没有赋值给他们,然后又引用了SS数组,然后就空指针档瞎异常了...


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12217379.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存