2016-03-08 89 views
2

我的目標是計算從用戶輸入中獲得的10個數字的標準偏差和使用循環查找平均值和標準差

我只學到了,而我的班級裏有

問題: 我如何分配給每個用戶輸入(環內),以一個獨立的變量,到後來比較平均,發現標準偏差?

(我還沒有在我的課教給數組。所以,我必須解決這個問題,而無需使用數組)

我做的程序很長的一個單調乏味的方式,但如果能提供更多的代碼需要顯示我可以做while循環找到意思。

import java.util.Scanner; 

public class StandardDev 
{ 
    public static void main (String[] args) 
    { 
    Scanner input = new Scanner (System.in); 

    double num1 = 0, num2 = 0, num3 = 0, num4 = 0, num5 = 0, num6 = 0, num7 = 0, num8 = 0, num9 = 0, num10 = 0, total = 0, mean = 0, stDev1 = 0, stDev2 = 0, sum = 0; 

    System.out.println("Enter 10 numbers: "); 
    num1 = input.nextDouble(); 
    num2 = input.nextDouble(); 
    num3 = input.nextDouble(); 
    num4 = input.nextDouble(); 
    num5 = input.nextDouble(); 
    num6 = input.nextDouble(); 
    num7 = input.nextDouble(); 
    num8 = input.nextDouble(); 
    num9 = input.nextDouble(); 
    num10 = input.nextDouble(); 

    sum = num1+num2+num3+num4+num5+num6+num7+num8+num9+num10; 

    mean = sum/(double) 10; 

    stDev1 = Math.pow(num1 - mean, 2) + Math.pow(num2 - mean, 2) + Math.pow(num3 - mean, 2) + Math.pow(num4 - mean, 2) + Math.pow(num5 - mean, 2) + 
    Math.pow(num6 - mean, 2) + Math.pow(num7 - mean, 2) + Math.pow(num8 - mean, 2) + Math.pow(num9 - mean, 2) + Math.pow(num10 - mean, 2); 

    stDev2 = Math.sqrt(stDev1/10); 

    System.out.println ("The mean is " + mean + "."); 
    System.out.println ("The standard deviation is " + stDev2 + "."); 
    } 
} 

這是我找到的意思。我的邏輯告訴我,我只能找到標準差,如果我可以單獨訪問這些輸入從平均值和平方中減去。不知道如何,但..

import java.util.Scanner; 

public class JTillman03_45 
{ 
    public static void main (String[] args) 
    { 
    Scanner input = new Scanner (System.in); 

    int count = 0, total = 0; 

    double mean, stDev = 0; 

    System.out.println("Enter a digit: "); 
    int number = input.nextInt(); 

    while (count < 9){ 
     total += number; 
     count++; 


    System.out.println("Enter a digit: "); 
    number = input.nextInt(); 
    } 

    mean = total/(double) count; 

    System.out.println("The mean of those numbers is: " + mean); 
    System.out.println("The standard deviation of those numbers is: " + stDev); 
    } 
} 
+0

陣列將很好地在這裏工作。你知道是否可以使用一個? –

+0

它只是使用循環。我修改了這個程序,並更新了下面的代碼 –

+0

添加代碼示例 – khuderm

回答

1

你真的需要存儲所有的整數?如果沒有,您可以使用以下三個值計算平均值和標準偏差:

  1. 輸入了多少個數字(在您的問題中,它是一個固定值10)。
  2. 所有數字的總和。
  3. 數字的平方和。

其中給出

double count = 10.0; // is 10.0 for your problem 
double sum1 = 0.0; // sum of the numbers 
double sum2 = 0.0; // sum of the squares 
int i; 
for (i=0; i < 10; i++) { 
    System.out.println("Enter 10 numbers: "); 
    double n = input.nextDouble(); 
    sum1 += n; 
    sum2 += n * n; 
} 
double average = sum1/count; 
double variance = (count * sum2 - sum1 * sum1)/(count * count); 
double stdev = Math.sqrt(variance); 
+0

啊。太棒了。除了存儲所有10個整數之外,我想不出任何其他方式來計算它。從視覺上看,這有助於我更徹底地理解計算。因此,不用每個整數執行計算,只需使用不同的總和即可執行。 –

0

使用while循環中,循環的input.nextDouble()的值作爲循環的條件。只要有輸入,循環就會繼續。同時,保持輸入數量和數字總和的計數。就這兩個數字而言,你可以計算平均值和標準偏差。如果你看看stDev1,你可以看到它只是數字減去平均時間10(或輸入計數)的總和。平均值僅僅是總和除以輸入計數。如果您需要更多解釋,請告訴我。我將很快添加一些示例代碼。

public class StandardDev { 

    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 

     while (input.hasNext()) { 
      sum += input.nextDouble(); 
      count++; 
     } 
     mean = sum/count; 
     stdDev = sum - (count * mean); 

     System.out.println("The mean is " + mean + "."); 
     System.out.println("The standard deviation is " + stdDev + "."); 
    } 
} 
+0

好抓。不知道我在那裏想什麼。固定 – khuderm

+0

這很有幫助,但我將如何分別訪問這些輸入以從平均值中減去然後平方? –

+0

這並沒有給出標準偏差的正確答案。 –

0

對於總結10個用戶輸入的數字,您可以只使用一個變量和+ =運算符來跟蹤總和。不需要有太多的變量,這就是循環的目的!例如,

double sum = 0; 
Scanner input = new Scanner (System.in); 
int counter = 1; 
System.out.println("Enter 10 numbers: "); 
//adds up 10 user-inputted numbers 
while(counter <= 10){ 
    sum += input.nextDouble(); 
    //how the loop will end after 10th iteration 
    counter++; 
} 
double mean = sum/10; //no need for double cast here since sum is a double 

不陣列,這將是難以計算使用循環,因爲我們需要訪問個人數字中尋找標準偏差的標準偏差。因此,除非我們再次使用與上面類似的while循環來輸入相同的10個數字以找到方差,否則您的解決方案確實是唯一的方法。例如,

//reset counter 
counter = 1; 
double variance = 0; 
System.out.println("Enter 10 numbers: "); 

while(counter <= 10){ 
    variance += Math.pow(input.nextDouble()-mean,2); 
    counter++; 
} 
double stdDev = Math.sqrt(variance/10); 
System.out.println ("The mean is " + mean + "."); 
System.out.println ("The standard deviation is " + stdDev + "."); 
+0

硬編碼的東西總是不好的做法 – khuderm

+0

你是什麼意思?我只是提供一個使用循環的例子,就像用戶所要求的那樣?因爲用戶不能使用數組,所以這只是解決他的問題的一種可能方案。 –

0

這是帶有循環的更新代碼。

public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    double sum = 0; 
    double sqSum = 0; 

    System.out.println("Enter 10 numbers: separte by space"); 
    for (int i = 0 ; i < 10 ; i++){ 
     double val = input.nextDouble(); 
     sum += val; 
     sqSum += val * val; 
    } 

    double mean = sum/10; 
    double stdDev = sqSum/10 - mean * mean; 
    System.out.println("The mean is " + mean + "."); 
    System.out.println("The standard deviation is " + stdDev + "."); 
} 
+0

這可以通過一個循環來實現 – khuderm

+0

是的,我們可以做到這一點 –

+0

請注意,海報不希望使用數組。 –

0

如果你可以學習數組,那麼做這些事情是非常容易的。可能這將需要短短半小時內,但它會使你的編程生活了很多easy.Here的我使用數組提供均值和10個數字標清的例子:

import java.util.*; 
    class Test 
    { 
    public static void main (String [] args) 
     { 
      System.out.println("Enter 10 numbers to find standard deviation"); 
      Scanner in = new Scanner (System.in); 
      double[] arr= new double [10]; 
      double sum=0, mean=0; 
      for (inti=0; i<10; i++) //Take input in the array 
     { 
       System.out.print("Enter a number : "); 
       arr[i]=in.nextDouble(); 
       sum+=arr[i]; //sum of all elements 
     } 
      mean=sum/10; 
      sum=0; 
      System.out.println("Mean : "+mean); //Display mean of all elements 
      double [] temp= new double[10]; 
      for (inti=0; i<10; i++) //calculate standard deviation 
     { 
       temp[i]=Math.pow((arr[i]-mean),2); 
       sum+=temp[i]; 
     } 
      mean=sum/10; 
      double deviation=Math.sqrt(mean); 
      System.out.println("Deviation : "+ deviation); 
     } 
    }