2013-11-22 90 views
0

我對我的java類有一個問題,我必須解析多個.txt文件並提取數學問題的字符串,並將字符串中的答案與問題的實際答案進行比較。我已經能夠閱讀和檢查兩個單位數字的問題,但我無法通過這個。我必須能夠檢查最多4個任意長度的數字和6個小數位的小數(0.000001)。 我也不能在這段代碼中使用正則表達式或數組。從一個字符串中解析多個數字Java

這是到目前爲止我的代碼:

import java.io.File; 
import java.io.FileReader; 
import java.io.IOException; 
import java.text.NumberFormat; 
import java.text.ParseException; 
import java.util.Scanner; 

import javax.print.attribute.standard.NumberOfDocuments; 

public class CheckAnswers 
{ 
private static double correct = 0; 
private static double numQuestions = 0; 

public static void Test(Object newline) throws IOException, ParseException 
{ 
    while (((Scanner) newline).hasNext()) 
    { 
     String line = ((Scanner) newline).nextLine(); 
     // String line = "8 - 5 = 3"; 
     //   

     String num1 = line.substring(0, 1); 
     double firstNum = Integer.parseInt(num1); 
     //double firstNum = NumberFormat.getInstance().parse(num1).intValue(); 
     String num2 = line.substring(4, 5); 
     double secondNum = NumberFormat.getInstance().parse(num2).intValue(); 
     String answer = line.substring(8, 9); 
     double userAnswer = NumberFormat.getInstance().parse(answer).intValue(); 

     int loopExit = 0; 
     while (loopExit == 0) 
     { 
      int checkSubtraction = line.indexOf('-'); 
      if (checkSubtraction != -1) 
      { 
       loopExit++; 
       Subtraction(line, firstNum, secondNum, userAnswer); 
      } 
      int checkAddition = line.indexOf('+'); 
      if (checkAddition != -1) 
      { 
       loopExit++; 
       Addition(line, firstNum, secondNum, userAnswer); 
      } 
      int checkDivision = line.indexOf('/'); 
      if (checkDivision != -1) 
      { 
       loopExit++; 
       Division(line, firstNum, secondNum, userAnswer); 
      } 
      int checkMultiplication = line.indexOf('*'); 
      if (checkMultiplication != -1) 
      { 
       loopExit++; 
       Multiplication(line, firstNum, secondNum, userAnswer); 
      } 
     } 
     numQuestions++; 
    } 
    System.out.println("Number correct: " + correct + " out of " + numQuestions); 
    double percentGrade = ((correct * 100)/numQuestions); 
    System.out.println("Grade: " + percentGrade + "%"); 
} 

public static void Subtraction(String line, double firstNum, double secondNum, 
     double userAnswer) throws ParseException 
{ 
    double keyNum = firstNum - secondNum; 
    if (userAnswer == keyNum) 
    { 
     System.out.println("Correct"); 
     correct++; 
    } 
    if (userAnswer != keyNum) 
    { 
     System.out.println("Wrong"); 
    } 
} 

public static void Addition(String line, double firstNum, double secondNum, 
     double userAnswer) throws ParseException 
{ 
    double keyNum = firstNum + secondNum; 
    if (userAnswer == keyNum) 
    { 
     System.out.println("Correct"); 
     correct++; 
    } 
    if (userAnswer != keyNum) 
    { 
     System.out.println("Wrong"); 
    } 
} 

public static void Multiplication(String line, double firstNum, double secondNum, 
     double userAnswer) throws ParseException 
{ 
    double keyNum = firstNum * secondNum; 
    if (userAnswer == keyNum) 
    { 
     System.out.println("Correct"); 
     correct++; 
    } 
    if (userAnswer != keyNum) 
    { 
     System.out.println("Wrong"); 
    } 
} 

public static void Division(String line, double firstNum, double secondNum, 
     double userAnswer) throws ParseException 
{ 
    double keyNum = firstNum/secondNum; 
    if (userAnswer == keyNum) 
    { 
     System.out.println("Correct"); 
     correct++; 
    } 
    if (userAnswer != keyNum) 
    { 
     System.out.println("Wrong"); 
    } 
} 
} 
+2

請提供樣本輸入和您想要的輸出。它會幫助我們更好地理解你的問題。 – Prateek

+1

而且「不能通過」是什麼意思。你是否遇到異常?輸出無效?你不能使用'nextInt()'而不是從行中手動拉動字符? – chrylis

+0

我建議你先將'Test(Object newline)'改爲'Test(Scanner newline)'並使用類似'Double num1 = newline.nextDouble(); String oper = newline.next(); Double num2 = newline.nextDouble(); Double answer = newline.nextDouble();' –

回答

0

正則表達式將是最容易使用,因爲你有各種操作個數的可變長度字符串適用於他們。既然你不想使用它,你至少應該在運算符(+, - ,/,*,=)上標記字符串並修剪掉空格。 StringTokenizer將在這裏幫助。

使用拆分可能會有問題,除非您可以保證數字和運算符之間會有空格。您需要使用附加標記器遞歸處理字符串,或者在每個標記處分割並相應處理。