2013-06-22 16 views
0

我試圖寫TestFraction的方式,主要方法調用方法getFraction1getFraction2來創建兩個Fraction s:fr1(a/b)和fr2(a/b)。 getFraction1getFraction2提示用戶輸入兩個整數,ab,並調用getNumber來捕獲這些整數。然後分數在fr1和fr2上執行計算。問題是,當我運行TestFraction時,a和b的值保留爲1,這是它們在Fraction中設置的值。任何人都可以給我提示,爲什麼getFraction1和getFraction2實際上並沒有將a和b的值傳遞給fr1和fr2?爲什麼這些變量的值不能通過getFraction1和getFraction2方法正確設置?

這裏是我的TestFraction代碼:

package Fraction; 

import java.io.*; 
import java.util.*; 

public class TestFraction 
{ 

    static Scanner console = new Scanner (System.in); 

    private static int getNumber() throws InputMismatchException 
    { 
        return console.nextInt(); 
    } 

    private static Fraction getFraction1() 
    { 
      int a=1, b=1; 
      Fraction frac = new Fraction(); 

      while (true) { 

        // prompt to enter a numerator and a denominator 
        System.out.println("Input 1st fraction numerator and denominator"); 
        // input the numerator and the denominator using getNumber() 
        try { 
          a = getNumber(); 
          b = getNumber(); 
          } 
        catch (Exception e) 
        { 
          System.out.println("Exception: "+e.toString()); 
          console.nextLine(); 
          continue; 
        } 
        return frac; 
        // return new Fraction if OK 
        // otherwise print an error message 
      } 
    } 

    private static Fraction getFraction2() 
    { 
      int a=1, b=1; 
      Fraction frac = new Fraction(); 

      while (true) { 

        // prompt to enter a numerator and a denominator 
        System.out.println("Input 2nd fraction numerator and denominator"); 
        // input the numerator and the denominator using getNumber() 
        try { 
          a = getNumber(); 
          b = getNumber(); 
        } 

        catch (Exception e) 
        { 
          System.out.println("Exception: "+e.toString()); 
          console.nextLine(); 
          continue; 
        } 
        return frac; 
        // return new Fraction if OK 
        // otherwise print an error message 
      } 
    } 
    public static void main(String[] args) 
    { 
      Fraction fr1 = new Fraction(); 
      fr1 = getFraction1(); 

      Fraction fr2 = new Fraction(); 
      fr2 = getFraction2(); 

      Fraction res = new Fraction(); 

      // define other variables including res and fr2 

      res = Fraction.add (fr1, fr2); 
      System.out.println(fr1+" + "+fr2+" = "+res); 

      res  =  Fraction.subtract (fr1, fr2); 
      System.out.println(fr1+" - "+fr2+" = "+res); 
      res   =  Fraction.multiply (fr1, fr2); 
      System.out.println(fr1+" * "+fr2+" = "+res); 
      res   =  Fraction.divide (fr1, fr2); 
      System.out.println(fr1+"/"+fr2+" = "+res); 
      res   =  Fraction.lessThan (fr1, fr2); 
      System.out.println(fr1+" "+res+" "+fr2); 

      // test subtract, multiply, divide, lessThan methods 
      // each test has to print a description, a result, 
      // and, possibly, a error message if the calculation fails 

    } 

} 

這裏是分數:

package Fraction; 

public class Fraction 
{ 
protected int a; 
protected int b; 
public Fraction() 
{ 
    a = 1; 
    b = 1; 
} 
public Fraction (int a, int b) 
{ 
    this.a=a; 
    this.b=b; 
} 
public int getNumerator() 
{ 
    return a; 
} 
public int getDenominator() 
{ 
    return b; 
} 
public void setNumerator(int a) 
{ 
    this.a=a; 
} 

public void setDenominator(int b) 
{ 
    this.b=b; 
} 
public String toString() 
{ 
    return a+"/"+b; 
} 
public int gcd(int a, int b) 
{ 
    //ToDo implement Euclide algorithm 
    if (b==0) return a; 
    return gcd(b, a%b); 
} 
public void lowestTerms() 
{ 
    int g=gcd(a,b); 
    a=a/g; 
    b=b/g; 
} 
public static Fraction add(Fraction first, Fraction second) 
{ 
    Fraction result = new Fraction(); 
    result.setNumerator(first.getNumerator()*second.getDenominator() 
         + first.getDenominator()*second.getNumerator()); 
    result.setDenominator(first.getDenominator()*second.getDenominator()); 
    result.lowestTerms(); 
    return result; 
} 
//ToDo methods subtract, multiply, divide, lessThan 
public static Fraction subtract(Fraction first, Fraction second) 
{ 
    Fraction result = new Fraction(); 
    result.setNumerator(first.getNumerator()*second.getDenominator() 
         - first.getDenominator()*second.getNumerator()); 
    result.setDenominator(first.getDenominator()*second.getDenominator()); 
    result.lowestTerms(); 
    return result; 
} 
public static Fraction multiply(Fraction first, Fraction second) 
{ 
    Fraction result = new Fraction(); 
    result.setNumerator(first.getNumerator()*second.getNumerator()); 
    result.setDenominator(first.getDenominator()*second.getDenominator()); 
    result.lowestTerms(); 
    return result; 
} 
public static Fraction divide(Fraction first, Fraction second) 
{ 
    Fraction result = new Fraction(); 
    result.setNumerator(first.getNumerator()*second.getDenominator()); 
    result.setDenominator(first.getDenominator()*second.getNumerator()); 
    result.lowestTerms(); 
    return result; 
} 
public static Fraction lessThan(Fraction first, Fraction second) 
{ 
    if (first.getNumerator()*second.getDenominator() <= 
      first.getDenominator()*second.getNumerator()){ 
    return first; 
    } 
    else { 
    return second; 
    } 
} 
} 
+0

您返回新的空分數。你實例化它們,然後再不碰它們。 –

回答

1

必須使用的,而不是Fraction()構造的Faction(int, int)構造:

Fraction frac = new Fraction(); 

必須

Fraction frac = null; 
//later in the code once you have a and b variables set and no exceptions... 
frac = new Fraction (a, b); 

使用setter方法:

frac.setNumerator(a); 
frac.setDenominator(b); 

返回frac變量之前。

+0

非常感謝!我不知道爲什麼我沒有想到使用setter。我認爲這是一個簡單的修復。我感謝您的幫助! – woollyMammoth

+0

@woollyMammoth不客氣 –

0

看起來你不設置您從控制檯

a = getNumber(); 
b = getNumber(); 

frac.setNumerator(a); 
frac.setDenominator(b); 

默認ab設置爲1讀取的值,當你說

Fraction frac = new Fraction(); 

因爲Fraction默認構造函數像這樣定義

public Fraction() 
{ 
    a = 1; 
    b = 1; 
} 
相關問題