2015-07-10 84 views
-2

我在將數值存儲到我的monthlySales數組中時遇到問題。另外,如何檢索其他方法中使用的值,如totalSales?另外,我在getSales()方法中有錯誤。數組Java初學者

import java.util.Scanner; 
import java.text.DecimalFormat; 


public class SalesTracking 
{ 
    static DecimalFormat f = new DecimalFormat ("$#,##0.00"); 
    static Scanner input = new Scanner (System.in); //create a scanner object that reads from the keyboard (System.in) 
    private static final double[] monthlySales = new double[12]; //create monthlysales array 
    private static final String[] monthArray = {"January" , "February" , "March" , "April", "May", 
       "June", "July", "August", "September", "October", 
       "November", "December"}; //create 12-month array 
    static void getSales(){ 
     int size = monthArray.length; 
     for (int i = 0; i < size; i++){ 
     System.out.print("Please Enter Sales for " + monthArray[i] + ":"); 
     monthlySales[i] = input.nextDouble(); 
     } //get sales method to store values into monthlysales 
    } 


    public static void main(String[] args){ 

     getSales(); 
     totalSales(); 
     computeHighestMonth(monthlySales); 
     computeLowestMonth(monthlySales); 
+1

'getSales()'是'main()'方法中的方法。你不能這樣做! – John3136

+0

'getSales'在另一個方法中聲明,你不能做這個Java,你需要移動,所以它在方法的外側 – MadProgrammer

+0

你可能還想看看[將信息傳遞給方法或構造函數]( https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html) – MadProgrammer

回答

3

好的,讓我們分解你的多個子問題。

無法將值存儲到我的monthlySales數組中。

首先,避免C語法,寫你的宣言是:

private static final double[] monthlySales = new double[12];

這強調monthlySalesdouble[]類型。現在,爲您的問題。下面的線是什麼給你麻煩。

monthlySales = input.nextDouble();

當你宣佈monthlySalesfinal,這實際上意味着你不能有引用變量指向別的。在這裏,您試圖將變量點設置爲double,這不可能發生,因爲變量必須指向double[]final聲明。

希望此相反,其中數組中改變價值觀是完全正常的(Java的final關鍵字是有點怪):

monthlySales[i] = input.nextDouble();

再加上我對公共靜態無效getSales錯誤( ) 方法。

這是因爲您已經定義了getSales方法main()內。在Java中,你不能在其他方法中定義方法(但是你可以用類來完成)。

我相信你想完全去掉getSales定義,因爲你的主客戶端似乎是從標準輸入讀取的。如果您需要從另一個類訪問數組,請在main之外定義getter方法。

另外我怎樣才能檢索到其他方法,如totalSales使用的值?

因爲您分配的值的靜態成員monthlySalesmonthArray,你已經可以從其他靜態方法來訪問這些變量。

請注意,由於您沒有非靜態變量或方法,因此無法有意義地創建多個實例SalesTracking,因爲所有實例都將共享同一組數據。上的空隙(無效型)和getSales

錯誤(參數getSales非法改性劑;只有最終被允許)

這些幹從getSales定義的main內部。如果你在外面定義方法或完全刪除它,你會沒事的。

編輯:解決您的getSales()像這樣:

public static void getSales() { 
    try (
     Scanner input = new Scanner(System.in); // try-with-resources 
    ) { 
     int size = monthArray.length; 
     for (int i = 0; i < size; i++){ 
      System.out.print("Please Enter Sales for " + monthArray[i] + ":"); 
      monthlySales[i] = input.nextDouble(); 
     } 
    } catch (IOException e) { 
     System.out.println(e.getMessage()); 
    } 
} 

public static void main(String[] args) { 
    getSales(); 
} 
+0

太棒了!我很感激你的完全崩潰,它幫助了很多。我修正了以下錯誤,但是我需要在getSales()方法中添加掃描器,因爲我收到此錯誤*輸入無法解析* – MrMiyagi

+0

忽略錯誤修復* – MrMiyagi

+0

如果要製作getSales()方法並從中調用它main(),沒關係。在這種情況下,您的Scanner對象需要在getSales()中創建。我將編輯我的帖子以反映這一點。無法解決輸入錯誤來自沒有有效的Scanner實例。 –

0

就像在評論中已經說過的那樣,將這種方法移到主體之外。 更重要的是,你需要在main中創建這個類的一個實例,並且通過構造函數或者通過input來傳遞這個類的參數。

這裏是你的代碼的修改版本(我還沒有測試,但應該工作)

import java.util.Scanner; 

public class SalesTracking 
{ 
    private static final double monthlySales[] = new double[12]; 
    private static final String[] monthArray = {"January" , "February" , "March" , "April", "May", 
       "June", "July", "August", "September", "October", 
       "November", "December"}; 
    static void totalSales(){ 

    } 
    static void averageSales(){ 

    } 
    static void highestMonth(){ 

    } 
    static void lowestMonth(){ 

    } 

    public static void getSalesUsingStaticMethodWhichBelongsToClass(double input) 
    { 
     SalesTracking salesTracking = new SalesTracking(); 
     salesTracking.getSalesUsingNonStaticMethodWhichBelongsToInstanceAndRecommended(input); 

    } 

    public void getSalesUsingNonStaticMethodWhichBelongsToInstanceAndRecommended(double input) 
    { 
     int size = monthArray.length; 
     for (int i = 0; i < size; i++){ 
     System.out.print("Please Enter Sales for " + monthArray[i] + ":"); 
     monthlySales[i] = input; 
     } 

    } 

    public static void main(String[] args) 
    { 
     //create a scanner object that reads from the keyboard (System.in) 
     Scanner input = new Scanner (System.in); 
     getSalesUsingStaticMethodWhichBelongsToClass(input.nextDouble()); 

     //OR Using Instance which you should be using . No need to make class method static for no reason 
     SalesTracking salesTracking = new SalesTracking(); 
     salesTracking.getSalesUsingNonStaticMethodWhichBelongsToInstanceAndRecommended(input.nextDouble()); 


    }//end main 

}//end class 

朗這樣的方法名是不需要在主類,但是都還和推薦單位測試。我剛剛用它們來顯示exaplain的點

+0

感謝您的評論我們的教授希望所有方法都是靜態的。所有方法都應該是STATIC,因此不需要實例化對象來調用它們。所有方法都必須從主方法中調用。銷售額應該四捨五入到小數點後兩位。 。 – MrMiyagi

0

*:請使用JAVA JDK 1.8

實體:

class Sales { 

public Month getMonth() { 
    return month; 
} 

public void setMonth(Month month) { 
    this.month = month; 
} 

private Month month; 

public double getSales() { 
    return sales; 
} 

public void setSales(double sales) { 
    this.sales = sales; 
} 

private double sales; 

@Override 
public String toString() { 
    return "month->" + getMonth() + ",sales->" + getSales(); 
}} 

計算:

/** 
    * @author puruidong 
    * @version 2015-07-10 
    */ 
public class Main { 
private static final double monthlySales[] = new double[12]; 
private static final String[] monthArray = {"January", "February", "March", "April", "May", 
     "June", "July", "August", "September", "October", 
     "November", "December"}; 


private Set<Sales> salesList = new HashSet<Sales>(12); 


public void totalSales() { 

    double count = salesList.stream().mapToDouble(new ToDoubleFunction<Sales>() { 
     @Override 
     public double applyAsDouble(Sales value) { 
      return value.getSales(); 
     } 
    }).sum(); 
    System.out.println("total->" + count); 
} 

static void averageSales() { 

} 

static void highestMonth() { 

} 

static void lowestMonth() { 

} 

public void showSales() { 
    salesList.forEach((x) -> { 
     System.out.println(x.toString()); 
    }); 


} 

public void getSalesUsingNonStaticMethodWhichBelongsToInstanceAndRecommended(Scanner sc) { 
    int i = 0; 
    while (i <= 11) { 
     System.out.println("Please enter a month to be recorded?(1-12)"); 
     int months = sc.nextInt(); 
     Sales sales = new Sales(); 
     switch (Month.of(months)) { 
      case JANUARY: 
       sales.setMonth(Month.JANUARY); 
       break; 
      case FEBRUARY: 
       sales.setMonth(Month.FEBRUARY); 
       break; 
      case MARCH: 
       sales.setMonth(Month.MARCH); 
       break; 
      case APRIL: 
       sales.setMonth(Month.APRIL); 
       break; 
      case MAY: 
       sales.setMonth(Month.MAY); 
       break; 
      case JUNE: 
       sales.setMonth(Month.JUNE); 
       break; 
      case JULY: 
       sales.setMonth(Month.JUNE); 
       break; 
      case AUGUST: 
       sales.setMonth(Month.AUGUST); 
       break; 
      case SEPTEMBER: 
       sales.setMonth(Month.SEPTEMBER); 
       break; 
      case OCTOBER: 
       sales.setMonth(Month.OCTOBER); 
       break; 
      case NOVEMBER: 
       sales.setMonth(Month.NOVEMBER); 
       break; 
      case DECEMBER: 
       sales.setMonth(Month.DECEMBER); 
       break; 
      default: 
       System.err.println("--input error--"); 
       break; 
     } 
     if (sales.getMonth() != null) { 
      sc.reset(); 
      System.out.println("Please enter turnover:"); 
      double turnover = sc.nextDouble(); 
      sales.setSales(turnover); 
      salesList.add(sales); 
     } 
     i++; 
    } 
    showSales(); 
    System.out.println("----------------------------"); 
    totalSales(); 


} 

public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    Main salesTracking = new Main(); 
    salesTracking.getSalesUsingNonStaticMethodWhichBelongsToInstanceAndRecommended(input); 
}//end main 

}//end class 

結果:

Please enter a month to be recorded?(1-12) 
1 
Please enter turnover: 
1 
Please enter a month to be recorded?(1-12) 
2 
Please enter turnover: 
2 
Please enter a month to be recorded?(1-12) 
3 
Please enter turnover: 
3 
Please enter a month to be recorded?(1-12) 
4 
Please enter turnover: 
4 
Please enter a month to be recorded?(1-12) 
5 
Please enter turnover: 
5 
Please enter a month to be recorded?(1-12) 
6 
Please enter turnover: 
6 
Please enter a month to be recorded?(1-12) 
7 
Please enter turnover: 
7 
Please enter a month to be recorded?(1-12) 
8 
Please enter turnover: 
8 
Please enter a month to be recorded?(1-12) 
9 
Please enter turnover: 
9 
Please enter a month to be recorded?(1-12) 
10 
Please enter turnover: 
10 
Please enter a month to be recorded?(1-12) 
11 
Please enter turnover: 
11 
Please enter a month to be recorded?(1-12) 
12 
Please enter turnover: 
12 
------------------------------ 
month->DECEMBER,sales->12.0 
month->JANUARY,sales->1.0 
month->APRIL,sales->4.0 
month->AUGUST,sales->8.0 
month->MAY,sales->5.0 
month->MARCH,sales->3.0 
month->JUNE,sales->7.0 
month->OCTOBER,sales->10.0 
month->NOVEMBER,sales->11.0 
month->FEBRUARY,sales->2.0 
month->JUNE,sales->6.0 
month->SEPTEMBER,sales->9.0 
---------------------------- 
total->78.0