日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

floatmap 二维数组_用J中的多维数组进行Arrays.fill

發(fā)布時間:2023/12/4 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 floatmap 二维数组_用J中的多维数组进行Arrays.fill 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

用J中的多維數(shù)組進(jìn)行Arrays.fill

如何在不使用循環(huán)的情況下用Java填充多維數(shù)組? 我試過了:

double[][] arr = new double[20][4];

Arrays.fill(arr, 0);

結(jié)果為java.lang.ArrayStoreException: java.lang.Double

提前致謝!

11個解決方案

87 votes

這是因為new是1.0的數(shù)組,您無法將0.0分配給它(就像double[] vector = 0.0一樣)。 實際上,Java沒有真正的多維數(shù)組。

碰巧,new是Java中double的默認(rèn)值,因此當(dāng)從new中獲取矩陣時,矩陣實際上已經(jīng)被零填充了。但是,如果要用1.0進(jìn)行填充,則可以執(zhí)行以下操作:

我不認(rèn)為API提供了無需循環(huán)即可解決此問題的方法。 然而,使用for-each循環(huán)非常簡單。

double[][] matrix = new double[20][4];

// Fill each row with 1.0

for (double[] row: matrix)

Arrays.fill(row, 1.0);

aioobe answered 2020-01-11T05:42:20Z

60 votes

double[][] arr = new double[20][4];

Arrays.fill(arr[0], 0);

Arrays.fill(arr[1], 0);

Arrays.fill(arr[2], 0);

Arrays.fill(arr[3], 0);

Arrays.fill(arr[4], 0);

Arrays.fill(arr[5], 0);

Arrays.fill(arr[6], 0);

Arrays.fill(arr[7], 0);

Arrays.fill(arr[8], 0);

Arrays.fill(arr[9], 0);

Arrays.fill(arr[10], 0);

Arrays.fill(arr[11], 0);

Arrays.fill(arr[12], 0);

Arrays.fill(arr[13], 0);

Arrays.fill(arr[14], 0);

Arrays.fill(arr[15], 0);

Arrays.fill(arr[16], 0);

Arrays.fill(arr[17], 0);

Arrays.fill(arr[18], 0);

Arrays.fill(arr[19], 0);

trojanfoe answered 2020-01-11T05:42:35Z

9 votes

OP詢問如何無循環(huán)解決此問題! 由于某些原因,如今避免循環(huán)很流行。 為什么是這樣? 可能已經(jīng)意識到,使用map、Function、eval和朋友,以及諸如exec之類的方法可以隱藏循環(huán)并減少程序的詳細(xì)信息,并且很酷。 真正好的Unix管道也是如此。 或jQuery代碼。 事情看起來很好,沒有循環(huán)。

但是Java是否有map方法? 并非如此,但是我們可以使用eval或exec方法或eval接口定義一個帶有Function接口的接口。 這不太困難,將是一個很好的練習(xí)。 它可能很昂貴,并且實際上沒有使用。

沒有循環(huán)的另一種方法是使用尾遞歸。 是的,這很愚蠢,也沒有人會在實踐中使用它,但是它確實表明,在這種情況下,循環(huán)很好。 盡管如此,僅為了展示“另一個免費循環(huán)示例”并獲得樂趣,這里是:

import java.util.Arrays;

public class FillExample {

private static void fillRowsWithZeros(double[][] a, int rows, int cols) {

if (rows >= 0) {

double[] row = new double[cols];

Arrays.fill(row, 0.0);

a[rows] = row;

fillRowsWithZeros(a, rows - 1, cols);

}

}

public static void main(String[] args) {

double[][] arr = new double[20][4];

fillRowsWithZeros(arr, arr.length - 1, arr[0].length);

System.out.println(Arrays.deepToString(arr));

}

}

這不是很漂亮,但是在回答OP的問題時,沒有明確的循環(huán)。

Ray Toal answered 2020-01-11T05:43:10Z

5 votes

根據(jù)Java 8,我們可以使用這種方式。

double[][] arr = new double[20][4];

Arrays.stream(arr).forEach(a -> Arrays.fill(a, 0));

我們可以用一種更好,更智能的方式在多維數(shù)組中初始化一個值。

Bipool answered 2020-01-11T05:43:38Z

4 votes

如何在不使用循環(huán)的情況下用Java填充多維數(shù)組?

多維數(shù)組只是數(shù)組的數(shù)組,Array不會檢查數(shù)組的類型和您傳遞的值(此責(zé)任在開發(fā)人員身上)。

因此,如果不使用循環(huán),就無法合理地填充多維數(shù)組。

請注意,與C或C ++之類的語言不同,Java數(shù)組是對象,而在多維數(shù)組中,除最后一級外,所有數(shù)組都包含對其他Array對象的引用。 我對此不是100%的確定,但是很可能它們是分布在內(nèi)存中的,因此您不能只填充沒有循環(huán)的連續(xù)塊,就像C / C ++可以做到的那樣。

Thomas answered 2020-01-11T05:44:13Z

3 votes

作為答案的擴展,我找到了這篇文章,但希望填充4維數(shù)組。原始示例只是一個二維數(shù)組,但問題是“多維”。 我不想為此發(fā)布新的問題...

您可以使用相同的方法,但是必須嵌套它們,以便最終獲得一維數(shù)組。

fourDArray = new float[10][10][10][1];

// Fill each row with null

for (float[][][] row: fourDArray)

{

for (float[][] innerRow: row)

{

for (float[] innerInnerRow: innerRow)

{

Arrays.fill(innerInnerRow, -1000);

}

}

};

k3yz101 answered 2020-01-11T05:44:42Z

1 votes

有時我們所有人都不希望有一個

void java.util.Arrays.deepFill(T[]…multiDimensional).問題開始于

Object threeByThree[][] = new Object[3][3];

threeByThree[1] = null;和

threeByThree[2][1] = new int[]{42};完全合法。

(如果只有Object twoDim[]final[]是合法且定義明確的…)

(從下面使用一種公共方法可以使調(diào)用源代碼保持循環(huán)。

如果您堅持不使用任何循環(huán),請使用遞歸將循環(huán)和對Arrays.fill()(!)的調(diào)用替換。)

/** Fills matrix {@code m} with {@code value}.

* @return {@code m}'s dimensionality.

* @throws java.lang.ArrayStoreException if the component type

* of a subarray of non-zero length at the bottom level

* doesn't agree with {@code value}'s type. */

public static int deepFill(Object[] m, T value) {

Class> components;

if (null == m ||

null == (components = m.getClass().getComponentType()))

return 0;

int dim = 0;

do

dim++;

while (null != (components = components.getComponentType()));

filler((Object[][])m, value, dim);

return dim;

}

/** Fills matrix {@code m} with {@code value}.

* @throws java.lang.ArrayStoreException if the component type

* of a subarray of non-zero length at level {@code dimensions}

* doesn't agree with {@code value}'s type. */

public static void fill(Object[] m, T value, int dimensions) {

if (null != m)

filler(m, value, dimensions);

}

static void filler(Object[] m, T value, int toGo) {

if (--toGo <= 0)

java.util.Arrays.fill(m, value);

else

for (Object[] subArray : (Object[][])m)

if (null != subArray)

filler(subArray, value, toGo);

}

greybeard answered 2020-01-11T05:45:32Z

0 votes

public static Object[] fillArray(Object[] arr,Object item){

Arrays.fill(arr, item);

return arr;

}

Character[][] maze = new Character[10][10];

fillArray(maze, fillArray(maze[0], '?'));

for(int i = 0;i<10;i++){

System.out.println();

for(int j = 0;j<10;j++){

System.out.print(maze[i][j]);

}

}

我希望這做得好

Ahmed Mazher answered 2020-01-11T05:45:54Z

0 votes

使用Java 8,您可以聲明和初始化二維數(shù)組,而無需使用(顯式)循環(huán),如下所示:

int x = 20; // first dimension

int y = 4; // second dimension

double[][] a = IntStream.range(0, x)

.mapToObj(i -> new double[y])

.toArray(i -> new double[x][]);

這將使用默認(rèn)值初始化數(shù)組(在double的情況下為DoubleStream)。

如果要顯式定義要使用的填充值,可以添加DoubleStream:

int x = 20; // first dimension

int y = 4; // second dimension

double v = 5.0; // fill value

double[][] a = IntStream

.range(0, x)

.mapToObj(i -> DoubleStream.generate(() -> v).limit(y).toArray())

.toArray(i -> new double[x][]);

Robby Cornelissen answered 2020-01-11T05:46:23Z

0 votes

簡而言之,java不提供此類API。您需要遍歷循環(huán),并使用fill方法可以用一個循環(huán)填充2D數(shù)組。

int row = 5;

int col = 6;

int cache[][]=new int[row][col];

for(int i=0;i<=row;i++){

Arrays.fill(cache[i]);

}

Sanjeev Guglani answered 2020-01-11T05:46:43Z

-5 votes

Arrays.fill(arr, new double[4]);

watereater answered 2020-01-11T05:46:59Z

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的floatmap 二维数组_用J中的多维数组进行Arrays.fill的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。