Java 将数据放入2d数组,并将其打印到预先定义的位置

Java 将数据放入2d数组,并将其打印到预先定义的位置,java,arrays,Java,Arrays,我真的不知道如何将数据(基于行和列的单元格+放入单元格的值)放入2d数组(因此,正如您所看到的,我放入数组的内容是错误的),然后将数据显示在正确的位置。编写了3个数据示例。我用for循环创建了表。我还在寻找解决方案,所以如果我找到了,我也会在这里说。谢谢 编辑,我按照您的建议重新创建了表,我不能只创建一个方法put(int row,int col,double value)的原因是我想使用一个字符串单元格,它结合了2。如果我想在单元格中输入值,程序需要识别sh.put(“11”,1)需要在单元格

我真的不知道如何将数据(基于行和列的单元格+放入单元格的值)放入2d数组(因此,正如您所看到的,我放入数组的内容是错误的),然后将数据显示在正确的位置。编写了3个数据示例。我用for循环创建了表。我还在寻找解决方案,所以如果我找到了,我也会在这里说。谢谢


编辑,我按照您的建议重新创建了表,我不能只创建一个方法put(int row,int col,double value)的原因是我想使用一个字符串单元格,它结合了2。如果我想在单元格中输入值,程序需要识别sh.put(“11”,1)需要在单元格11中输入值1,因此第1行第1列

public class SpreadSheet{
   String[][] sheet; // Data + formules sheet
   String[][] values; // copy sheet 
   private int data;
   private int formules;  

   public static void main(String []args){
      SpreadSheet sh = new SpreadSheet(4, 6, 15, 2);
      sh.put("11", 1); // String cell, double value
      sh.put("12", 2); // String cell, double value
      sh.put("test", 3); // String cell, double value
      sh.put('2', 2); // char col, double value
      sh.put(3, "test"); // int row, String value
   } 

   public SpreadSheet(final int rows, final int columns, final int width, int precision) {
       this.sheet = new String [4][6];
        for (int ir = 0; ir < rows; ir++){
            System.out.print(ir + 1);
            System.out.print(" ");
            for (int ic = 1; ic < columns; ic++) {
                //System.out.print(" ");
                put(2, 3);
                printSheet();
                for (int iw = 1; iw < (width); iw++) {
                    //System.out.print(iw); // test width
                }
                System.out.print("|");
            }   
            System.out.println();
        }
   }
   private void printSheet() {
      System.out.print(sheet[data][formules]);
   }
   /*private void put(int row, int col, double value){
   }*/
   private void put(String cell, double value){
       sheet[0][0] = String.valueOf(value);
   }
   private void put(int col, double value){
       sheet[0][0] = String.valueOf(value);
   }
   private void put(int row, String value){
       sheet[1][0] = String.valueOf(value);
   }
}
公共类电子表格{
字符串[][]工作表;//数据+公式工作表
字符串[][]值;//复制工作表
私有int数据;
私有int公式;
公共静态void main(字符串[]args){
电子表格sh=新电子表格(4,6,15,2);
sh.put(“11”,1);//字符串单元格,双值
sh.put(“12”,2);//字符串单元格,双值
sh.put(“test”,3);//字符串单元格,双值
sh.put('2',2);//字符列,双值
sh.put(3,“test”);//int行,字符串值
} 
公共电子表格(最终整数行、最终整数列、最终整数宽度、整数精度){
this.sheet=新字符串[4][6];
对于(int-ir=0;ir
如果要调用
put(char…
而不是
put(String…
),则需要将字符放在单引号中

此外,您正在尝试在初始化2d数组之前填充它

在构造器的开头,您需要放置以下内容:

this.sheet=new String[rows][columns]
private void put(String cell, double value)
{
    int i =Integer.parseInt( cell.substring(0, 1));
    int j =Integer.parseInt( cell.substring(1));
    sheet[i][j] = Double.toString(value);
} 
我忍不住注意到你的
put
重载要么过于可爱,要么完全错误,这取决于你试图实现的目标。你为什么不:

 public void put(int row, int col, double value)
   {
       sheet[row][col] = String.valueOf(value);
   }
编辑:代码中仍有一些错误:

1-您现在正在正确初始化构造函数中的
工作表
,但忘记了

2-允许您使用
final int
初始化2d arrray绑定,但您仍然在硬编码维度,而不考虑在构造函数中传递的值

3-如果您知道值的类型,我建议不要使用
String.valueOf(value)
。您不会总是知道正在调用哪个
String.valueOf
重载,并且依赖编译器为您选择合适的函数。这是不必要的,可能是危险的

例如,而不是

   private void put(int col, double value)
   {
       sheet[0][0] = String.valueOf(value); 
   }
private void put(int row, String value)
{
  sheet[1][0] = String.valueOf(value);
}
做:

而不是

   private void put(int col, double value)
   {
       sheet[0][0] = String.valueOf(value); 
   }
private void put(int row, String value)
{
  sheet[1][0] = String.valueOf(value);
}
尝试:

private void put(int row, String value)
{
  sheet[row][0] = value; //value is already a String
}
现在,对于使用
java.lang.String
对象来指定2d数组中的坐标,这是完全不明智的!请确保您可以变得可爱并拥有类似以下内容:

this.sheet=new String[rows][columns]
private void put(String cell, double value)
{
    int i =Integer.parseInt( cell.substring(0, 1));
    int j =Integer.parseInt( cell.substring(1));
    sheet[i][j] = Double.toString(value);
} 
但我不建议这样做。 如果
String cell
的长度不完全是2个字符,那么此代码当然会失败(这实际上排除了维度大于9的可能性)


如果你想传递一个二维坐标,我建议你使用一个大小为2的
ArrayList

如果你想调用
put(char…
而不是
put(String…
你需要把字符放在单引号中

此外,您正在尝试在初始化2d数组之前填充它

在构造器的开头,您需要放置以下内容:

this.sheet=new String[rows][columns]
private void put(String cell, double value)
{
    int i =Integer.parseInt( cell.substring(0, 1));
    int j =Integer.parseInt( cell.substring(1));
    sheet[i][j] = Double.toString(value);
} 
我忍不住注意到你的
put
重载要么过于可爱,要么完全错误,这取决于你试图实现的目标。你为什么不:

 public void put(int row, int col, double value)
   {
       sheet[row][col] = String.valueOf(value);
   }
编辑:代码中仍有一些错误:

1-您现在正在正确初始化构造函数中的
工作表
,但忘记了

2-允许您使用
final int
初始化2d arrray绑定,但您仍然在硬编码维度,而不考虑在构造函数中传递的值

3-如果您知道值的类型,我建议不要使用
String.valueOf(value)
。您不会总是知道正在调用哪个
String.valueOf
重载,并且依赖编译器为您选择合适的函数。这是不必要的,可能是危险的

例如,而不是

   private void put(int col, double value)
   {
       sheet[0][0] = String.valueOf(value); 
   }
private void put(int row, String value)
{
  sheet[1][0] = String.valueOf(value);
}
做:

而不是

   private void put(int col, double value)
   {
       sheet[0][0] = String.valueOf(value); 
   }
private void put(int row, String value)
{
  sheet[1][0] = String.valueOf(value);
}
尝试:

private void put(int row, String value)
{
  sheet[row][0] = value; //value is already a String
}
现在,对于使用
java.lang.String
对象来指定2d数组中的坐标,这是完全不明智的!请确保您可以变得可爱并拥有类似以下内容:

this.sheet=new String[rows][columns]
private void put(String cell, double value)
{
    int i =Integer.parseInt( cell.substring(0, 1));
    int j =Integer.parseInt( cell.substring(1));
    sheet[i][j] = Double.toString(value);
} 
但我不建议这样做。 如果
String cell
的长度不完全是2个字符,那么此代码当然会失败(这实际上排除了维度大于9的可能性)

如果您想传递二维坐标,我建议您使用大小为2的
ArrayList
sh.put(“2”,2);//char col,double value不正确您需要执行sh.put('2',2);//char col,double va