如何将 double[][] 数组转换为 String[][] 数组?
How can i convert double[][] array to String[][] array?
我正在研究它,但我做不到 that.This 代码有地址输出,我想将其从双精度数组转换为字符串数组。这段代码有什么问题。
public static String[][] getStrings(double[][] a) {
double[][] c = { {2.0, 3.1,3,7}, {1.5,5.8,9.6,1} };
String[][] s2d = new String[c.length][c.length];
for (int i = 0; i < s2d.length; i++) {
for(int j=0; j<s2d[i].length;j++){
s2d[i][j]=String.valueOf(c);
System.out.println(s2d);
}
}
return s2d;
}
这是我的输出:
[[Ljava.lang.String;2a139a55
[[Ljava.lang.String;2a139a55
[[Ljava.lang.String;2a139a55
[[Ljava.lang.String;2a139a55
[[Ljava.lang.String;2a139a55
String[][] s2d = new String[c.length][c.length];
应该是
String[][] s2d = new String[c.length][c[0].length];
创建 2x2 矩阵而不是 2x4 矩阵时,您超出了范围
此外,Java 性质的数组没有漂亮的印刷品。
使用 Arrays.deepToString 可以正确输出一个数组。根据@PaulBoddington 的评论修复。
您的代码有几个问题,但直接导致意外输出/结果的问题是这个...
s2d[i][j]=String.valueOf(c);
...应该是...
s2d[i][j] = String.valueOf(c[i][j]);
这段代码有几个问题。这里有一个解决方案,比您现有的更直观,不会让您头疼。
说明
在您的方法中,您创建了一个新的 String
数组,其中包含的数组与 double[][]
参数中包含的数组一样多。由于每个数组的大小可能不同,我们没有对其进行初始化。
new String[a.length][];
然后,我们遍历所有双精度数组,使用 Arrays#toString()
将它们转换为 String
(我们 trim 第一个和最后一个字符 "[" "]"
此方法的输出)并将其拆分为一个字符串数组。
解决方案
public static String[][] getStrings(double[][] a) {
String[][] output = new String[a.length][];
int i = 0;
for (double[] d : a){
output[i++] = Arrays.toString(d).replace("[", "").replace("]", "").split(",");
}
return output;
}
输入
public static void main(String[]a) {
double[][] ds = { { 2.0, 3.1, 3, 7 }, { 1.5, 5.8, 9.6, 1 } };
for (String[] s : getStrings(ds)){
System.out.println(Arrays.toString(s));
}
}
输出
[2.0, 3.1, 3.0, 7.0]
[1.5, 5.8, 9.6, 1.0]
您的代码有点奇怪...例如,您将 double[][] a 作为参数但从未使用它。
顺便说一句,你得到 "address output" 的原因是因为你将 s2d 中的每个变量设置为具有数组 c 的值而不是单双精度的字符串。
要解决您的问题,您应该使用
s2d[i][j] = String.valueOf(a[i][j]);
而不是 s2d[i][j]=String.valueOf(a);
## ----------
#include <iostream>
#include <string>
using namespace std;
int main()
{
string line,line0[99];
double ele[99];
getline(cin,line);
for (int x = 0;x <= line.length();x++)
{
if (line[x] == ' ')
{
step++;
continue;
}
else
{
line0[step] += line[x];
}
}
for (int i = 0;i < size_; i++)
{
string vo = line0[i];
ele[i] += stof(vo);
}
}
```
##
我正在研究它,但我做不到 that.This 代码有地址输出,我想将其从双精度数组转换为字符串数组。这段代码有什么问题。
public static String[][] getStrings(double[][] a) {
double[][] c = { {2.0, 3.1,3,7}, {1.5,5.8,9.6,1} };
String[][] s2d = new String[c.length][c.length];
for (int i = 0; i < s2d.length; i++) {
for(int j=0; j<s2d[i].length;j++){
s2d[i][j]=String.valueOf(c);
System.out.println(s2d);
}
}
return s2d;
}
这是我的输出:
[[Ljava.lang.String;2a139a55
[[Ljava.lang.String;2a139a55
[[Ljava.lang.String;2a139a55
[[Ljava.lang.String;2a139a55
[[Ljava.lang.String;2a139a55
String[][] s2d = new String[c.length][c.length];
应该是
String[][] s2d = new String[c.length][c[0].length];
创建 2x2 矩阵而不是 2x4 矩阵时,您超出了范围
此外,Java 性质的数组没有漂亮的印刷品。 使用 Arrays.deepToString 可以正确输出一个数组。根据@PaulBoddington 的评论修复。
您的代码有几个问题,但直接导致意外输出/结果的问题是这个...
s2d[i][j]=String.valueOf(c);
...应该是...
s2d[i][j] = String.valueOf(c[i][j]);
这段代码有几个问题。这里有一个解决方案,比您现有的更直观,不会让您头疼。
说明
在您的方法中,您创建了一个新的 String
数组,其中包含的数组与 double[][]
参数中包含的数组一样多。由于每个数组的大小可能不同,我们没有对其进行初始化。
new String[a.length][];
然后,我们遍历所有双精度数组,使用 Arrays#toString()
将它们转换为 String
(我们 trim 第一个和最后一个字符 "[" "]"
此方法的输出)并将其拆分为一个字符串数组。
解决方案
public static String[][] getStrings(double[][] a) {
String[][] output = new String[a.length][];
int i = 0;
for (double[] d : a){
output[i++] = Arrays.toString(d).replace("[", "").replace("]", "").split(",");
}
return output;
}
输入
public static void main(String[]a) {
double[][] ds = { { 2.0, 3.1, 3, 7 }, { 1.5, 5.8, 9.6, 1 } };
for (String[] s : getStrings(ds)){
System.out.println(Arrays.toString(s));
}
}
输出
[2.0, 3.1, 3.0, 7.0]
[1.5, 5.8, 9.6, 1.0]
您的代码有点奇怪...例如,您将 double[][] a 作为参数但从未使用它。 顺便说一句,你得到 "address output" 的原因是因为你将 s2d 中的每个变量设置为具有数组 c 的值而不是单双精度的字符串。
要解决您的问题,您应该使用
s2d[i][j] = String.valueOf(a[i][j]);
而不是 s2d[i][j]=String.valueOf(a);
## ----------
#include <iostream>
#include <string>
using namespace std;
int main()
{
string line,line0[99];
double ele[99];
getline(cin,line);
for (int x = 0;x <= line.length();x++)
{
if (line[x] == ' ')
{
step++;
continue;
}
else
{
line0[step] += line[x];
}
}
for (int i = 0;i < size_; i++)
{
string vo = line0[i];
ele[i] += stof(vo);
}
}
```
##