package com.company;
import java.util.Scanner;
public class Main {
static double ul;
static double sum;
static double num;
static double denom = 1;
static double k = 0;
public static double e(double x, double n) {
if (n >= 0) {
if (n == 0) {
sum = 1;
} else if (n == 1) {
sum = 1 + x;
} else {
for (k = 2; k <= n; k++) {
num = num * Math.pow(x, k);
denom = denom * (denom + 1);
ul = num / denom;
sum = sum + ul;
}
return sum;
}
return sum;
} else {
System.out.println("Invalid value of k");
System.out.println("Please, restart the program and try again");
}
return sum;
}
public static double sinus(double x, double n) {
if (n >= 0){
if (n == 0) {
sum = x;
} else {
for (k = 1; k <= n; k++) {
num = num * Math.pow(x, 2 * k - 1);
denom = denom * (2 * n - 1) * (2 * n);
if (k % 2 == 0) {
ul = num / denom;
} else {
ul = (-1) * (num / denom);
}
sum = sum + ul;
}
return sum;
}
return sum;
}
else {
System.out.println("Invalid value of k");
System.out.println("Please, restart the program and try again");
}
return sum;
}
public static double cosinus(double x, double n) {
if (n >= 0){
if (n == 0) {
sum = 1;
} else {
for (k = 0; k <= n; k++) {
num = num * Math.pow(x, 2 * k);
denom = denom * (2 * n - 1) * (2 * n);
if (k % 2 == 0) {
sum = num / denom;
} else {
sum = (-1) * (num / denom);
}
}
return sum;
}
}
else {
System.out.println("\n" + "Invalid value of n");
System.out.println("Please, restart the program and try again");
}
return sum;
}
public static void main(String[] args) {
Scanner value = new Scanner(System.in);
byte d;
double x;
double n;
System.out.println("Choose which function you want calculate: " + "\n");
System.out.println("1. e^x");
System.out.println("2. sin(x)");
System.out.println("3. cos(x)" + "\n");
d = value.nextByte();
if (d == 1){
System.out.println("Enter value of x: ");
x = value.nextDouble();
System.out.println("Enter value of n: ");
n = value.nextDouble();
e(x,n);
}
else if (d == 2){
System.out.println("Enter value of x: ");
x = value.nextDouble();
System.out.println("Enter value of n: ");
n = value.nextDouble();
sinus(x,n);
}
else if (d == 3){
System.out.println("Enter value of x: ");
x = value.nextDouble();
System.out.println("Enter value of n: ");
n = value.nextDouble();
cosinus(x,n);
}
else {
System.out.println("You type wrong number of function, try one more time");
}
System.out.println("\n" + "Your answer is: "+ "\n" + sum);
}
}
Я не знаю, что вы хотите получить, но есть несколько важных моментов, которые стоит учитывать.
Во-первых, тип double не имеет смысла сравнивать с 0 или 1, как это делаете вы. Поскольку этот тип является приблизительным значением, то такое сравнение даст непредсказуемый результат. Объясняю, почему так. Предположим мы завели переменную такого типа и присвоили ей цифру 3. В памяти на самом деле не записывается 3, в данном случае может быть записано 3,00000000000000000000, а может 3,000000000000000001. Это называется приблизительное значение, отсюда видно, что сравнение тут некорректно.
Во-вторых, ваше выражение num = num * ... всегда дает ноль, поскольку данная переменная изначально инициализирована 0, а умножение на 0 дает 0. Дальше все вычисления бессмысленны, везде результат будет 0.
В-третьих, старайтесь избегать дублирующего кода, выносить его отдельно. Это сделает код понятнее и компактнее. Кроме того его еще и редактировать будет удобнее, поскольку корректировка одного вынесенного метода , исправляет работу всего кода, к нему обращающегося.
В-четвертых, сканер - штука хорошая, но присваивать в сканере значение стоит только к стрингу, либо окружать код блоками трай-кетч. Проблема в том, что пользователь может ввести букву, тогда при попытке сканера присвоить его числовой переменной ваша программа упадет.
В-пятых, Ваши методы возвращают значение , которыми вы не пользуетесь... это странно и неправильно.
Итого... предлагаю подправить код. Я не знаю, что Вы хотели, но в таком виде это смотрится немного лучше и понятнее. Дальше сможете ошибку и сами найти, а заодно подумаете над дальнейшим рефакторингом.
import java.util.Scanner;
public class Main {
public static double e(String x, String n) {
if ("0".equals(n)) return 1;
if ("1".equals(n)) return Double.valueOf(x);
double denom = 1, sum = 0, num = 1, u1;
Double doubleOfX = Double.valueOf(x);
Double doubleOfN = Double.valueOf(n);
for (int k = 2; k <= doubleOfN; k++) {
num = num * Math.pow(doubleOfX, k);
denom = denom * (denom + 1);
u1 = num / denom;
sum = sum + u1;
}
return sum;
}
public static double sinus(String x, String n) {
if ("0".equals(n)) return Double.valueOf(x);
double denom = 1, sum = 0, num = 1, u1;
Double doubleOfX = Double.valueOf(x);
Double doubleOfN = Double.valueOf(n);
for (int k = 1; k <= doubleOfN; k++) {
num = num * Math.pow(doubleOfX, 2 * k - 1);
denom = denom * (2 * doubleOfN - 1) * (2 * doubleOfN);
if (k % 2 == 0) u1 = num / denom;
else u1 = (-1) * (num / denom);
sum = sum + u1;
}
return sum;
}
public static double cosinus(String x, String n) {
if ("0".equals(n)) return 1;
double denom = 1, sum = 0, num = 1;
Double doubleOfX = Double.valueOf(x);
Double doubleOfN = Double.valueOf(n);
for (int k = 0; k <= doubleOfN; k++) {
num = num * Math.pow(doubleOfX, 2 * k);
denom = denom * (2 * doubleOfN - 1) * (2 * doubleOfN);
if (k % 2 == 0) sum = num / denom;
else sum = (-1) * (num / denom);
}
return sum;
}
private static boolean detectValue(String x, String n) {
try {
Double.valueOf(x);
return Double.valueOf(n) >= 0;
} catch (NumberFormatException e) {
return false;
}
}
public static void main(String[] args) {
Scanner value = new Scanner(System.in);
byte d;
String x;
String n;
System.out.println("Choose which function you want calculate: " + "\n");
System.out.println("1. e^x");
System.out.println("2. sin(x)");
System.out.println("3. cos(x)" + "\n");
d = value.nextByte();
System.out.println("Enter value of x: ");
x = value.next();
System.out.println("Enter value of n: ");
n = value.next();
String result;
if (detectValue(x, n)) {
switch (d) {
case 1:
result = "\n" + "Your answer is: " + "\n" + e(x, n);
break;
case 2:
result = "\n" + "Your answer is: " + "\n" + sinus(x, n);
break;
case 3:
result = "\n" + "Your answer is: " + "\n" + cosinus(x, n);
break;
default:
result = "You type wrong number of function, try one more time";
}
} else result = "Invalid input value\nPlease, restart the program and try again";
System.out.println(result);
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Как обеспечить доступ к странице только по ссылке переданной администратором? Извиняюсь что сразу не обрисовал вопрос четкоИсправлясь
Как сделать чтобы последняя строка в DataGrid не сортировался вместе с остальными? На пример все строки сортируются по возрастанию, а последняя...