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

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

如何在不使用循环的情况下用Java填充多维数组? 我试过了:

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

Arrays.fill(arr, 0);

结果为java.lang.ArrayStoreException: java.lang.Double

提前致谢!

11个解决方案

87 votes

这是因为new是1.0的数组,您无法将0.0分配给它(就像double[] vector = 0.0一样)。 实际上,Java没有真正的多维数组。

碰巧,new是Java中double的默认值,因此当从new中获取矩阵时,矩阵实际上已经被零填充了。但是,如果要用1.0进行填充,则可以执行以下操作:

我不认为API提供了无需循环即可解决此问题的方法。 然而,使用for-each循环非常简单。

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询问如何无循环解决此问题! 由于某些原因,如今避免循环很流行。 为什么是这样? 可能已经意识到,使用map、Function、eval和朋友,以及诸如exec之类的方法可以隐藏循环并减少程序的详细信息,并且很酷。 真正好的Unix管道也是如此。 或jQuery代码。 事情看起来很好,没有循环。

但是Java是否有map方法? 并非如此,但是我们可以使用eval或exec方法或eval接口定义一个带有Function接口的接口。 这不太困难,将是一个很好的练习。 它可能很昂贵,并且实际上没有使用。

没有循环的另一种方法是使用尾递归。 是的,这很愚蠢,也没有人会在实践中使用它,但是它确实表明,在这种情况下,循环很好。 尽管如此,仅为了展示“另一个免费循环示例”并获得乐趣,这里是:

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的问题时,没有明确的循环。

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

5 votes

根据Java 8,我们可以使用这种方式。

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

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

我们可以用一种更好,更智能的方式在多维数组中初始化一个值。

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

4 votes

如何在不使用循环的情况下用Java填充多维数组?

多维数组只是数组的数组,Array不会检查数组的类型和您传递的值(此责任在开发人员身上)。

因此,如果不使用循环,就无法合理地填充多维数组。

请注意,与C或C ++之类的语言不同,Java数组是对象,而在多维数组中,除最后一级外,所有数组都包含对其他Array对象的引用。 我对此不是100%的确定,但是很可能它们是分布在内存中的,因此您不能只填充没有循环的连续块,就像C / C ++可以做到的那样。

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

3 votes

作为答案的扩展,我找到了这篇文章,但希望填充4维数组。原始示例只是一个二维数组,但问题是“多维”。 我不想为此发布新的问题...

您可以使用相同的方法,但是必须嵌套它们,以便最终获得一维数组。

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[]是合法且定义明确的…)

(从下面使用一种公共方法可以使调用源代码保持循环。

如果您坚持不使用任何循环,请使用递归将循环和对Arrays.fill()(!)的调用替换。)

/** 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,您可以声明和初始化二维数组,而无需使用(显式)循环,如下所示:

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][]);

这将使用默认值初始化数组(在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。您需要遍历循环,并使用fill方法可以用一个循环填充2D数组。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/303622.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在程序员面前千万不要说这9句话,我一个同事就死的很惨!

最近&#xff0c;有几位程序员朋友&#xff0c;向我吐槽&#xff0c;经常有人和他说一些让他恼怒的话&#xff0c;他听完都想打人啦。我听完之后也是哭笑不得&#xff0c;将这些程序员朋友的话给整理出来了&#xff0c;大家以后在程序员面前说话可得小心点。。01“我先下班了啦…

C# WPF框架Caliburn.Micro快速搭建

1. Caliburn是什么&#xff1f;Caliburn是Rob Eisenberg在2009年1月26日(Robs MIX10 talk "Build Your Own MVVM Framework")提出的一个MVVM类的开源框架。它是一套用于协助开发WPF&#xff0c;Silverlight&#xff0c;WP7和Win RT等的应用程序的库。Caliburn.Micro由…

怎么可以让计算机不能联网,我想让电脑:只能收发电子邮件,不能上网,怎样设置?...

2006-01-04 14:47:58用美萍卫士就可以。全部2006-01-04 14:47:582006-01-04 13:22:37第一种全部删除 最好的方式打开系统所在目录找到 IE 的所在地全部删除然后安装放火墙&#xff0c;以瑞星为例子~~~找到启动~~关闭HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVers…

MYSQL技术连环斩-MYSQL简述

前言&#xff1a;严格的来说&#xff0c;MYSQL是一款产品而不是一项技术。关于技术和产品的论述&#xff0c;请参考我的博文。现在进行小结一下。可以说数据库技术是为了解决数据之间如何聚合&#xff0c;聚合的数据如何管理的问题。为了实际上的真正应用&#xff0c;就必须选择…

火柴人_火柴人 x THANKSGIVING

滴水之恩当涌泉相报&#xff0c;THANKSGIVING是我们给予对方的温暖。很多时候我们却发现&#xff0c;帮助我们的人其实并不求回报。也许&#xff0c;当我们想要感恩得到的帮助时&#xff0c;更应该做的&#xff0c;是铭记他人的善意&#xff0c;并努力把这份温暖传递下去。2020…

AI催生新的工作机遇:5个未来会很吃香的岗位

导读&#xff1a;人工智能与人类工作是当下许多人津津乐道的一个话题&#xff0c;而讨论的重点大多是围绕在“未来人工智能会不会抢走我们的工作”这个方面。“人工智能”一词经常会让人感觉心生恐惧和忧虑&#xff0c;人们畏惧人工智能所带来的未知可能性&#xff0c;害怕发生…

在 CAP 中使用 AOP ( Castle.DynamicProxy )

简介本篇文章主要介绍如何在 CAP 中集成使用 Castle.DynamicProxy&#xff0c;Castle DynamicProxy 是一个用于在运行时动态生成轻量级.NET代理的库。代理对象允许在不修改类代码的情况下截取对对象成员的调用。可以代理类和接口&#xff0c;但是只能拦截虚拟成员。为什么需要使…

共享服务器硬件要求,共享服务器的配置与管理.doc

编号&#xff1a;Q/NJXX-QR-RJ-2-2012南京信息职业技术学院教 案授课班级41421P、41422P授课时数2序号1时间地点[ ] 年[ ]月[ ] 日 [ ]节 [ ]课程单元共享服务器的配置与管理教学内容能够在Linux中访问Windows的共享资源掌握Linux中安装NFS服务的方法掌握Linux中安装Samba服务的…

Vim as Python IDE on windows

下载安装Python。 从Vim的网站下载vim,建议下Self-installing executable的版本。 编辑vim的配置文件_vimrc 拷贝vimrc_example里面的东东到_vimrc 去掉_vimrc里面的source $VIMRUNTIME/vimrc_example.vim 设置中文支持 "设置编码自动识别, 中文引号显示 "set fileen…

python中matplotlib库实例_Python Matplotlib库入门指南

Matplotlib简介Matplotlib是一个Python工具箱&#xff0c;用于科学计算的数据可视化。借助它&#xff0c;Python可以绘制如Matlab和Octave多种多样的数据图形。最初是模仿了Matlab图形命令, 但是与Matlab是相互独立的.通过Matplotlib中简单的接口可以快速的绘制2D图表初试Matpl…

分布式之数据库和缓存双写一致性方案解析!

一、为什么要写这篇文章&#xff1f;首先&#xff0c;缓存由于其高并发和高性能的特性&#xff0c;已经在项目中被广泛使用。在读取缓存方面&#xff0c;大家没啥疑问&#xff0c;都是按照下图的流程来进行业务操作&#xff1a;但是在更新缓存方面&#xff0c;对于更新完数据库…

四年级上册数学计算机笔记,四年级数学下册笔记整理

第一单元四则运算(1)在没有括号的算式里&#xff0c;如果只有加、减法或者只有乘、除法&#xff0c;都要从左往右按顺序计算。 (2)在没有括号的算式里&#xff0c;有乘、除法和加、减法&#xff0c;要先算乘、除法后算加、减法。 (3)在有括号的算式里&#xff0c;要先算括号里面…

CAP 发布 5.0 版本正式发布

前言今天&#xff0c;我们很高兴宣布 CAP 发布 5.0 版本正式版。同时我们也很高兴的告诉你 CAP 已经有越来越多的用户并且变得越来越流行。在 5.0 版本中&#xff0c;我们主要致力于更好的支持 .NET 5 以及支持新的 Transport&#xff0c;同时在该版本也进行了一些 Bug 修复的工…

电脑上的ofd格式文件如何打开呢_OFD格式的文件怎么打开预览?,来充电吧

我们不管是在工作、学习、下载资源的时候都可能收到别人的文件&#xff0c;但是如果是word或者pfd格式还好&#xff0c;直接在电脑上就可以打开&#xff0c;但是如果是ofd格式的就很难打开了。工具/材料搜狗浏览器、DCS文档在线预览操作方法01打开我们的搜狗浏览器&#xff0c;…

SUSE Linux系统安全配置十条

SUSE由于其出色的性能和对安全较好的控制&#xff0c;吸引了很多企业级用户&#xff0c;目前在国内开始有大量的关键应用。但这并不代表SUSE在使用中就是安全的&#xff0c;SUSE里还有很多安全细节要注意。 目录 1. 补丁、SSH及其它……………………………………3 2. 最小化xi…

用Python画中国地图(二)

在上一篇文章《用Python画一个中国地图》中&#xff0c;我们简单描述了一下如何用Python快速画出一个中国地图的轮廓&#xff0c;似乎没有什么实用价值&#xff0c;这一次我们用实际数据填充它&#xff0c;使它看上去更有意义。上色延续上一次的代码&#xff0c;我们这次还是只…

攻城时服务器维护,8月31日服务器维护更新公告

亲爱的《千年3》玩家&#xff1a;2017年8月31日10&#xff1a;00-14&#xff1a;00将对全区进行服务器例行维护&#xff0c;预计所需时间约为4个小时&#xff0c;如在维护期间无法完成维护内容&#xff0c;开机时间将顺延。本次更新内容包含&#xff1a;1、商城礼包更新2、版本…

php7 匿名继承类_PHP7中的匿名类使用方法_后端开发

PHP 微服务集群搭建 - Hyperf_后端开发Hyperf 是基于 Swoole 4.4 实现的高性能、高灵活性的 PHP 协程框架&#xff0c;内置协程服务器及大量常用的组件&#xff0c;性能较传统基于 PHP-FPM 的框架有质的提升&#xff0c;提供超高性能的同时&#xff0c;也保持着极其灵活的可扩展…

MySql里的My是指谁?

Monty 是一个编程天才。19岁的时候就从赫尔辛基理工大学退学并找了份全职工作&#xff0c;因为在学校里已经不能再教他什么了。33岁的时候他发布了 MySQL&#xff0c;世界上最有名的开源数据库&#xff0c;除了一个库之外&#xff0c;他编写了数据库的全部东西。55岁的时候他抛…

要嫁就嫁程序猿——钱多话少死的早

1程序猿问科比&#xff1a;“你为什么这么成功&#xff1f; ”科比&#xff1a;“你知道洛杉矶凌晨四点是什么样子吗&#xff1f; ”程序猿&#xff1a;“知道&#xff0c;一般那个时候我还在写代码&#xff0c;怎么了&#xff1f;”科比&#xff1a;“额…….”2女神&#xff…