JAVA--(2)基本程序设计结构:大数值,数组

大数值

处理包含任意长度数字序列的数值
java.math.BigInteger 实现了任意精度的整数运算
java.math.BigDecimal 实现了任意精度的浮点数运算
不能使用算术运算符(eg.+,*)处理大数值,而需要使用大数值的add和multiply方法

BigInteger c = a.add(b); // c = a+b
BigInteger d = c.multiply(b.add(BigInteger.valueOf(2))); // d = c * (b + 2)

数组

数组是一种数据结构,用来存储同一类型值的集合
一旦创建了数组,就不能改变它的大小(进过可以改变每个数组元素)
数组列表(array list): 另一种数据结构,在运行过程中扩展数组的大小

声明数组

int[] a = new int[100]  //创建一个存储100个整数的数组
int[] a = new int[n] 	//创建一个长度为n的数组

数组初始化

创建一个数字数组时,所有元素都初始化为0
创建一个boolean数组时,所有元素都被初始化为false
创建一个对象数组时,所有元素则初始化为一个特殊值null,这表示这些元素还未存放任何对象
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述

int[] smallPrimes = {2,3,5,7,11,13};

匿名数组
new int[] {17,19,23,29,31,37}
匿名数组的用法可以在不创建新变量的情况下重新初始化一个数组

smallPrimes = new int[] {17,19,23,29,31,37};

数组元素的个数

array.length

System.out.println(names.length);

遍历数组: for each循环

可以依次处理数组中的每个元素(其他类型的元素集合亦可),而不必为指定的下标值分心
for(variable : collection) statement

variable 定义一个变量用于暂存集合中的每个元素,并执行响应语句
collection 这一集合表达式必须使一个数组或者是一个实现了Iterable接口的类对象(例如ArrayList)

在这里插入图片描述在这里插入图片描述

查看 数组 所有值 Arrays.toString()

返回的是一个包含数组元素的字符串,这些元素被放置在括号内,并用逗号分隔

import java.util.Arrays;
System.out.println(Arrays.toString(smallPrimes));

在这里插入图片描述

数组拷贝

法1: 允许将一个数组考费给另一个数组变量。这两个变量引用同一个数组

int[] luckyNumbers = smallPrimes;
luckyNumbers[5]=100;
System.out.println(Arrays.toString(luckyNumbers));

在这里插入图片描述
法2:使用Arrays.copyOf()
第一个参数是要拷贝的数组,第二个参数是新数组的长度(通常用来增加数组的长度)

int[] copiedLuckyNumbers = Arrays.copyOf(luckyNumbers, luckyNumbers.length);
System.out.println(Arrays.toString(copiedLuckyNumbers));

如果数组元素是数值型,那么多余的元素将被赋值为0
如果数组元素是布尔型,那么多余的元素将被赋值为false
如果长度小于原始数组的长度,则只拷贝最前面的数据元素

数组排序:Arrays.sort()

int[] result = {3,2,9,7,6,-1};
Arrays.sort(result);
System.out.println(Arrays.toString(result));  
for(int e:result)
	System.out.println(e);

在这里插入图片描述

得到一个 0 ~ (n-1) 之间的随机数

Math.random() 将返回一个0到1之间(包括0,不包括1)的随机数
用 n 乘以这个浮点数,就可以得到从 0 到 n-1 之间的一个随机数

Integer n=10;
System.out.println(Math.random());
//随机0到9之间的一个随机数
int r = (int) (Math.random()* n);
System.out.println(r);

在这里插入图片描述

java.util.Arrays 中的方法

static String toString(type[] a)
返回包含a中数据元素的字符串,这些数据元素被放在中括号内,并用逗号分隔

参数说明
参数 a类型为int,long,short,char,byte,boolean,float,double数组

static type copyOf(type[] a, int length)
static type copyOf(type[] a,int start int end)

参数说明
a类型为int,long,short,char,byte,boolean,float,double数组
start起始下标(包含这个值)
end终止下标(不包含这个值)
这个值可能大于a.length.这种情况下,结果为0或false
length拷贝的数据元素长度.
如果length值大于a.length, 结果为0或false;否则只有前面length个元素的拷贝纸

static void sort(type[] a)
采用优化的快速排序算法对数组进行排序

参数说明
a类型为int,long,short,char,byte,boolean,float,double数组

static int binarySearch(type[] a, type v)
static int binarySearch(type[] a, int start, int end, type v)
采用二分搜索算法查找值v. 如果成功,则返回相应的下标值;否则,返回一个负数值 r.
-r -1 是为了保持a有序v应插入的位置

参数说明
a类型为int,long,short,char,byte,boolean,float,double数组
start起始下标(包含这个值)
end终止下标(不包含这个值)
v同 a 的数据元素类型相同的值

static void fill(type[] a, type v)
将数组的所有元素值设置为 v

参数说明
a类型为int,long,short,char,byte,boolean,float,double数组
v同 a 的数据元素类型相同的一个值

static boolean equals(type[] a, type[] b)
如果两个数组大小相等,并且下标相同的元素都对应相等,返回true

参数说明
参数 a,b类型为int,long,short,char,byte,boolean,float,double数组

多维数组

JAVA实际上并没有多维数组,只有一维数组。多维数组被解释为“数组的数组”

声明二维数组(矩阵)

double[][] balances = new double[10][6]  //10行6列
int[][] magicSquare = 
			{
					{16,3,2,13},
					{5,10,11,8},
					{9,6,7,12},
					{4,15,14,1}
			};

查看 二维数组 元素 Arrays.deepToString()

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

在这里插入图片描述

遍历二维数组 元素 for each循环

按扫描线的顺序进行打印

for(int[] row : magicSquare)
	for(int value : row)
		System.out.println(value);

在这里插入图片描述

互换二维数组中的两行

System.out.println("==========互换二维数组三行和四行========");
Integer i=2;  //默认0索引,2表示第三行
int[] temp = magicSquare[i];
magicSquare[i] = magicSquare[i+1];
magicSquare[i+1] = temp;
System.out.println(Arrays.deepToString(magicSquare));

不规则数组

实现
在这里插入图片描述

public class LotteryArray
{
   public static void main(String[] args)
   {
      final int NMAX = 10;
      // allocate triangular array
      int[][] odds = new int[NMAX + 1][];
      for (int n = 0; n <= NMAX; n++)
         odds[n] = new int[n + 1];

      // fill triangular array
      for (int n = 0; n < odds.length; n++)
         for (int k = 0; k < odds[n].length; k++)
         {
            /*
             * compute binomial coefficient n*(n-1)*(n-2)*...*(n-k+1)/(1*2*3*...*k)
             */
            int lotteryOdds = 1;
            for (int i = 1; i <= k; i++)
               lotteryOdds = lotteryOdds * (n - i + 1) / i;

            odds[n][k] = lotteryOdds;
         }

      // print triangular array
      for (int[] row : odds)
      {
         for (int odd : row)
            System.out.printf("%4d", odd);
         System.out.println();
      }
   }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数值计算大作业通常涉及复杂的数学运算和算法实现。在Java中进行数值计算大作业时,通常需要先理清题意和要求,然后进行适当的算法设计和程序编写。 首先,需要定义和设计合适的数据结构来存储原始数据和计算结果。这可能涉及到数组、矩阵、向量等数据结构的设计和实现。然后,根据题目要求选择合适的数值计算算法,比如求解微分方程、插值、最优化等问题都需要选择不同的算法进行实现。 在编写Java代码时,需要熟练使用Java语言的数学计算库,比如Math类提供了丰富的数学函数和运算符,同时也可以使用第三方数值计算库,比如Apache Commons Math等。 为了提高代码的可读性和可维护性,可以采用面向对象的设计思想,将数值计算的各个模块进行封装,提高代码的复用性。 此外,为了保证数值计算结果的准确性和稳定性,需要进行充分的测试和调试。在设计测试案例时,应该覆盖不同的边界情况和特殊情况,以确保程序的正确性和鲁棒性。 最后,为了提高代码的性能,还可以考虑使用多线程并行计算或者GPU加速来加快数值计算的速度。 综上所述,数值计算大作业的Java做法需要结合数学知识和算法设计,充分利用Java语言的特性和数学计算库,同时注重代码质量和性能优化,以实现高效、稳定和准确的数值计算。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值