2015-04-01 70 views
0

我正在编写一个程序,显示公司6个不同部门的季度销售额。试图获得销售额最高的部门

我大部分都在工作,但是当我尝试在每个季度显示销售额最高的部门时,它就不起作用。

编辑:我得到所有的输出正确读取,但我现在的问题是检查输入的数字是否> = 0,我试过如果语句和while循环,并做while循环,但我不能出来。

编辑2:我更新了代码以匹配我当前的代码。

import java.util.Scanner; 

public class SalesByQuarter 
{ 
    public static void main(String[] args) 
    { 
     int divs = 6; 
     int qtrs = 4; 
     double totalSales = 0.0; 
     double errorCheck; 

    double[][] sales = new double[divs][qtrs]; 


    Scanner keyboard = new Scanner(System.in); 


    System.out.println("This program will calculate the " + 
         "total sales of"); 
    System.out.println("all the company's divisions. " + 
         "Enter the following sales data:"); 

    System.out.println(); 



     for (int div = 0; div < divs; div++) 
     { 
      for (int qtr = 0; qtr < qtrs; qtr++) 
      { 
       System.out.printf("Division %d, Quarter %d: $", 
           (div + 1), (qtr + 1)); 
       errorCheck = keyboard.nextDouble(); 
       sales[div][qtr] = errorCheck; 
      } 
      System.out.println(); 
     } 


     if (errorCheck < 0) 
     { 
      System.out.println("Positive numbers only please!"); 
      for (int div = 0; div < divs; div++) 
      { 
       for (int qtr = 0; qtr < qtrs; qtr++) 
       { 
        System.out.printf("Division %d, Quarter %d: $", 
            (div + 1), (qtr + 1)); 
        errorCheck = keyboard.nextDouble(); 
        sales[div][qtr] = errorCheck; 
       } 
       System.out.println(); 
      } 
     } 

     else 
     { 
      for (int div = 0; div < divs; div++) 
      { 
       for (int qtr = 0; qtr < qtrs; qtr++) 
       { 
        totalSales += sales[div][qtr]; 
       } 
      } 


      double[] divsales = new double[divs]; 


      for (int div = 0; div < divs; div++) 
      { 
       for (int qtr = 0; qtr < qtrs; qtr++) 
       { 
        divsales[div] += sales[div][qtr]; 
       } 
       System.out.printf("Division %d sales: $%,.2f\n", (div + 1), divsales[div]); 
      } 


      System.out.println(); 


      for (int div = 1; div < divs; div++) 
      { 
       if ((divsales[div] - divsales[div - 1]) > 0) 
       { 
        System.out.printf("Division %d increase over its previous quarter: $%,.2f\n", (div + 1), divsales[div] - divsales[(div - 1)]); 
       } 
       else if ((divsales[div] - divsales[div - 1]) < 0) 
       { 
        System.out.printf("Division %d decrease from its previous quarter: $%,.2f\n", (div + 1), divsales[div] - divsales[(div - 1)]); 
       } 
       else 
       { 
        System.out.printf("Division %d had no increase or decrease from its previous quarter.\n", (div + 1)); 
       } 
      } 


      System.out.println(); 


      double[] qtrsales = new double[qtrs]; 


      for (int div = 0; div < divs; div++) 
      { 
       for (int qtr = 0; qtr < qtrs; qtr++) 
       { 
        qtrsales[qtr] += sales[div][qtr]; 
       } 
      } 




      for (int qtr = 0; qtr < qtrs; qtr++) 
      { 
       System.out.printf("Total sales for quarter: %d: $%,.2f\n", (qtr + 1), qtrsales[qtr]); 
      } 


      System.out.println(); 


      for (int qtr = 0; qtr < qtrs; qtr++) 
      { 
       System.out.printf(" Average sale for quarter: %d: $%,.2f\n", (qtr + 1), (qtrsales[qtr]/divs)); 
      } 


      System.out.println(); 


      int highestDiv = 0; 
      int[] highestDivi = new int[qtrs]; 
      for (int qtr = 0; qtr < qtrs; qtr++) 
      { 
       highestDiv = 0; 
       for (int div = 0; div < (divs - 1); div++) 
       { 
        if (sales[highestDiv][qtr] < sales[(div + 1)][qtr]) 
        { 
         highestDiv = (div + 1); 
        } 
       } 
       highestDivi[qtr] = highestDiv; 
      } 

      for (int qtr = 0; qtr < qtrs; qtr++) 
      { 
       System.out.printf("Division %d had the highest sales in quarter %d\n", qtr + 1, highestDivi[qtr] + 1); 
      } 
     } 

    } 

} 
+0

上一个'printf'文本使得它看起来像只打印分割数字而不打印其总销售额,但由于上面的行不是'highestDivi',所以保留销售值,例如:'highestDivi [qtr] =销售[div + 1] [qtr]'?或者我错过了什么? – 2015-04-01 23:39:07

+0

你是对的,这就是我来这里寻求帮助的原因:/ – PrettyNovice 2015-04-01 23:41:42

+0

对于初学者来说,你不需要一个数组来追踪最高值你只需要一个双变量(我们只关心我们正在工作的季度)。然后将分区号保存在一个int []中,您应该可以使其工作。但是,这些循环中的布尔逻辑没有任何意义,因此您需要仔细重新思考该逻辑需要完成的内容。 – 2015-04-01 23:48:11

回答

0

看起来你有一些语义错误。我改变了你找到每季度销售额最高的部门。

int highestDivi[] = new int[qtrs]; 

double highestDiv = 0; 
for (int qtr = 0; qtr < qtrs; qtr++) 
{ 
    highestDiv = 0; 
    for (int div = 0; div < divs; div++) 
    { 
     if (highestDiv < sales[div][qtr]) 
     { 
      highestDivi[qtr] = div; 
      highestDiv=sales[div][qrt]; 
     } 
    } 
} 

关于编辑2: 我改变在用户输入的销售部分,你应该删除错误检查代码中的if语句。

for (int div = 0; div < divs; div++) 
{ 
    for (int qtr = 0; qtr < qtrs; qtr++) 
    { 
     System.out.printf("Division %d, Quarter %d: $", 
         (div + 1), (qtr + 1)); 
     errorCheck = keyboard.nextDouble(); 
     while(errorCheck<0) { 
      System.out.println("Positive numbers only please!"); 
      System.out.printf("Division %d, Quarter %d: $", 
         (div + 1), (qtr + 1)); 
      errorCheck = keyboard.nextDouble(); 
     } 
     sales[div][qtr] = errorCheck; 
    } 
    System.out.println(); 
} 

一切都应该像下面

public class SalesByQuarter 
{ 
    public static void main(String[] args) 
    { 
     int divs = 6; 
     int qtrs = 4; 
     double totalSales = 0.0; 
     double errorCheck; 

    double[][] sales = new double[divs][qtrs]; 


    Scanner keyboard = new Scanner(System.in); 


    System.out.println("This program will calculate the " + 
         "total sales of"); 
    System.out.println("all the company's divisions. " + 
         "Enter the following sales data:"); 

    System.out.println(); 


     for (int div = 0; div < divs; div++) 
     { 
      for (int qtr = 0; qtr < qtrs; qtr++) 
      { 
       System.out.printf("Division %d, Quarter %d: $", 
           (div + 1), (qtr + 1)); 
       errorCheck = keyboard.nextDouble(); 
       while(errorCheck<0) { 
        System.out.println("Positive numbers only please!"); 
        System.out.printf("Division %d, Quarter %d: $", 
           (div + 1), (qtr + 1)); 
        errorCheck = keyboard.nextDouble(); 
       } 
       sales[div][qtr] = errorCheck; 
      } 
      System.out.println(); 
     } 





     for (int div = 0; div < divs; div++) 
     { 
      for (int qtr = 0; qtr < qtrs; qtr++) 
      { 
       totalSales += sales[div][qtr]; 
      } 
     } 


     double[] divsales = new double[divs]; 


     for (int div = 0; div < divs; div++) 
     { 
      for (int qtr = 0; qtr < qtrs; qtr++) 
      { 
       divsales[div] += sales[div][qtr]; 
      } 
      System.out.printf("Division %d sales: $%,.2f\n", (div + 1), divsales[div]); 
     } 


     System.out.println(); 


     for (int div = 1; div < divs; div++) 
     { 
      if ((divsales[div] - divsales[div - 1]) > 0) 
      { 
       System.out.printf("Division %d increase over its previous quarter: $%,.2f\n", (div + 1), divsales[div] - divsales[(div - 1)]); 
      } 
      else if ((divsales[div] - divsales[div - 1]) < 0) 
      { 
       System.out.printf("Division %d decrease from its previous quarter: $%,.2f\n", (div + 1), divsales[div] - divsales[(div - 1)]); 
      } 
      else 
      { 
       System.out.printf("Division %d had no increase or decrease from its previous quarter.\n", (div + 1)); 
      } 
     } 


     System.out.println(); 


     double[] qtrsales = new double[qtrs]; 


     for (int div = 0; div < divs; div++) 
     { 
      for (int qtr = 0; qtr < qtrs; qtr++) 
      { 
       qtrsales[qtr] += sales[div][qtr]; 
      } 
     } 




     for (int qtr = 0; qtr < qtrs; qtr++) 
     { 
      System.out.printf("Total sales for quarter: %d: $%,.2f\n", (qtr + 1), qtrsales[qtr]); 
     } 


     System.out.println(); 


     for (int qtr = 0; qtr < qtrs; qtr++) 
     { 
      System.out.printf(" Average sale for quarter: %d: $%,.2f\n", (qtr + 1), (qtrsales[qtr]/divs)); 
     } 


     System.out.println(); 


     int highestDiv = 0; 
     int[] highestDivi = new int[qtrs]; 
     for (int qtr = 0; qtr < qtrs; qtr++) 
     { 
      highestDiv = 0; 
      for (int div = 0; div < (divs - 1); div++) 
      { 
       if (sales[highestDiv][qtr] < sales[(div + 1)][qtr]) 
       { 
        highestDiv = (div + 1); 
       } 
      } 
      highestDivi[qtr] = highestDiv; 
     } 

     for (int qtr = 0; qtr < qtrs; qtr++) 
     { 
      System.out.printf("Division %d had the highest sales in quarter %d\n", qtr + 1, highestDivi[qtr] + 1); 
     } 

    } 

} 

干杯!

+0

'highestDiv'是一个'int',但您将它与'sales [div] [qtr]'比较,这是一个double。你确定这就是你的意思吗? – 2015-04-01 23:25:53

+0

QuarterSales.java:166:error:找不到符号 highestDiv = sales [div] [qrt]; ^ 符号:可变QRT 位置:类QuarterSales QuarterSales.java:166:错误:不兼容的类型:从 双可能有损转换到int highestDiv =销售[DIV] [QRT]; ^ 2错误 – PrettyNovice 2015-04-01 23:29:15

+0

我需要输出最高的除法作为int,它需要是1-6。 – PrettyNovice 2015-04-01 23:34:07