Мой код отлично работает, но это то, что убивает меня, и я не могу найти ответ. Я не могу передать строку непосредственно из аргументов командной строки в свой конструктор, чтобы затем передать метод (метод оценки), который вызывается во время построения. По какой-то причине метод не видит его как String. Почему он это делает? Единственный способ заставить его работать - это поставить if/else в мой основной метод, который вызывает конструктор и передает аргументы. Прикрепленный мой код.java command line не распознает строку
/**
* Program to calculate approximation, actual value, absolute error, and relative error with a definite integral
* @author c-dub
*
*/
public class Integrate {
private String whichWay;
double upper, lower, deltaX, actual, absoluteError, relativeError;
int rect;
// Constructor
Integrate(String str, double a, double b, int n) {
this.whichWay = str;
this.lower = a;
this.upper = b;
this.rect = n;
this.deltaX = (b - a)/rect;
this.actual = (Math.pow(upper, 3)/3) - (Math.pow(lower, 3)/3);
evaluateMethod(whichWay);
System.out.println("Actual value: " + actual);
System.out.println("Absolute error: " + absoluteError + ", Relative error: " + relativeError + ".");
}
/**
* Evaluates all calculations
* @param whichWay, the string to determine left, right, trapezoid method
*/
private void evaluateMethod(String whichWay) {
if(whichWay == "l" || whichWay == "L") {
System.out.println("Using left hand endpoints, on the integral (" + lower + ", " + upper + ") with "
+ rect + " rectangles.....");
System.out.println("The approximate value is: " + integrateLeft() + ".");
}
else if(whichWay == "r" || whichWay == "R") {
System.out.println("Using right hand endpoints, on the integral (" + lower + ", " + upper + ") with "
+ rect + " rectangles.....");
System.out.println("The approximate value is: " + integrateRight() + ".");
}
else if(whichWay == "t" || whichWay == "T") {
System.out.println("Using the trapezoid method, on the integral (" + lower + ", " + upper + ") with "
+ rect + " rectangles.....");
System.out.println("The approximate value is: " + integrateTrapezoid() + ".");
}
else {
throw new IllegalArgumentException("Bad string input. Please restart program");
}
}
/**
* Left hand endpoint integration
* @return the approximate value as a double
*/
private double integrateLeft() {
double sum = 0;
// First interval to the last interval, depending on number of rectangles
double lowerAlt = lower;
for(int i = 0; i < rect; i++) {
sum += evaluate(lowerAlt);
lowerAlt = lowerAlt + deltaX;
}
absoluteError = Math.abs(actual - (sum * deltaX));
relativeError = Math.abs(absoluteError/actual);
// Multiply entire sum by deltaX
return Math.abs(sum * deltaX);
}
/**
* Right hand endpoint integration
* @return the approximate value as a double
*/
private double integrateRight() {
double sum = 0;
// First interval to the last interval, depending on number of rectangles
double lowerAlt = lower + deltaX;
for(double i = 0; i < rect; i++) {
sum += evaluate(lowerAlt);
lowerAlt = lowerAlt + deltaX;
}
absoluteError = Math.abs(actual - (sum * deltaX));
relativeError = Math.abs(absoluteError/actual);
// Multiply entire sum by deltaX
return Math.abs(sum * deltaX);
}
/**
* Trapezoid method of integration
* @return the approximate value as a double
*/
private double integrateTrapezoid() {
double sum = 0;
// first interval after the lower bound, to the last interval before upper bound depending on # of rectangles
double lowerAlt = lower + deltaX;
for(int i = 1; i < rect; i++) {
sum += evaluate(lowerAlt) * 2;
lowerAlt = lowerAlt + deltaX;
}
// Now pass the lower and upper values into the function and add to total sum
sum += evaluate(lower) + evaluate(upper);
absoluteError = Math.abs(actual - (sum * (deltaX/2)));
relativeError = Math.abs(absoluteError/actual);
// Mulitply calculation by deltaX/2
return Math.abs(sum * (deltaX/2));
}
/**
* Method to define the actual function
* @param x, function input value
* @return the function output value f(x)
*/
private double evaluate(double x) {
//Please enter your desired function here:
return Math.pow(x, 2);
}
/**
* Main method
* @param args, the command line arguments
*/
public static void main(String[] args) {
String str;
double a = Double.parseDouble(args[1]);
double b = Double.parseDouble(args[2]);
int n = Integer.parseInt(args[3]);
if(args[0].equals("l") || args[0].equals("L")) {
new Integrate("l", a, b, n);
}
else if(args[0].equals("r") || args[0].equals("R")) {
new Integrate("r", a, b, n);
}
else if(args[0].equals("t") || args[0].equals("T")) {
new Integrate("t", a, b, n);
}
}
}
Внутри моего метода evaluateMethod(), он проверяет строку, и даже если команда арг проезжал в законном струнном письме (не полукокс), оно не было видеть его как строку и бросать исключение. Благодаря
Возможно, это немного поздно, но я не вижу исключения в вашем вопросе? –
Возможный дубликат [Как сравнить строки в Java?] (Http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) –
@ ᴳᵁᴵᴰᴼ Этот пример сравнивает вход с равно. ваш «дубликат» не –