重复的局部变量和变量无法解析

我的java代码中有三个不同的错误,有什么帮助吗?

错误一:重复的局部变量产品。

int product = input.nextInt(); 

错误2:无法将productTotal解析为变量。

 System.out.printf( "%10.2f\n", productTotal ); 

错误3:无法将salesPersonTotal解析为变量。

 System.out.printf( "%14.2f", salesPersonTotal[ column ]); 

Java代码:

 import java.util.Scanner; class TotalSales { public static void main( String args[] ) { Scanner input = new Scanner( System.in ); double sales[][] = new double [ 5 ] [ 4 ]; System.out.print( "Enter salesperson number (-1 to end): " ); int person = input.nextInt(); while ( person != -1 ) { System.out.print( "Enter product number: "); int product = input.nextInt(); while ( person != -1 ) { System.out.print( "Enter product number: " ); int product = input.nextInt(); System.out.print( "Enter sales amount: "); double amount = input.nextDouble(); if ( person >= 1 && person = 1 && product =0 ) sales[ product - 1 ] [ person -1 ] += amount; else System.out.println("Invalid input!" ); System.out.print( "Enter slaesperson number (-1 to end): " ); person = input.nextInt(); } double salesPersonTotal [] = new double[ 4 ]; for (int column = 0; column < 4; column++ ) salesPersonTotal[ column ] = 0; System.out.printf( "%8s%14s%14s%14s%14s%10s\n", "Product", "Salesperson 1", "Salesperson 2", "Salesperson 3", "Salesperson 4", "Total" ); for ( int row = 0; row < 5; row++ ) { double productTotal = 0.0; System.out.printf( "%8d", (row+1)); for ( int column = 0; column < 4; column ++ ) { System.out.printf( "%14.2f", sales[row] [column]); productTotal += sales[row][column]; salesPersonTotal[column] += sales[row][column]; } System.out.printf( "%10.2f\n", productTotal ); } System.out.printf( "%10.2f\n", productTotal ); } System.out.printf( "%8s", "Total" ); for (int column = 0; column < 4; column++ ) System.out.printf( "%14.2f", salesPersonTotal[ column ]); System.out.println(); } } 

附加信息:

问题:(TotalSales)使用二维数组来解决以下问题:公司有四个销售人员(1到4)销售五种不同的产品(1到5)。 每天一次,每个销售人员都会为每种销售的产品传递一份单据。 每张单据包含以下内容:

a)销售人员编号(1至4)
b)产品编号
c)当天销售的产品(1至5)的总美元价值。 因此,每个销售人员每天传递0到5个销售单。

假设上个月所有单据的信息都可用。 编写一份应用程序,读取上个月销售的所有信息,并按销售人员和产品汇总总销售额。 所有总计应存储在二维数组销售中。 处理完一个月的所有信息(数据文件中的所有记录)后,以表格格式显示结果,每列代表特定产品,每行代表特定销售人员。 每行交叉总计以获得该月每种产品的总销售额。 对每一列进行交叉总计,以获得该销售人员当月的总销售额。 表格输出应包括总计行右侧和总计列底部的这些总计。

使变量成为全局变量,您只能将变量声明一次:

 import java.util.Random; import java.util.Scanner; class TotalSales { public static void main( String args[] ) { Scanner input = new Scanner( System.in ); double sales[][] = new double [ 5 ] [ 4 ]; double productTotal = 0.0; double salesPersonTotal [] = new double[ 4 ]; System.out.print( "Enter salesperson number (-1 to end): " ); int person = input.nextInt(); while ( person != -1 ) { System.out.print( "Enter product number: "); int product = input.nextInt(); while ( person != -1 ) { System.out.print( "Enter product number: " ); product = input.nextInt(); System.out.print( "Enter sales amount: "); double amount = input.nextDouble(); if ( person >= 1 && person <5 && product >= 1 && product <6 && amount >=0 ) sales[ product - 1 ] [ person -1 ] += amount; else System.out.println("Invalid input!" ); System.out.print( "Enter slaesperson number (-1 to end): " ); person = input.nextInt(); } for (int column = 0; column < 4; column++ ) salesPersonTotal[ column ] = 0; System.out.printf( "%8s%14s%14s%14s%14s%10s\n", "Product", "Salesperson 1", "Salesperson 2", "Salesperson 3", "Salesperson 4", "Total" ); for ( int row = 0; row < 5; row++ ) { System.out.printf( "%8d", (row+1)); for ( int column = 0; column < 4; column ++ ) { System.out.printf( "%14.2f", sales[row] [column]); productTotal += sales[row][column]; salesPersonTotal[column] += sales[row][column]; } System.out.printf( "%10.2f\n", productTotal ); } System.out.printf( "%10.2f\n", productTotal ); } System.out.printf( "%8s", "Total" ); for (int column = 0; column < 4; column++ ) System.out.printf( "%14.2f", salesPersonTotal[ column ]); System.out.println(); } } 

您声明了产品两次,当它们超出范围时,您会引用productTotal和salesPersonTotal。 尝试更改第二个产品变量的名称(如果您的解决方案没有问题,请使用相同的变量),并尝试声明productTotal和salesPersonTotal一个范围块。

在循环内创建的任何变量都是循环的局部变量。 这意味着一旦退出循环,就无法再访问该变量。 如果要在离开循环后使用变量,则必须事先在外部循环或方法范围内声明它。