1.翻转数组
设存在以下数组:
char[][] chunxiao = {
{ '春' , '眠' , '不' , '觉' , '晓' } ,
{ '处' , '处' , '闻' , '啼' , '鸟' } ,
{ '夜' , '来' , '风' , '雨' , '声' } ,
{ '花' , '落' , '知' , '多' , '少' }
} ;
(1) 将其输出成如下形式:
package swp.kaifamiao.codes.Java.d0809;
import java.util.Arrays;
/**
* {class description}
*
* @author SWP
* @version 1.0.0
*/
public class Text01 {
public static void main(String[] args) {
//初始化一个二维数组
char[][] chunxiao = {
{ '春' , '眠' , '不' , '觉' , '晓' } ,
{ '处' , '处' , '闻' , '啼' , '鸟' } ,
{ '夜' , '来' , '风' , '雨' , '声' } ,
{ '花' , '落' , '知' , '多' , '少' }
} ;
//定义一个字符串用来存放遍历后的值
String output = "";
//两个for循环遍历输出二维数组所有的值,
for (int i = 0; i < chunxiao.length; i++){
for (int j = 0; j < chunxiao[i].length; j++){
output += chunxiao[i][j];
}
//每循环完一轮j,进行换行,然后进入下一个i的循环
output += "\n";
}
//输出遍历后的字符串
System.out.println(output);
}
}
(2)尝试设计一组循环语句,将以上形式的输出结果翻转为以下形式(旋转 90 度):
package swp.kaifamiao.codes.Java.d0809;
/**
* {class description}
*
* @author SWP
* @version 1.0.0
*/
public class Text02 {
public static void main(String[] args) {
//初始化一个二维数组
char[][] chunxiao = {
{ '春' , '眠' , '不' , '觉' , '晓' } ,
{ '处' , '处' , '闻' , '啼' , '鸟' } ,
{ '夜' , '来' , '风' , '雨' , '声' } ,
{ '花' , '落' , '知' , '多' , '少' }
} ;
//定义一个字符串用来存放遍历后的值
String output = "";
for (int i = 0; i <= chunxiao.length; i++){
for (int j = chunxiao.length-1; j >= 0; j--){
output += chunxiao[j][i];
}
//每循环完一轮j,进行换行,然后进入下一个i的循环
output += "\n";
}
System.out.println(output);
}
}
思考:如果是一首词该如何旋转输出?
十年生死两茫茫,不思量,自难忘。
千里孤坟,无处话凄凉。
纵使相逢应不识,尘满面,鬓如霜。
夜来幽梦忽还乡,小轩窗,正梳妆。
相顾无言,惟有泪千行。
料得年年肠断处,明月夜,短松冈。
package swp.kaifamiao.codes.Java.d0809;
/**
* {class description}
*
* @author SWP
* @version 1.0.0
*/
public class Demo01 {
public static void main(String[] args) {
char[][] poem = {
{'十', '年', '生', '死', '两', '茫', '茫', '\u002C', '不', '思', '量', '\u002C', '自', '难', '忘'},
{'千', '里', '孤', '坟', '\u002C', '无', '处', '话', '凄', '凉', '\u3002'},
{'纵', '使', '相', '逢', '应', '不', '识', '\u002C', '尘', '满', '面', '\u002C', '鬓', '如', '霜'},
{'夜', '来', '幽', '梦', '忽', '还', '乡', '\u002C', '小', '轩', '窗', '\u002C', '正', '梳', '妆'},
{'相', '顾', '无', '言', ',', '惟', '有', '泪', '千', '行', '\u3002'},
{'料', '得', '年', '年', '肠', '断', '处', '\u002C', '明', '月', '夜', '\u002C', '短', '松', '冈'}
};
//定义一个poem的最长的句子的长度为max,假定为poem[0]的长度
int max = poem[0].length;
//遍历出最长的句子的长度为max
for (int i = 1; i < poem.length; i++){
if (poem[i].length > max){
max = poem[i].length;
}
}
//外层循环的长度要小于等于最长句子的长度max
for (int j = 0; j < max; j++){
for (int i = poem.length - 1; i >= 0; i--) {
//
if ( j >= poem[i].length){
//填充空格、输出空格
System.out.print(" " + "\t");
}else {
System.out.print(poem[i][j] + "\t");
}
}
//循环完一次,换行
System.out.println();
}
}
}
2.数组排序
//设存在以下数组:
// 设 names 数组中存放学生姓名
String[] names = { "安琪拉" , "王昭君" , "蔡文姬" , "妲己" , "张良" };
// 设 courses 数组中依次存放三门课程的名称
String[] courses = { "C++" , "Java" , "Python" };
// 设 scores 数组中依次存储的是 names 数组中各个学生的 C++ 、Java 、Python 课程的
成绩
int[][] scores = {
{ 90 , 89 , 75 } ,
{ 59 , 40 , 100 } ,
{ 100 , 99 , 80 } ,
{ 80 , 61 , 61 } ,
{ 60 , 100 , 99 } ,
};
采用以下程序可以输出每个学生的姓名以及该学生各门课程的成绩:
for( int i = 0 ; i < scores.length ; i++ ){
System.out.print( names[ i ] + " => " ); // 输出学生姓名
for( int j = 0 ; j < scores[ i ] .length ; j++ ){
System.out.print( courses[ j ] + ":");// 输出课程名称
System.out.print( scores[ i ][ j ] ); // 输出课程成绩
if( j < scores[ i ] .length - 1 ) {
System.out.print( " , " );
}
}
System.out.println();
}
(1) 设计程序按照各个学生的 Java 成绩进行排序 ( 降序 )
package swp.kaifamiao.codes.Java.d0809;
import java.util.Arrays;
/**
* {class description}
*
* @author SWP
* @version 1.0.0
*/
public class Text03 {
public static void main(String[] args) {
int[][] scores = {
{90, 89, 75},
{59, 40, 100},
{100, 99, 80},
{80, 61, 61},
{60, 100, 99},
};
// 按照Java成绩选择排序,降序
for (int i = 0; i < scores.length - 1; i++) {
int max = i;
for (int j = i + 1; j < scores.length; j++) {
if (scores[j][1] > scores[max][1]) {
max = j;
}
}
int[] temp = scores[i];
scores[i] = scores[max];
scores[max] = temp;
}
for (int[] i : scores) {
System.out.println(Arrays.toString(i));
}
}
}
(2) 设计程序,根据学生总成绩进行排序(降序排列),并输出学生姓名、每门课程的名称和
该学生的成绩、该学生的总成绩
package swp.kaifamiao.codes.Java.d0809;
import com.sun.tools.javac.Main;
import java.util.Arrays;
/**
* {class description}
*
* @author SWP
* @version 1.0.0
*/
public class Text04 {
public static void main(String[] args) {
// 设 names 数组中存放学生姓名
String[] names = { "安琪拉" , "王昭君" , "蔡文姬" , "妲己" , "张良" };
// 设 courses 数组中依次存放三门课程的名称
String[] courses = { "C++" , "Java" , "Python" };
// 设 scores 数组中依次存储的是 names 数组中各个学生的 C++ 、Java 、Python 课程的成绩
int[][] scores = {
{ 90 , 89 , 75 } ,
{ 59 , 40 , 100 } ,
{ 100 , 99 , 80 } ,
{ 80 , 61 , 61 } ,
{ 60 , 100 , 99 } ,
};
//下面对成绩进行排序
//将每位同学的总分放到新的数组中
//定义一个新的数组用来存放每位学生的总分
int[] sumscores = new int[scores.length];
for (int i = 0; i < scores.length; i++){
int sum = 0;
for (int j = 0; j < scores[i].length; j++){
sum += scores[i][j];
}
sumscores[i] = sum;
}
//对总分数数组进行排序(冒泡)
//外循环
for (int i = 0; i < sumscores.length - 1; i++){
//内循环
for (int j = 0; j <sumscores.length -1 - i; j++){
if (sumscores[j] < sumscores[j+1]){
//换总分的排名(倒序)
int temp = sumscores[j];
sumscores[j] = sumscores[j+1];
sumscores[j+1] = temp;
// 换各科的排名(倒序)
int[] tempScore = scores[j];
scores[j] = scores[j + 1];
scores[j + 1] = tempScore;
//换名字
String tempName = names[j];
names[j] = names[j + 1];
names[j + 1] = tempName;
}
}
}
System.out.println(Arrays.toString(sumscores));
// 遍历输出
for( int i = 0 ; i < scores.length ; i++ ){
// 输出学生姓名
System.out.print( names[ i ] + " => " );
for( int j = 0 ; j < scores[ i ] .length ; j++ ){
// 输出课程名称
System.out.print( courses[ j ] + ":");
// 输出课程成绩
System.out.print( scores[ i ][ j ] );
if( j < scores[ i ] .length - 1 ) {
System.out.print( " , " );
}
}
System.out.println();
}
}
}
3.编写一个程序,生成一个给定行数的杨辉三角
package swp.kaifamiao.codes.Java.d0809;
/**
* {class description}
*
* @author SWP
* @version 1.0.0
*/
/*
杨辉三角
1 0
1 1 1
1 2 1 2
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1. 每行元素个数是 下标 + 1
2. 每行第一个和最后一个是 1, 其余元素的值为其上一行的元素 + 上一行元素的前一个元素
*/
import java.util.Arrays;
import java.util.Scanner;
public class Text05 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入n:");
int n = input.nextInt();
int[][] nums = new int[n][];
for (int i = 0; i < nums.length; i++) {
nums[i] = new int[i + 1];
// 每一个元素都是 1
Arrays.fill(nums[i], 1);
// j = 1 每行的第一个元素跳过, j < nums[i].length - 1 跳过最后一个 i > 1 跳过前两行
for (int j = 1; i > 1 && j < nums[i].length - 1; j++) {
nums[i][j] = nums[i - 1][j] + nums[i - 1][j - 1];
}
}
for (int i = 0; i < nums.length; i++) {
System.out.println(Arrays.toString(nums[i]));
}
}
}