我必须将列中二维数组的行总和添加到右侧。但是,当我运行代码时,它会添加每列中所有行的总和,直到它到达结尾。像这样:http://i.imgur.com/7CCPu.png总和是正确的,但假设每行只下一次。
public static void main(String[] args) throws IOException
{
// TODO code application logic here
File election = new File("voting_2008.txt");
Scanner sc = new Scanner(election);
String[] states = new String[51];
int[][]votes = new int[51][4];
int[] Totalbystate = new int[votes.length];
for (int s=0; s < 51; s++)
{
states[s] = sc.nextLine();
}
for(int c=0; c < 3; c++)
{
for(int s=0; s < 51; s++)
{
votes[s][c] = sc.nextInt();
}
}
Formatter fmt = new Formatter();
fmt.format("%20s%12s%12s%12s%21s", "State", "Obama", "McCain", "Other", "Total by state");
System.out.println(fmt);
for (int s=0; s < 51; s++)
{
fmt = new Formatter();
fmt.format("%20s", states[s]);
System.out.print(fmt);
for(int c=0; c < 3; c++)
{
fmt = new Formatter();
fmt.format("%12d", votes[s][c]);
System.out.print(fmt);
}
for(int row=0; row < votes.length; row++)
{
int sum =0;
for (int col=0; col < votes[row].length; col++)
{
sum = sum + votes[row][col];
}
fmt = new Formatter();
fmt.format("%21d", sum);
System.out.print(fmt);
}
System.out.println();
}
}
}
答案 0 :(得分:1)
for(int row=0; row < votes.length; row++)
{
int sum =0;
for (int col=0; col < votes[row].length; col++)
{
sum = sum + votes[row][col];
}
fmt = new Formatter();
fmt.format("%21d", sum);
System.out.print(fmt); // You are not printing newline after each vote..
}
尝试使用: - System.out.println(fmt);
代替注释代码..
更新: - 不要执行上述更改 ..无法正常工作..确实做了以下更改。
这是问题..你正在打印你的total no of votes
,51 * 51次..你在另一个循环里面已经有了这个循环,它已经运行了51次..
所以,来解决你的问题 ..从上面的代码中删除外部循环,并保持这样: -
//for(int row=0; row < votes.length; row++) // Remove this loop
//{ // Remove this
int sum =0;
for (int col=0; col < votes[s].length; col++)
{
sum = sum + votes[s][col];
}
fmt = new Formatter();
fmt.format("%21d", sum);
System.out.print(fmt);
//} // Remove this also..
您从最外层循环获得的s
的值..
更新: - 如果您需要所有投票的总和..对于所有列..
int totalSum = 0; // Declare a variable outside it..
for (int s=0; s < 51; s++) // This is the place where the loop started
{
fmt = new Formatter();
fmt.format("%20s", states[s]);
System.out.print(fmt);
// Other inner loops
int sum =0; // Your innerloop that calculates sum of each state..
for (int col=0; col < votes[s].length; col++)
{
sum = sum + votes[s][col];
}
totalSum += sum; // Add sum to `totalSum`
fmt = new Formatter();
fmt.format("%21d", sum);
System.out.print(fmt);
// Continue with the outer loop
}