赞
踩
如何声明一个数组引用变量,如何创建一个数组?
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-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 randomly int 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张,不会从已经打乱的牌堆中选择前四张了
使用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指向的数组变了
假设以下所写代码用于将数组中的内容进行反转,解释为什么它是错误的,以及如何进行修正?
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;
}
反转之后又反转回去了
下面说法真还是假?当传递一个数组给方法时,一个新的数组被创建并且传递给方法。
传递数组给方法时,传递的只是数组的引用,真正的数组在堆中
给出以下两个程序的输出:
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数组
下面的方法头哪里有错误?
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,因此前两个参数可以,最后一个类型不匹配,不行
如果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为例,显示如何应用选择排序方法对{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)); } }
使用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
本书声明 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个都可以,只要除了参数列表都对就行
给出使用下面命令调用时,以下程序的输出。
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。