我正在尝试使用二维数组创建一种抛射物表。我需要帮助格式化此表的输出,因为我真的不知道如何去做。我也明白在驱动程序类中使用静态方法的方式非常尴尬;我对这方面的建议持开放态度。
/**
* Driver class
*
* @author Mark Davis
* @version 12/25/2013
*/
public class Driver
{
public static final int rows = 8, cols = 8;
public static void main(String[] args)
{
System.out.println("Test");
double[][] table = new double[rows][cols];
Catapult catapult = new Catapult();
for(int i = 0; (i < rows); i++)
{
for(int ii = 0; (ii < cols); ii++)
{
table[i][ii] = catapult.calcRange(v(ii), t(i));
System.out.print(table[i][ii] + " ");
}
}
printResults(table);
}
public static double v(int i)
{
return 20 + (5*i);
}
public static double t(int i)
{
return 25.0 + (5.0*i);
}
public static void printResults(double[][] a)
{
for(int i = 1; (i >= rows); i++)
{
for(int ii = 1; (ii >= cols); ii++)
{
System.out.print(a[i][ii] + " ");
}
System.out.println();
}
}
}
/**
* Catapult object class
*
* @author Mark Davis
* @version 12/25/2013
*/
public class Catapult
{
/**
* Constructor for objects of class Catapult
*/
public static final double g = 9.8;
private static int v;
private static double theta;
public Catapult()
{
}
public double calcRange(double v, double theta)
{
double l = (Math.pow(v, 2)*Math.sin(Math.toRadians(theta)))/g;
System.out.println(l);
return l;
}
public double getTheta()
{
return theta;
}
public int getV()
{
return v;
}
}
答案 0 :(得分:0)
只需快速浏览一下,我就注意到您使用的是“i&gt; = rows”而不是“i&lt; rows”。 现在你说“如果我比行大,那就加1”,这没什么意义。
尝试使用这些循环(也许可以解释实际问题是什么)
for(int i = 0; (i < rows); i++)
{
for(int ii = 0; (ii < cols); ii++)
{
Catapult catapult = new Catapult(v(ii), t(i));
table[i][ii] = catapult.calcRange();
System.out.print(table[i][ii] + " ");
}
}
答案 1 :(得分:0)
在做算法之前,你应该真正理解你的逻辑。因此,请检查您尝试执行的操作的总体逻辑(循环,对象的创建过程等)。
另外,要格式化表格(我想通过使用print来表示它是一个简单的输出),因此您可以使用Formatter()
格式化输出。
小片段
Formatter fmf = new Formatter();
System.out.print(fmf.format("2%d",10));
格式()中的所有结构都是这样的:
%[argument_index$][flags][width][.precision]conversion
有关您的更多信息find here