2015-11-04 2 views
0

Я написал следующий кодНекорректное результат вычисления

import java.util.Scanner; 

public class Equations 
    { 
     public static void main (String [] args) 
     { 
      Scanner scan = new Scanner (System.in); 
      System.out.println ("This program solves a system of 2 linear equations" +"\n"+ 
      "Enter the coefficients a11 a12 a21 a22 b1 b2:"); 
      int a11 = scan.nextInt(); 
      int a12 = scan.nextInt(); 
      int a21 = scan.nextInt(); 
      int a22 = scan.nextInt(); 
      int b1 = scan.nextInt(); 
      int b2 = scan.nextInt(); 

      System.out.println ("Eq: " + a11 + "*x1" + "+" + a12 + "*x2 = " + b1); 
      System.out.println ("Eq: " + a21 + "*x1" + "+" + a22 + "*x2 = " + b2); 

      if(((a11*a22)-(a12*a21))!=0){ 
       double Equ1single = ((b1*a22)-(b2*a12))/((a11*a22)-(a12*a21)); 
       double Equ2single = (((b2*a11)-(b1*a21)))/(((a11*a22)-(a12*a21))); 
       System.out.println ("Single solution: (" + Equ1single + "," + Equ2single + ")"); 
      } 
     } 
    } 

Результат Recieve для вставки "1 2 3 4 5 6" является "(-4.0,4.0)", В то время как должно быть «(-4.0,4.5)». Я попытался выяснить, почему это происходит какое-то время, но я не могу найти никакой причины. Я считаю, что моя расчетная формула правильная.

Где проблема?

+2

'int/int' по-прежнему' int', а целое число не имеет доли. Если вам нужен тип, который может обрабатывать фракции, используйте 'double' (также как операнды). – Pshemo

ответ

3
double Equ1single = ((b1*a22)-(b2*a12))/((a11*a22)-(a12*a21)); 

/ является целочисленным делением, поскольку оба операнда / используемого типа int. Целочисленное деление дает целочисленное значение, даже если его результат позже присваивается double. Вставьте операнды / на номер double, чтобы получить раздел double. (То же самое для Equ2single.)

Смежные вопросы