2017-03-04 9 views
-1

私の試験では質問がありました。最初はかなり簡単でした。私は、質問を説明してみましょう:単一のメソッドから複数の値を返す

  • ユーザーは、(アレイ)を入れたいどのように多くの整数を指定してください

  • 数字は(トリッキー)

  • 1500 -1500の間でなければなりません:メソッドを作成します。入力された数字の割合を計算します。パーセントは0、正、負です。 (このすべてが一つの方法は、文字列にノーリターン、文字列バッファにする必要があり、戻り値の結果はdouble値でなければなりません)

私は右のそれをやったと思うが、私はリアルタイムでそれをテストしたとき私が実行する問題は、0.0、0.0、0.0の値を返すということです。あるいは、値が同じ条件(例えば、すべてゼロ)にある場合にのみ、正しいパーセンテージを返します。

ここに私のコードです:(あなたがそれを理解することができれば幸いです)。私はちょうど興味がある、私はそれを解決する方法を知らない。私も静的メソッドで試してみましたが、私は同じ問題に遭遇します。

import java.util.Scanner; 

public class nPNZ { 
    public int [] number; 

    public nPNZ (int [] n){ 
     number = n; 
    } 

    public double [] allCalcs(){ 
     int countPos = 0; int countNeg = 0; int countZero = 0; 
     for (int i = 0; i < number.length; i++) { 
      if (number[i] == 0) { 
       countZero++; 
      }else if (number[i] > 0){ 
       countPos++; 
      }else{ 
       countNeg++; 
      } 
     } 
     //0 = 0 ; 1 = positive ; 2 = negative 
     double total [] = new double [3]; 
     total[0] = (countZero/number.length)*100; 
     total[1] = (countPos/number.length)*100; 
     total[2] = (countNeg/number.length)*100; 
     return total; 
    } 

    public static void main (String args[]){ 
     //min 20 number, -1500 to 1500 
     Scanner input = new Scanner (System.in); 

     final int MIN_SIZE = 5; 
     int size = 0; 

     while(size < MIN_SIZE){ 
      System.out.println("Specify the size of the array: "); 
      size = input.nextInt(); 
      while(size<MIN_SIZE){ 
       System.out.println("Size should be greater than: " + MIN_SIZE); 
       size = input.nextInt(); 
      } 
     } 

     input.nextLine(); 

     int num [] = new int [size]; 

     for (int i = 0; i < num.length; i++) { 
      System.out.println("Write number " + (i+1) + " : "); 
      num[i] = input.nextInt(); 
      while(num[i] < -1500 || num[i] > 1500) { 
       System.out.println("The number should within the range of -1500  and 1500"); 
       num[i] = input.nextInt(); 
      } 
     } 

     nPNZ n = new nPNZ (num); 
     System.out.println("Percentage of zero numbers is: " + n.allCalcs()[0]); 
     System.out.println("Percentage of positive numbers is: " + n.allCalcs()[1]); 
     System.out.println("Percentage of negative numbers is: " + n.allCalcs()[2]); 
    } 
} 
+1

あなたはどのような問題に直面しましたか? –

+0

私は5つの数字をすべて0、0、0、0、0と答えたら---出力から正しい質問を得る: 0のパーセンテージは100.0 正のnubersのPerzある:負の数の0.0 Percのがある:0.0 しかし、私は言って置く場合:0、0、0、3、-1 出力は、次のとおりです。ゼロの数字の Percのことである:正nubersの0.0 Perzは以下のとおりです。 0.0 負の数のパーセンテージ:0.0 –

答えて

1

コードに1つの問題があります。

ここ
double total [] = new double [3]; 
total[0] = (countZero/number.length)*100; 
total[1] = (countPos/number.length)*100; 
total[2] = (countNeg/number.length)*100; 
return total; 

countZerocountPoscountNegはすべての整数であり、number.lengthも整数です。したがって、整数を別の整数で割ると、整数が得られます。

countZerocountPoscountNegはすべてnumber.lengthより少ない、ので、あなたはtotal配列内のゼロ値を取得します。

例:

System.out.println(2/3); // prints 0 
System.out.println(2.0/3); // prints 0.6666666666666666 
System.out.println((double)2/3); // prints 0.6666666666666666 

あなたの問題を解決するには、いくつかの選択肢があります。そのうちの1つは、単純に整数に1.0を掛けて、別の整数で割ったものです。

このようなことができます。

public double [] allCalcs(){ 
    // your code goes here 
    double total [] = new double [3]; 
    total[0] = (countZero * 1.0/number.length) * 100; 
    total[1] = (countPos * 1.0/number.length) * 100; 
    total[2] = (countNeg * 1.0/number.length) * 100; 
    return total; 
} 

OR、あなたはdoubleとして変数(countZerocountPoscountNeg)を宣言することができます。

+0

ああ、ありがとうございます。私は作った: double countPos = 0; double countNeg = 0; double countZero = 0; ありがとうございます。私は今理解している、それは問題を修正した。 –

関連する問題