2015-11-04 201 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 + ")"); 
      } 
     } 
    } 

结果收到用于插入 “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分部。 (与​​声明相同。)