Java语言程序设计 第七章

7.2 习题

如何声明一个数组引用变量,如何创建一个数组?

elementType[] arrayRefVar;
elementType[] arrayRefVar = new elementType[arraySize];

什么时候为数组分配内存?

把数组赋值给数组引用变量时

下面代码的输出是什么?

int x =30;
int[] numbers = new int[x];
x = 60;
System.out.println("x is " + x);
System.out.println("The size of numbers is " + numbers.length);
x is 60
The size of numbers is 30

指出下列语句是对还是错:

a.数组中的每个元素都有相同的类型。 正确

b.—旦数组被声明,大小就不能改变。 错误,数组被声明时还没有大小

c.一旦数组被创建,大小就不能改变。 正确

d.数组中的元素必须是基本数据类型。错误,可以是引用类型

以下哪些语句是有效的?

char[]r = new char(1..30); //错误,类型不匹配
int i = new int(30); //错误,初始化应该用[]
char[] c = new char(); //需要说明数组有多少元素,初始化应该用[]
int i[] = (3,4,3,2); //错误,包括数组的应该是{}
float f[] = {2.3,4.5,6.6};//浮点数默认double,需要加f变float
double d[] = new double[30]; //正确

如何访问数组的元素?

arrayRefVar[index] = value;

数组下标的类型是什么?最小的下标是多少?如何表示数组名为a的第三个元素?

整数数字,0,a[2]

编写语句完成:

a.创建一个含10个double值的数组。

double a[] = new double[10];

b.将5.5賦值给数组中最后一个元素。

a[a.length - 1] = 5.5;

c.显示数组前两个元素的和。

double b = a[0] + a[1];

d.编写循环计算数组中所有元素的和。

double sum = 0;
for (int i = 0; i <= a.length - 1; i++){sum = sum + a[i];
}
System.out.print(sum);

e.编写循环找出数组的最小值。

double min = 0;
for (int i = 0; i <= a.length - 1; i++){if(a[i] <= a[0])min = a[i];
}
System.out.print(min);

f.随机产生一个下标,然后显示该下标所对应的数组元素。

double a[] = {1,2,3,4,5};
int x = (int)(Math.random() * 5);
System.out.print(a[x]);

g.使用数组初始化语法创建另一个初始值为3.5、5.5、4.52 和 5.6的数组。

double a[] = {3.5, 5.5, 4.52, 5.6};

当程序尝试访问下标不合法的数组元素时会发生什么?

运行错误ArraylndexOutOfBoundsException

找出错误并修改下面的代码:

public class Main{public static void main(String[]args){ double[100] r;for (int i = 0; i<r.length(); i++); r(i) = Math.random * 100;
}
}
public class Main{public static void main(String[]args){ double[] r = new double[100];for (int i = 0; i<r.length; i++)r[i] = Math.random() * 100;}
}

以下代码的输出是什么?

public class Main{public static void main(String[]args){ int list[] = {1,2,3,4,5,6}; for (int i = 1; i < list.length; i++) list[i] = list[i - 1];for (int i =0; i < list.length; i++)System.out.print(list[i] + " ");
}
}
1 1 1 1 1 1

7.4 习题

如果将程序清单7-2替换为以下代码,程序还会挑选出四张随机的牌出来吗?

int[] deck = new int[52];
String[]suits = {"Spades","Hearts","Diamonds","Clubs"};
String[]ranks = {"Ace","2","3","4","5","6","7","8","g", "10","Jack","Queen","King"};//Initialize the cards
for (int i = 0; i < deck.length; i++) deck[i]=i;//Shuffle the cards
for (int i = 0; i < deck.length; i++) {//Generate an index randomlyint index = (int)(Math.random() * deck.length); int temp = deck[i]; deck[i] = deck[index]; deck[index] = temp;
}//Display the first four cards
for (int i = 0; i < 4; i++){int cardNumber = (int)(Math.random() * deck.length);String suit = suits[cardNumber / 13];String rank = ranks[cardNumber % 13];System.out.println("Card number " + cardNumber + ": " + rank + "of " + suit);
}

会的,但是随机的牌就会通过随机数的方式选取4张,不会从已经打乱的牌堆中选择前四张了

7.5习题

使用arraycopy方法将下面的数组复制到目标数组t中:

int[] source = {3, 4, 5};
int[] source = {3, 4, 5};
int[] target = new int[source.length];
System.arraycopy(source, 0, target, 0, 3);

—旦数组被创建,它的大小不能被更改。那么下面的代码是否重设了数组的大小呢?

int[] myList;
myList = new int[l0];
//Sometime later you want to assign a new array to myList
myList = new int[20];

没有,只是myList指向的数组变了

7.7习题

假设以下所写代码用于将数组中的内容进行反转,解释为什么它是错误的,以及如何进行修正?

int[] list = {1,2,3,5,4];for (int i = 0, j = list.length -1; i < list.length; i++, j--){ //Swap list[i]with list[j] int temp = list[i]; list[i] = list[j];list[j] = temp;
}

反转之后又反转回去了

7.8习题

下面说法真还是假?当传递一个数组给方法时,一个新的数组被创建并且传递给方法。

传递数组给方法时,传递的只是数组的引用,真正的数组在堆中

给出以下两个程序的输出:

public class Main{public static void main(String[]args){ int number = 0;int[] numbers = new int[1];m(number, numbers);System.out.println("number is " + number + " and numbers[0] is " + numbers[0]); }public static void m(int x, int[]y){x = 3;y[0] = 3;}
}
number is 0 and numbers[0] is 3
public class Main {public static void main(String[]args) {int[] list = {1,2,3,4,5}; reverse(list);for (int i = 0; i < list.length; i++)System.out.print(list[i] + " ");}public static void reverse(int[] list) {int[] newList = new int[list.length];for (int i = 0; i < list.length; i++)                          newList[i] = list[list.length - 1 - i];//"="不可以复制数组,所以数组并没有翻转list = newList;}
}
1 2 3 4 5

在程序执行过程中,数组保存在哪里?给出程序清单7-4中执行displayArray、countLetters、 displayCounts过程中以及之后堆栈中的内容。

数组保存在堆中

displayArray过程中:

栈:

displayArray方法所需要的空间

main方法所需要的空间

堆:

chars数组

displayArray过程后:

栈:

main方法所需要的空间

堆:

chars数组

countLetters过程中:

栈:

countLetters方法所需要的空间

main方法所需要的空间

堆:

chars数组和counts数组

countLetters过程后:

栈:

main方法所需要的空间

堆:

chars数组

displayCounts过程中:

栈:

countLetters方法所需要的空间

main方法所需要的空间

堆:

chars数组和counts数组

displayCounts过程后:

栈:

main方法所需要的空间

堆:

chars数组

7.9习题

下面的方法头哪里有错误?

a. public static void print(String... strings, double... numbers)b. public static void print(double... numbers, String... name)c. public static double... print(double d1, double d2)

可变参数必须在方法参数列表中,只能有一个,且必须是方法中的最后一个参数,

可以使用下面的语句来调用程序清单 7-5 中的 printMax 方法吗?

printMax(1, 2, 3, 4, 5);
printMax(new double[] {1, 2, 3});
printMax(new int[] {1, 2, 3});

程序清单7-5的printMax方法的参数列表是double,因此前两个参数可以,最后一个类型不匹配,不行

7.10习题

如果high是一个非常大的整数,比如最大的int值2147483647, (low + high)/2可能导致溢出。如何修改从而防止溢出?

{low + (high - low)} / 2

以图7-9为例,显示如何应用二分査找法在列表{2, 4, 7, 10, 11, 45, 50, 59, 60, 66, 69, 70, 79}中査找关键字 10 和关键字 12。

10: 四次查找,最后找到

12: 四次查找,最后没找到返回-1

如果二分査找方法返回-4, 该关键字在列表中吗? 如果希望将该关键字插人到列表中,应该在什么位置?

不在列表中,应该插入到左起第四个位置

7.11习题

以图7-11为例,显示如何应用选择排序方法对{3.4, 5,3, 3.5, 2.2, 1.9, 2}进行排序。

1.9 5.3 3.5 2.2 3.4 2

1.9 2 3.5 2.2 3.4 5.3

1.9 2 2.2 3.5 3.4 5.3

1.9 2 2.2 3.4 3.5 5.3

1.9 2 2.2 3.4 3.5 5.3

应该如何修改程序清单7-8中的selectionSort方法,实现数字按递减顺序排序?

import java.util.Arrays;public class Main {public static void main(String[]args) {selectionSort(new double[] {5, 1, 3, 4, 2});}public static void selectionSort(double[]list){ for (int i = 0; i < list.length -1; i++) {double currentMax = list[i]; int currentMaxIndex = i;for (int j= i + 1; j < list.length; j++) {//只需改动下面这行的符号方向if (currentMax < list[j]) {currentMax = list[j]; currentMaxIndex = j;}}if (currentMaxIndex != i) {list[currentMaxIndex] = list[i]; list[i] = currentMax;}}System.out.print(Arrays.toString(list));}
}

7.12习题

使用java.util.Arrays.sort方法可以对什么类型的数组进行排序?这个sort方法会创建一个新数组吗?

可以对数值型数组和字符型数组进行排序

不会创建一个新数组

为了应用 java.util.Arrays.binarySearch(array, key), 数组应按升序还是降序排列? 还是可以既非升序也非降序?

升序

给出下面代码的输出结果

int[] list1 = {2,4,7,10};
java.util.Arrays.fill(list1, 7);
System.out.println(java.util.Arrays.toString(list1));int[] list2 = {2,4,7,10};
System.out.println(java.util.Arrays.toString(list2));
System.out.print(java.util.Arrays.equals(list1, list2));
[7, 7, 7, 7]
[2, 4, 7, 10]
false

7.13习题

本书声明 main 方法为:

public static void main(String[] args)

它可以替换为下面行中的哪些呢?

public static void main(String args[])

public static void main(String[] x)

public static void main(String x[])

static void main(String x[])

前3个都可以,只要除了参数列表都对就行

给出使用下面命令调用时,以下程序的输出。

  1. java Test I have a dream
  2. java Test “1 2 3”
  3. java Test
public class Test {public static void main(String[] args){System.out.println("Number of strings is " + args.length); for(int i = 0; i < args.length; i++)System.out.println(args[i]);}
}
Number of strings is 4
I
have
a
dream
Number of strings is 1
1 2 3
Number of strings is 0

《Java黑皮书基础篇第10版》 第7章【习题】相关推荐

  1. python程序练习题第三章_python核心编程-第三章-习题

    1.这是python的语言特性,python先创建对象,在给变量赋值时,不需要定义变量的名称和类型,它实际是用变量引用对象.变量类型在给变量赋值时自动声明 2.原因类似变量无须声明类型 3.pytho ...

  2. 正则表达式习题解答-Python核心编程3 第一章

    第一章正则表达式 一.正则表达式 按照练习 1-1-1-12 的要求创建正则表达式. 1-1 识别后续的字符串:"bat"."bit"."but&qu ...

  3. 趣学python编程第六章答案_Python核心编程-第六章-习题

    有.in操作符:find()方法和count()方法和index()均能实现 import string import keyword alphas = string.letters + '_' nu ...

  4. python核心编程第五章课后习题

    答案自己做的,如果有问题欢迎大家提出来. 5-1   整型.讲讲python普通整型和长整型的区别. 长整型是普通整型的超集,python中的长整型类型能表达的数值仅仅与你机器支持的虚拟内存大小有关. ...

  5. python 核心编程第5章(习题)

    1.标准类型运算符. 写一段脚本,输入一个测验成绩,根据下面的标准,输出他的评分成绩(A-F). #coding:utf8 a = raw_input() a = int(a) if (a > ...

  6. python 核心编程 第十三章

    python面对对象 类和实例:类是对象的定义,实例是真真的实物. 创建一个类: class AddrBookEnttry(object):def __init__(self, nm, ph):sel ...

  7. python核心编程-第六章-个人笔记(一)

    2019独角兽企业重金招聘Python工程师标准>>> 0.    序列包括字符串.列表和元组三种类型 1.    序列 1.0  序列的每一个元素可以通过指定一个偏移量的方式得到, ...

  8. 【3】python核心编程 第六章-序列:字符串、列表和元组

    1.序列类型操作符 1 序列操作符 作用 2 seq[ind] 获得下标为ind 的元素 3 seq[ind1:ind2] 获得下标从ind1 到ind2 间的元素集合 4 seq * expr 序列 ...

  9. Python核心编程第四章

    2019独角兽企业重金招聘Python工程师标准>>> 4.1 python对象 三个特性:身份.类型.值 4.2 标准类型 int bool longint float cmp s ...

  10. Python核心编程-第2章-网络编程(1)

    一.基本概念 1.嵌套字 套接字是计算机网络数据结构,它体现了上节中所描述的"通信端点"的概念.在任何类型的通信开始之前,网络应用程序必须创建套接字.可以将它们比作电话插孔,没有它 ...

最新文章

  1. 为什么 CPU 访问硬盘很慢?
  2. UNIX环境编程学习笔记(11)——文件I/O之文件时间以及 utime 函数
  3. java程序员的NodeJS初识篇
  4. 通过PyMySQL连接MySQL
  5. 操作系统【八】文件管理
  6. 端口可以随便设置吗_驱动可以随便更新吗?
  7. 结构专业规范大全_一级注册结构工程师专业考试所使用的规范、标准、规程
  8. java编译可执行文件_Java编译器完成但没有创建可执行文件?
  9. 【ASP.Net MVC3 】使用Unity 实现依赖注入
  10. unison实现文件双向同步
  11. android会员充值功能,微信会员卡充值功能怎么开通?
  12. 查看yum安装软件的目录
  13. MOOC(massive open online courses)
  14. 1296: 植树问题(C语言)
  15. java 查看对象内存占用大小
  16. 数控铣削图案及编程_数控铣床编程30例带图 急!!数控编程实例 带图案的
  17. Elasticsearch之指定分片、路由查询
  18. 学习编程语言最好的方法是什么
  19. html5立体,Html5--立体文字
  20. 启动print spooler 服务后, 自动停止, 服务不稳定的解决办法

热门文章

  1. ArcGIS_计算面要素的质心
  2. SX1281驱动学习笔记一:Lora驱动移植
  3. 解决方法:MT7628编译OpenWrt固件时quilt错误
  4. 李弘毅机器学习笔记:第二章
  5. 直播系统源码开发:关于安卓开发工具和obs直播推流
  6. 如何去掉Windows 7的正版验证
  7. tf.get_collection()用法解析
  8. 计算机一级考试个人小结作文,期中考试个人总结范文精选五篇
  9. 反思下自己在工作中的沟通问题
  10. S12X的spi通信引脚复用