1.1.11
求一个布尔数组中为真的位置分布图。
public class Example1111 {
public static final int
M
=
10
;
public static final int
N
=
4
;
public static void
main
(String [] args){
boolean[][] a =
new boolean[
M][
N]
;
a =
RandomInit(a)
;
printBool(a)
;
}
//输出内容
public static void
printBool(
boolean[][] a){
for(
int i =
0
; i <
M
; i ++){
for (
int j =
0
; j <
N
; j ++){
if(a[i][j])
System.
out.print(
"*" +
" ")
;
System.
out.print(
" ")
;
}
System.
out.println()
;
}
}
//产生随机布尔值
public static boolean[][]
RandomInit(
boolean[][] a){
for(
int i =
0
; i <
M
; i ++){
for (
int j =
0
; j <
N
; j ++){
a[i][j] = StdRandom.
bernoulli()
;
}
}
return a
;
}
}
1.1.13 编写一段代码,打印出一个 M 行 N 列的二维数组的转置(交换行和列)
public class Example1113 {
//Math.random()方法是产生一个双精度的范围为(0.00 - 1.00)之间的一个随机数
public static final int
M =
10
;
public static final int
N =
5
;
public static final int
n =
10
;
//定义产生随机数的范围
public static void
main(String [] args){
//System.out.println((int)(Math.random()*10));
int[][] num1 =
new int[
M][
N]
;
int[][] num2 =
new int[
N][
M]
;
num1 =
RandomInitialization(num1
,
n)
;
showResult(num1
,num2)
;
}
public static void
showResult(
int[][] num1
, int[][] num2){
System.
out.println(
"反转之后的数组为:")
;
for(
int i =
0
; i <
M
; i ++){
for(
int j =
0
; j <
N
; j ++) {
//一定注意第二个 是j 不是i; 找了一晚上,心态爆炸!!!!
num2[j][i] = num1[i][j]
;
//定义为[N][M]就已经改变了数组的大小,自然可以放得下
}
}
//显示反转后的数组
for(
int i =
0
; i <
N
; i ++){
for (
int j =
0
; j <
M
; j ++){
System.
out.print(num2[i][j] +
" ")
;
}
System.
out.println()
;
}
}
public static int[][]
RandomInitialization(
int [][] num
, int n){
StdOut.
println(
"num1数组内容为:")
;
for(
int i =
0
; i <
M
; i ++){
for (
int j =
0
; j <
N
; j ++){
num[i][j] = StdRandom.
uniform(
10)
;
StdOut.
print(num[i][j] +
" ")
;
}
StdOut.
println()
;
}
return num
;
}
}
1.1.14
编写一个静态方法lg(),接受一个整型参数N,返回不大于log
2
N的最大整数。不使用Math库。
public class Example1114 {
/*
题意要求是整数,所以N必然是大于0的,
求的是(y = 2^x) <= N;
*/
private static int
x =
0
;
private static int
y =
1
;
public static int
lg(
int N){
if(N <=
0)
return -
1
;
while(
y <= N){
y *=
2
;
x++
;
}
return
x-
1
;
}
}
1.1.15
public class Example1115 {
public static int[]
histogram(
int []a
, int M){
int[] R =
new int[M]
;
for(
int i =
0
; i < M
; i ++){
R[i] =
0
;
//将默认数组清空
}
for(
int i =
0
; i < a.
length
; i ++){
if(a[i] >=
0 && a[i] < M ){
R[a[i]] ++
;
}
else{
System.
out.println(
"存在数字不在0到M-1之间,为:" + a[i])
;
}
}
return R
;
}
}
test.java:
//1115
int[] a = {
0
,
3
,
4
,
4
,
1
,
5
,
2
,
4
,}
;
int M =
9
;
System.
out.println(
"M = " + M)
;
int sum =
0
;
int R[] = Example1115.
histogram(a
, M)
;
for(
int i =
0
; i < R.
length
; i ++){
System.
out.print(R[i] +
" ")
;
sum += R[i]
;
}
System.
out.println()
;
if(sum != a.
length){
System.
out.println(
"是不相等的,且sum = " + sum +
", a.length = " + a.
length)
;
}
else {
System.
out.println(
"是相等的,且sum = a.length = " + sum)
;
}