2011-11-03 48 views
0

在我能找到的所有其他情況下,這是由於代碼不在方法或不正確的包圍中,但是我已經檢查了所有這些。我的代碼是這樣的;爲什麼我會一直在這裏獲得.class?沒有通常的問題是罪魁禍首

import java.util.*; 
public class averages { 
    public static void main(String[] args) 
    { 
     //initializing 
     double mean = 0; 
     double deviation = 0; 
     int i = 0; 
     double dataset = new double[10]; 
     double sum = 0; 
     double subdev = 0; 
     double subsum = 0; 
     double dev = 0; 

     //getting the numbers 
     for (i = 0; i <= 9 ; i++) 
     { 
     Scanner input = new Scanner(System.in); 
     System.out.println("Enter a number"); 
     dataset[i] = input.nextDouble(); 
     } 

     //calling the function to get 
     avgarray(dataset[]); 
     System.out.println("Average is " + mean); 
     devequasion(dataset[]); 
     System.out.println("Deviation is " + subdev); 
    } 
    public static double avgarray(double[] arraydata) 
    { 
     sum = 0; 
     for (i = 0; i <= 9 ; i++) 
     { 
     sum += arraydata[i]; 
     } 
     mean = sum/10; 
     return mean; 
    } 

    public static double devequasion(double[] devdata) 
    { 
     subsum = 0; 
     for (i = 0; i <= 9 ; i++) 
     { 
     subsum += devdata[i]*devdata[i]; 
     } 
     dev = math.sqrt((sum - avgarray(devdata[]))/ 9.0); 
     return dev; 
    } 
} 

一切都看起來正確,但錯誤不會消失。

+1

你的代碼有很多錯誤 - 哪一項具體是你在尋求幫助?或者你是在要求我們走過並描述每一個(這對SO來說太長了)? – Tim

+0

我不知道.class期望,但你應該得到一些關於你的'double dataset = new double [10];' – Dogmatixed

+0

抱怨你編碼全錯了,因爲你不應該繼續添加新的代碼壞代碼。如果您沒有使用IDE,則應該經常編譯並在添加更多代碼之前更正所有編譯器錯誤***。 –

回答

3

您在那裏存在相當多的問題,例如:

  • 您對數據集的定義不正確。您創建一個雙精度數組,然後嘗試將其分配給單個double。
  • 您通過dataset[]而不是dataset
  • 您有使用,但沒有宣佈(meansumsubsumidev)在avgarraydevequasion變量。這些在main中聲明的事實不相關。
  • 另外,因爲他們只有在方法中使用了,所以它們在main中是不必要的,當然其他i)。
  • 您不輸入數據輸入的java.util.Scanner
  • 數學包是Math,大寫字母爲M

如果您使用Eclipse之類的IDE,您會發現查看和修復這些問題更容易。對於初學者,這是一個${DEITY}-send

通過一切手段泵你的代碼javac的最後一步,如果你有(無頭版本,兼容性等等),但與IDE做你的初始發展,你會發現它更快。

這裏與糾正那些語法問題,以及其他一些小的調整,如去除不必要的變量的版本:

import java.util.Scanner; 

public class testprog { 
    public static void main (String[] args) { 
     double[] dataset = new double[10]; 

     for (int i = 0; i <= 9 ; i++) { 
      Scanner input = new Scanner (System.in); 
      System.out.println ("Enter a number: "); 
      dataset[i] = input.nextDouble(); 
     } 

     System.out.println ("Average is " + avgarray (dataset)); 
     System.out.println ("Deviation is " + devequasion (dataset)); 
    } 

    public static double avgarray (double[] arraydata) { 
     double sum = 0; 
     for (int i = 0; i <= 9 ; i++) 
      sum += arraydata[i]; 
     return sum/10; 
    } 

    public static double devequasion (double[] devdata) { 
     double subsum = 0; 
     for (int i = 0; i <= 9 ; i++) 
      subsum += devdata[i] * devdata[i]; 
     return Math.sqrt ((subsum - avgarray (devdata))/9.0); 
    } 
} 

不要使用該逐字如果是家庭作業,你會假設你的教育工作者沒有主動搜索網絡剽竊是愚蠢的。

0

其中一個問題是

double dataset = new double[10]; 

應該

double[] dataset = new double[10]; 

而且

avgarray(dataset[]); 

應該

avgarray(dataset); 
+0

不要看我是如何錯過的,謝謝。然而,編譯器出來沒有改變,所以看起來不像。仍然會顯示.class期望 – hyperhopper

+0

以及它引用的3次需要修復。 – TJR

0

我知道這不是一個修復我的代碼板,但有太多的錯誤讓我指出並告訴你在哪裏以及如何修復它們。修復併發布整個代碼並在大量錯誤旁邊添加註釋比較容易。你需要明白變量有範圍。

import java.util.*; 

public class averages { 
    public static void main(String[] args) 
    { 
     //initializing 
     double dataset[] = new double[10]; // FIXED (added []) 

     //getting the numbers 
     for (int i = 0; i <= 9 ; i++) 
     { 
     Scanner input = new Scanner(System.in); 
     System.out.println("Enter a number"); 
     dataset[i] = input.nextDouble(); 
     } 

     //calling the function to get 
     avgarray(dataset); // FIXED (removed []) 
     System.out.println("Average is " + avgarray(dataset)); // FIXED (calls avgarray) 
     devequasion(dataset); 
     System.out.println("Deviation is " + devequasion(dataset)); // FIXED (calls devequasion) 
    } 
    public static double avgarray(double[] arraydata) 
    { 
     double sum = 0; // FIXED (sum wasn't declared) 
     for (int i = 0; i <= 9 ; i++) // FIXED (i wasn't declared) 
     { 
     sum += arraydata[i]; 
     } 
     double mean = sum/10; 
     return mean; 
    } 

    public static double devequasion(double[] devdata) 
    { 
     double subsum = 0; // FIXED (declared subsum) 
     for (int i = 0; i <= 9 ; i++) // FIXED (declared i) 
     { 
     subsum += devdata[i]*devdata[i]; 
     } 
     // FIXED (removed [], declared dev, changed "sum" to "subsum", "math" to "Math") 
     double dev = Math.sqrt((subsum - avgarray(devdata))/ 9.0); 
     return dev; 
    } 
} 

這會讓它編譯,任何斷開的邏輯取決於你。

編輯:對不起意外地發佈了一個不完整的版本,在我的剪貼板,現在修復。

EDIT2:另外值得一提的是,你應該用你的array.length for循環,而不是硬編碼這些值。此外,對於循環一定次數,i = 0; i< 10可以看起來更清晰,您要迭代10次而不是i <= 9

0

你似乎有整個代碼流3個主要問題:

  1. 你似乎沒有已經得到你的頭圍繞Java數組
  2. 你似乎並不理解Java的作用域規則
  3. 再加上上面,你不處理函數的返回值正常

我不知道這其中的一個是你問的主要問題,但在這裏不用...

有些事情是可能的東西,你已經知道了,但我從頭開始,以確保我不會跳過你已經錯過

陣列是固定大小的數值序列。 所以double[10]是一個數組,有10個值,每個類型的數值爲double 但是double本身並不是一個數組,它是一個單個值,類型爲double

所以這行:

double dataset = new double[10]; 

沒有意義。你的意思是稱爲dataset的變量是雙精度型,但是你試着把一個雙精度數組放入該變量中。這是行不通的。

要麼你想要數據集是一個數組,或者你想它是一個單一的值,但它不能同時存在。 也許你想

double[] dataset = new double[10]; 

後來,你有這樣的詩句:

avgarray(dataset[]); 
devequasion(dataset[]); 

這些線都沒有有效的Java代碼 - 它看起來像你試圖解決有問題宣稱dataset是錯誤的類型,但你的解決方法是不正確的。

如果更改數據集的聲明是一個double[],那麼你可以簡單地有

avgarray(dataset); 
devequasion(dataset); 

,它會做你想要什麼。

在Java中,每個變量都有一個範圍。範圍定義變量存在的時間以及可以使用的位置。

因此,作爲示例,您在main方法內聲明sum。這意味着該變量的作用域僅在該方法內存在。您不能在另一種方法中使用它(要麼獲取值,要麼設置值) - 即使從main調用了其他方法。這意味着在你的avgarray方法中,你有

sum = 0; 

這是錯誤的。你不能這樣做,因爲sum在這個方法中不存在。

您需要從main中刪除sum的聲明(因爲您從未使用過它),並在avgarray中聲明它。

你有一些需要治療的變量。

在某些情況下,您在兩種不同的方法中使用相同的變量。要做到這一點,您需要將該變量設置爲類的成員,而不是該方法。

所以,作爲一個例子,如果你希望兩個方法來使用mean變量,那麼它應該是宣佈這樣一個成員變量:

public class averages 
{ 
    private static double mean = 0; 
    public static void main(String[] args) 
    { 
    // ... 

,這可能不是正確的方式做你想做的事情。

如果你看看你的avgarray方法,你看到它回報類型的值double

public static double/ avgarray(double[] arraydata) 

和方法內你正確return mean; 但是當你把它avgarray(dataset);你不看在返回值。

你想要做什麼而不是有2個變量叫做「mean」。一個在main之內,另一個在avgarray之內。由於Java的範圍規則,它們是恰好具有相同名稱的完全不同的變量。

如果你這樣做,那麼你可以寫

public static void main(String[] args) 
{ 
    // .... 
    double mean = avgarray(dataset); 
    // .... 
} 

public static double avgarray(double arraydata) 
{ 
    // ... 
    double mean = sum/10; 
    return mean; 
} 

考慮到一些其他的答案都爲您提供了該解決的一些問題的代碼版本,你應該能夠拼湊它一起從我的解釋和他們的固定。

祝你好運!

相關問題