数组Java初学者

数组Java初学者,java,arrays,Java,Arrays,我无法将值存储到我的monthlySales数组中。另外,如何检索要在其他方法(如totalSales)中使用的值?另外,我在getSales()方法中有错误 import java.util.Scanner; import java.text.DecimalFormat; public class SalesTracking { static DecimalFormat f = new DecimalFormat ("$#,##0.00"); static Scanner

我无法将值存储到我的
monthlySales
数组中。另外,如何检索要在其他方法(如
totalSales
)中使用的值?另外,我在
getSales()
方法中有错误

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);
import java.util.Scanner;
导入java.text.DecimalFormat;
公共类销售跟踪
{
静态DecimalFormat f=新的DecimalFormat($#,##0.00”);
静态扫描仪输入=新扫描仪(System.in);//创建从键盘(System.in)读取的扫描仪对象
private static final double[]monthlySales=new double[12];//创建monthlySales数组
私有静态最终字符串[]monthArray={“一月”、“二月”、“三月”、“四月”、“五月”,
“六月”、“七月”、“八月”、“九月”、“十月”,
“十一月”、“十二月”};//创建12个月数组
静态void getSales(){
int size=monthArray.length;
对于(int i=0;i
正如评论中所说,将此方法移到main之外。 然后,您需要在main中创建此类的实例,并通过构造函数或作为参数传递
input

这是您的代码的修改版本(我没有测试过,但应该可以工作)

import java.util.Scanner;
公共类销售跟踪
{
私人静态最终双月销售[]=新双月[12];
私有静态最终字符串[]monthArray={“一月”、“二月”、“三月”、“四月”、“五月”,
“六月”、“七月”、“八月”、“九月”、“十月”,
“11月”、“12月”};
静态无效totalSales(){
}
静态无效平均销售额(){
}
静态空隙最高月份(){
}
静态无效下限月(){
}
公共静态void getSalesUsingStaticMethodWhichBelongsToClass(双输入)
{
SalesTracking SalesTracking=新建SalesTracking();
salesTracking.GetSalesUsingNonStaticMethod,该方法属于实例和建议(输入);
} 
public void GetSalesUsingNonStaticMethod,该方法属于实例和建议(双输入)
{
int size=monthArray.length;
对于(int i=0;i


像这样的长方法名称在主类中不需要,但在单元测试中是可以使用的,建议使用。我刚刚用它们来说明问题的要点

无法将值存储到monthlySales数组中

首先,避免使用C语法,并将声明编写为:

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

这强调了
monthlySales
属于
double[]
类型。现在,请回答您的问题。下面一行是给您带来麻烦的原因

monthlySales=input.nextDouble();

当您将
monthlySales
声明为
final
时,实际上意味着您不能让引用变量指向任何其他对象。在这里,您试图使变量指向一个
双精度
,这两种情况都不能发生,因为变量必须指向一个
双精度[]
最终声明

相反,您希望这样做,因为更改数组中的值非常好(Java的
final
关键字有点奇怪):

monthlySales[i]=input.nextDouble();

另外,我在publicstaticvoidgetsales()方法上有错误

这是因为您已经在
main()
中定义了
getSales
方法。在Java中,您不能在其他方法中定义方法(但是可以通过类来定义)

我相信您希望完全去掉
getSales
定义,因为您的主客户端似乎是从标准输入读取的。如果您需要从另一个类访问数组,请在
main
之外定义getter方法

另外,如何检索要在其他方法(如totalSales)中使用的值

由于您已将值分配给静态成员
monthlySales
monthArray
,因此您已经可以从其他静态方法访问这些变量

请注意,由于没有非静态变量或方法,因此无法有意义地创建多个
SalesTracking
实例,因为所有实例将共享同一组数据

void(无效类型)和getSales(参数getSales的修饰符非法;只允许final)上的错误

这些源于
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();
}
publicstaticvoidgetsales(){
试一试(
Scanner input=new Scanner(System.in);//尝试使用资源
) {
int size=monthArray.length;
用于(int i)
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();
}
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