java第十版基础篇第七章答案_Java语言程序设计(基础篇)(原书第10版) 练习题答案 第7章...

基础篇课后习题答案,做了大部分,虽然不一定是最佳代码,但是保证每个都能运行,如有更好的答案,欢迎讨论

7.1 指定等级

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

System.out.print("请输入学生人数:");

int num = scanner.nextInt();

int[] grade = new int[num];

System.out.print("请输入所有分数:");

for (int i = 0; i < num; i++) {

grade[i] = scanner.nextInt();

if (grade[i] > 100 || grade[i] < 0) {

System.out.print("无效成绩");

System.exit(1);

}

}

for (int i = 0; i < num; i++) {

System.out.println("第" + (i + 1) + "位学生的分数是" + grade[i] + "分,对应的成绩为" + result(grade[i]));

}

}

private static char result(int grade) {

char[] result = {'A', 'B', 'C', 'D', 'F'};

int i;

if (grade >= 90 && grade <= 100) {

i = 0;

} else if (grade >= 80 && grade < 90) {

i = 1;

} else if (grade >= 70 && grade < 80) {

i = 2;

} else if (grade >= 60 && grade < 70) {

i = 3;

} else {

i = 4;

}

return result[i];

}

7.2 数字倒置

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

System.out.print("请输入10个整数:");

int[] num = new int[10];

for (int i = 0; i < 10; i++) {

num[i] = scanner.nextInt();

}

for (int i : newNum(num)) {

System.out.print(i + " ");

}

}

private static int[] newNum(int[] num) {

int tmp;

for (int i = 0; i < num.length / 2; i++) {

tmp = num[i];

num[i] = num[num.length - 1 - i];

num[num.length - 1 - i] = tmp;

}

return num;

}

7.3 计算数字出现的次数

public static void main(String[] args) {

int[] num = createArrays();

Arrays.sort(num);

System.out.println("数据升序排列后为:" + Arrays.toString(num));

for (int i = 0; i < num.length; i++) {

if (i == 0 || (num[i] != num[i - 1])) {

System.out.println(num[i] + "在数组中出现了" + getCount(num[i], num) + "次");

}

}

}

private static int[] createArrays() {

Scanner scanner = new Scanner(System.in);

System.out.print("请输入1~100之间的整数(以0作为结束):");

int[] num = new int[100];

int i = 0;

int input;

while (i >= 0) {

input = scanner.nextInt();

if (input != 0) {

num[i] = input;

i++;

} else {

break;

}

}

int zeroIndex = getZeroIndex(num);

int[] newNum = new int[zeroIndex];

System.arraycopy(num, 0, newNum, 0, zeroIndex);

return newNum;

}

private static int getZeroIndex(int[] num) {

for (int i = 0; i < num.length; i++) {

if (num[i] == 0) {

return i;

}

}

return -1;

}

private static int getCount(int indexNum, int[] num) {

int count = 0;

for (int i = 0; i < num.length; i++) {

if (indexNum == num[i]) {

count++;

}

}

return count;

}

7.4 分析成绩

public static void main(String[] args) {

int[] num = createArrays();

double averagePoint = averagePoint(num);

System.out.println("分数分别是:" + Arrays.toString(num));

System.out.println("平均分是:" + averagePoint);

countResult(num, averagePoint);

}

private static int[] createArrays() {

Scanner scanner = new Scanner(System.in);

System.out.print("请输入成绩(1~100之间的整数):");

int[] num = new int[100];

int i = 0;

int input;

while (i >= 0) {

input = scanner.nextInt();

if (input >= 0 && input <= 100) {

num[i] = input;

i++;

} else if (input > 100) {

System.out.print("输入的分数超出最大值!");

System.exit(1);

} else {

break;

}

}

int zeroIndex = getZeroIndex(num);

int[] newNum = new int[zeroIndex];

System.arraycopy(num, 0, newNum, 0, zeroIndex);

return newNum;

}

private static int getZeroIndex(int[] num) {

for (int i = 0; i < num.length; i++) {

if (num[i] == 0) {

return i;

}

}

return -1;

}

private static double averagePoint(int[] num) {

double averagePoint;

int length = num.length;

double totalPoint = 0;

for (int i = 0; i < num.length; i++) {

totalPoint = totalPoint + num[i];

}

averagePoint = totalPoint / length;

return averagePoint;

}

private static void countResult(int[] num, double averagePoint) {

int count1 = 0, count2 = 0;

for (int i = 0; i < num.length; i++) {

if ((double) num[i] >= averagePoint) {

count1++;

}

if ((double) num[i] < averagePoint) {

count2++;

}

}

System.out.println("大于等于平均分的成绩个数为:" + count1);

System.out.print("小于平均分的成绩个数为:" + count2);

}

7.5 打印不同的数

public static void main(String[] args) {

System.out.print("请输入10个正整数:");

int[] inputNumList = inputNumList();

System.out.println("当前的数组为:" + Arrays.toString(inputNumList));

resultNumList(inputNumList);

}

private static int[] inputNumList() {

Scanner scanner = new Scanner(System.in);

int[] inputNumList = new int[10];

for (int i = 0; i < 10; i++) {

inputNumList[i] = scanner.nextInt();

}

return inputNumList;

}

private static void resultNumList(int[] inputNumList) {

int counts = 0;

ArrayList resultNumList = new ArrayList<>();

for (int i = 0; i < 10; i++) {

for (int j = i; j < 10; j++) {

if (inputNumList[i] == inputNumList[j] && i != j) {

inputNumList[j] = -1;

}

}

if (inputNumList[i] != -1) {

counts++;

resultNumList.add(inputNumList[i]);

}

}

System.out.println("其中不同的数字个数为:" + counts);

System.out.print("最后的结果为:" + Arrays.toString(resultNumList.toArray()));

}

7.7 统计一位数的个数

public static void main(String[] args) {

int[] numArrays = new int[100];

int[] numCounts = new int[10];

int i = 0;

while (i < numArrays.length) {

numArrays[i] = (int) (Math.random() * 10);

System.out.print(numArrays[i] + " ");

numCounts[numArrays[i]]++;

i++;

if (i % 10 == 0) {

System.out.println();

}

}

System.out.println("--------------------");

for (int j = 0; j < numCounts.length; j++) {

System.out.print(j + " 在数组中出现了 ");

System.out.printf("%2d%s\n", numCounts[j], " 次");

}

}

7.8 求数组的平均值

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

double[] numList = new double[10];

System.out.print("请输入10个数字:");

for (int i = 0; i < numList.length; i++) {

numList[i] = scanner.nextDouble();

}

double average = average(numList);

System.out.print("这10个数的平均值是:" + average);

}

private static double average(double[] array) {

double average = 0;

for (double i : array) {

average += i;

}

average /= 10;

return average;

}

7.9 找出最小元素

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

double[] array = new double[10];

System.out.print("请输入10个数字:");

for (int i = 0; i < array.length; i++) {

array[i] = scanner.nextDouble();

}

System.out.print("这10个数字中最小值是:" + min(array));

}

private static double min(double[] array) {

double min = array[0];

for (double i : array) {

if (min >= i) {

min = i;

}

}

return min;

}

7.10 找出最小元素的下标

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

double[] array = new double[10];

System.out.print("请输入10个数字:");

for (int i = 0; i < array.length; i++) {

array[i] = scanner.nextDouble();

}

System.out.print("这10个数字中最小值的下标是:" + minIndex(array));

}

private static int minIndex(double[] array) {

int minIndex = 0;

for (int i = 0; i < array.length; i++) {

if (array[minIndex] > array[i]) {

minIndex = i;

}

}

return minIndex;

}

7.12 倒置数组

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

int[] numList = new int[10];

System.out.print("请输入10个整数:");

for (int i = 0; i < 10; i++) {

numList[i] = scanner.nextInt();

}

System.out.println("生成的数组为:" + Arrays.toString(numList));

numList = reverse(numList);

System.out.print("倒置后的数组为:" + Arrays.toString(numList));

}

private static int[] reverse(int[] numList) {

int[] newNumList = new int[numList.length];

for (int i = 0; i < numList.length; i++) {

newNumList[numList.length - 1 - i] = numList[i];

}

return newNumList;

}

7.13 随机数选择器

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

ArrayList numArrayList = new ArrayList<>();

int[] numList;

System.out.println("随机生成1~54的整数");

System.out.println("----------------");

System.out.print("请输入排除的数字(以0结束):");

while (true) {

int tmpNum = scanner.nextInt();

if (tmpNum > 0 && tmpNum < 55) {

numArrayList.add(tmpNum);

} else if (tmpNum == 0) {

break;

} else {

System.out.print("输入超出取值范围");

System.exit(1);

break;

}

}

numList = new int[numArrayList.size()];

for (int i = 0; i < numArrayList.size(); i++) {

numList[i] = numArrayList.get(i);

}

System.out.println("排除的整数为:" + Arrays.toString(numList));

int random = getRandom(numList);

System.out.print("生成的随机数为:" + random);

}

private static int getRandom(int... numbers) {

int randomNum = (int) (Math.random() * 54) + 1;

for (int i : numbers) {

if (randomNum == i) {

randomNum = (int) (Math.random() * 54) + 1;

}

}

return randomNum;

}

7.15 消除重复

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

int[] list = new int[10];

System.out.print("请输入10个整数:");

for (int i = 0; i < list.length; i++) {

list[i] = scanner.nextInt();

}

System.out.println("你输入的数组为:" + Arrays.toString(list));

System.out.print("去除重复后的数组为:" + Arrays.toString(removeDuplicate(list)));

}

private static int[] removeDuplicate(int[] list) {

int[] tmpList = new int[list.length];

int listLength = 0;

for (int i = 0; i < list.length; i++) {

boolean isDuplicate = true;

for (int j = i; j < list.length; j++) {

if (i != j && list[i] == list[j]) {

isDuplicate = false;

break;

}

}

if (isDuplicate) {

tmpList[listLength] = list[i];

listLength++;

}

}

int[] newList = new int[listLength];

System.arraycopy(tmpList, 0, newList, 0, listLength);

return newList;

}

7.17 对学生排序

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

int num;

System.out.print("请输入学生的个数:");

num = scanner.nextInt();

String[] name = new String[num];

double[] result = new double[num];

for (int i = 0; i < num; i++) {

System.out.print("请输入第" + (i + 1) + "学生的姓名:");

name[i] = scanner.next();

System.out.print("请输入第" + (i + 1) + "学生的成绩:");

result[i] = scanner.nextDouble();

}

listSort(result, name, num);

}

private static void listSort(double[] result, String[] name, int num) {

double tmpResult;

String tmpName;

for (int i = 0; i < num; i++) {

for (int j = i; j < num; j++) {

if (result[i] < result[j]) {

tmpResult = result[j];

result[j] = result[i];

result[i] = tmpResult;

tmpName = name[j];

name[j] = name[i];

name[i] = tmpName;

}

}

}

System.out.println("姓名 成绩");

System.out.println("------------------");

for (int i = 0; i < num; i++) {

System.out.printf("%-1s%14.1f\n", name[i], result[i]);

}

}

7.18 冒泡排序

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

System.out.print("请输入十个数:");

double[] list = new double[10];

for (int i = 0; i < 10; i++) {

list[i] = scanner.nextDouble();

}

System.out.println("原始数组为:" + Arrays.toString(list));

System.out.print("排序后的数组为:" + Arrays.toString(arraySort(list)));

}

private static double[] arraySort(double[] list) {

double tmp;

for (int i = 0; i < list.length - 1; i++) {

for (int j = 0; j < list.length - 1 - i; j++) {

if (list[j] > list[j + 1]) {

tmp = list[j + 1];

list[j + 1] = list[j];

list[j] = tmp;

}

}

}

return list;

}

7.19 检查数组排序

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

int num;

System.out.print("请输入数字(第一个数表示数组长度):");

num = scanner.nextInt();

int[] numArray = new int[num];

for (int i = 0; i < num; i++) {

numArray[i] = scanner.nextInt();

}

System.out.println("输入的数组为:" + Arrays.toString(numArray));

if (isSorted(numArray)) {

System.out.print("该数组已经按升序排列");

} else {

System.out.print("该数组没有按升序排列");

}

}

private static boolean isSorted(int[] numArray) {

int[] tmpArray = new int[numArray.length];

System.arraycopy(numArray, 0, tmpArray, 0, numArray.length);

Arrays.sort(tmpArray);

return Arrays.equals(tmpArray, numArray);

}

7.20 修改选择排序法

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

double[] numArray = new double[10];

System.out.print("请输入10个数字:");

for (int i = 0; i < numArray.length; i++) {

numArray[i] = scanner.nextDouble();

}

System.out.print("排序后的数组为:" + Arrays.toString(arraySort(numArray)));

}

private static double[] arraySort(double[] numArray) {

for (int i = numArray.length - 1; i > 0; i--) {

double max = numArray[i];

int index = numArray.length - 1;

for (int j = i - 1; j >= 0; j--) {

if (max < numArray[j]) {

max = numArray[j];

index = j;

}

}

if (numArray[i] != max) {

numArray[index] = numArray[i];

numArray[i] = max;

}

}

return numArray;

}

7.22 八皇后

public static void main(String[] args) {

String[] queenList0 = new String[8];

String[] queenList1 = new String[8];

String[] queenList2 = new String[8];

String[] queenList3 = new String[8];

String[] queenList4 = new String[8];

String[] queenList5 = new String[8];

String[] queenList6 = new String[8];

String[] queenList7 = new String[8];

int[] queenIndex = queenIndex();

queenList(queenList0, queenList1, queenList2,

queenList3, queenList4, queenList5,

queenList6, queenList7, queenIndex);

queenPrint(queenList0, queenList1, queenList2, queenList3,

queenList4, queenList5, queenList6, queenList7);

}

private static int[] queenIndex() {

int[] queenIndex = new int[8];

queenIndex[0] = (int) (Math.random() * 8);

for (int i = 1; i < queenIndex.length; i++) {

boolean inLoop = true;

while (inLoop) {

boolean isDuplicate = false;

int queen = (int) (Math.random() * 8);

for (int j = 0; j < i; j++) {

if (queenIndex[j] == queen) {

isDuplicate = true;

break;

}

}

if (queenIndex[i - 1] == queen + 1 ||

queenIndex[i - 1] == queen - 1) {

isDuplicate = true;

}

if (!isDuplicate) {

queenIndex[i] = queen;

inLoop = false;

}

}

}

return queenIndex;

}

private static void queenList(String[] queenList0,

String[] queenList1,

String[] queenList2,

String[] queenList3,

String[] queenList4,

String[] queenList5,

String[] queenList6,

String[] queenList7,

int[] queenIndex) {

queenList0[queenIndex[0]] = "Q";

queenList1[queenIndex[1]] = "Q";

queenList2[queenIndex[2]] = "Q";

queenList3[queenIndex[3]] = "Q";

queenList4[queenIndex[4]] = "Q";

queenList5[queenIndex[5]] = "Q";

queenList6[queenIndex[6]] = "Q";

queenList7[queenIndex[7]] = "Q";

for (int i = 0; i < queenList0.length; i++) {

if (queenList0[i] == null) {

queenList0[i] = " ";

}

}

for (int i = 0; i < queenList1.length; i++) {

if (queenList1[i] == null) {

queenList1[i] = " ";

}

}

for (int i = 0; i < queenList2.length; i++) {

if (queenList2[i] == null) {

queenList2[i] = " ";

}

}

for (int i = 0; i < queenList3.length; i++) {

if (queenList3[i] == null) {

queenList3[i] = " ";

}

}

for (int i = 0; i < queenList4.length; i++) {

if (queenList4[i] == null) {

queenList4[i] = " ";

}

}

for (int i = 0; i < queenList5.length; i++) {

if (queenList5[i] == null) {

queenList5[i] = " ";

}

}

for (int i = 0; i < queenList6.length; i++) {

if (queenList6[i] == null) {

queenList6[i] = " ";

}

}

for (int i = 0; i < queenList7.length; i++) {

if (queenList7[i] == null) {

queenList7[i] = " ";

}

}

}

private static void queenPrint(String[] queenList0,

String[] queenList1,

String[] queenList2,

String[] queenList3,

String[] queenList4,

String[] queenList5,

String[] queenList6,

String[] queenList7) {

for (String str : queenList0) {

System.out.print(" | ");

System.out.print(str);

}

System.out.println(" | ");

for (String str : queenList1) {

System.out.print(" | ");

System.out.print(str);

}

System.out.println(" | ");

for (String str : queenList2) {

System.out.print(" | ");

System.out.print(str);

}

System.out.println(" | ");

for (String str : queenList3) {

System.out.print(" | ");

System.out.print(str);

}

System.out.println(" | ");

for (String str : queenList4) {

System.out.print(" | ");

System.out.print(str);

}

System.out.println(" | ");

for (String str : queenList5) {

System.out.print(" | ");

System.out.print(str);

}

System.out.println(" | ");

for (String str : queenList6) {

System.out.print(" | ");

System.out.print(str);

}

System.out.println(" | ");

for (String str : queenList7) {

System.out.print(" | ");

System.out.print(str);

}

System.out.print(" | ");

}

7.26 完全相同的数组

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

System.out.print("请输入数组1(第一个数字表示数组长度):");

int[] list1 = new int[scanner.nextInt()];

for (int i = 0; i < list1.length; i++) {

list1[i] = scanner.nextInt();

}

System.out.print("请输入数组2(第一个数字表示数组长度):");

int[] list2 = new int[scanner.nextInt()];

for (int i = 0; i < list2.length; i++) {

list2[i] = scanner.nextInt();

}

if (equals(list1, list2)) {

System.out.print("这两个数组完全相同");

} else {

System.out.print("这两个数组不完全相同");

}

}

private static boolean equals(int[] list1, int[] list2) {

return Arrays.equals(list1, list2);

}

7.27 相同的数组

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

System.out.print("请输入数组1(第一个数字表示数组长度):");

int[] list1 = new int[scanner.nextInt()];

for (int i = 0; i < list1.length; i++) {

list1[i] = scanner.nextInt();

}

System.out.print("请输入数组2(第一个数字表示数组长度):");

int[] list2 = new int[scanner.nextInt()];

for (int i = 0; i < list2.length; i++) {

list2[i] = scanner.nextInt();

}

if (equals(list1, list2)) {

System.out.print("这两个数组相同");

} else {

System.out.print("这两个数组不同");

}

}

private static boolean equals(int[] list1, int[] list2) {

Arrays.sort(list1);

Arrays.sort(list2);

return Arrays.equals(list1, list2);

}

7.28 数字组合

public static void main(String[] args) {

int count = 0;

Scanner scanner = new Scanner(System.in);

int[] numList = new int[10];

System.out.print("请输入10个整数:");

for (int i = 0; i < numList.length; i++) {

numList[i] = scanner.nextInt();

}

System.out.println("输入整数的数组为:" + Arrays.toString(numList));

System.out.println("其中任意两个数字的组合如下:");

int[] twoNum = new int[2];

for (int i = 0; i <= 8; i++) {

for (int j = i + 1; j <= 9; j++) {

twoNum[0] = numList[i];

twoNum[1] = numList[j];

System.out.print(Arrays.toString(twoNum));

count++;

}

System.out.println();

}

System.out.println("以上组合共有" + count + "种");

}

7.30 四个连续相等的数

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

int[] numList;

System.out.print("请输入数字的个数:");

numList = new int[scanner.nextInt()];

System.out.print("请输入数字:");

for (int i = 0; i < numList.length; i++) {

numList[i] = scanner.nextInt();

}

System.out.println("输入的数组为:" + Arrays.toString(numList));

if (isRepetition(numList)) {

System.out.print("数组内含有四个连续相等的数");

} else {

System.out.print("数组内没有四个连续相等的数");

}

}

private static boolean isRepetition(int[] numList) {

int count = 1;

for (int i = 0; i <= numList.length - 4; i++) {

for (int j = i + 1; j < numList.length; j++) {

if (numList[i] == numList[j]) {

count++;

}

}

if (count < 4) {

count = 1;

}

}

return (count >= 4);

}

7.31 合并两个有序列表

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

System.out.print("请输入数组1(第一个数字表示数组长度):");

int[] list1 = new int[scanner.nextInt()];

for (int i = 0; i < list1.length; i++) {

list1[i] = scanner.nextInt();

}

System.out.print("请输入数组2(第一个数字表示数组长度):");

int[] list2 = new int[scanner.nextInt()];

for (int i = 0; i < list2.length; i++) {

list2[i] = scanner.nextInt();

}

System.out.println("数组1为:" + Arrays.toString(list1));

System.out.println("数组2为:" + Arrays.toString(list2));

System.out.print("整合后的数组为:" + Arrays.toString(merge(list1, list2)));

}

private static int[] merge(int[] list1, int[] list2) {

int[] newList = new int[list1.length + list2.length];

System.arraycopy(list1, 0, newList, 0, list1.length);

System.arraycopy(list2, 0, newList, list1.length, list2.length);

Arrays.sort(newList);

return newList;

}

7.34 字符串排序

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

System.out.print("请输入字符串(由字母组成):");

String str = scanner.next();

System.out.print("排序后的字符串为:" + sort(str));

}

private static String sort(String str) {

char[] chArray = new char[str.length()];

String newStr = "";

for (int i = 0; i < chArray.length; i++) {

if (i != chArray.length - 1) {

chArray[i] = str.substring(i, i + 1).charAt(0);

} else {

chArray[i] = str.substring(i).charAt(0);

}

}

Arrays.sort(chArray);

for (char ch : chArray) {

newStr += String.valueOf(ch);

}

return newStr;

}

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值