这篇博客写得很仓促,对某些部分可能掌握不是很好请见谅。第二题代码经过转载,已进行说明。
本人使用eclipse编写java(也要用记事本写,就是效率有点低),环境早已经配置完毕,就不做截图演示了。
2021.12.22
以下是一些java基础编程题
编写HelloWorld.java. 一定要注意变量的写法.
一:以下创建了一个HelloWorld.java文件(现在什么还没有):
package basic; public class HelloWorld { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("Hello,World!"); } }
二:基本加减乘除运算(转载)
基本的加减乘除运算,数据类型保持相同。
public class BasicOperations { public static void main(String args[]) { int tempFirstInt, tempSecondInt, tempResultInt; double tempFirstDouble, tempSecondDouble, tempResultDouble; tempFirstInt = 15; tempSecondInt = 4; tempFirstDouble = 1.2; tempSecondDouble = 3.5; //Addition tempResultInt = tempFirstInt + tempSecondInt; tempResultDouble = tempFirstDouble + tempSecondDouble; System.out.println("" + tempFirstInt + " + " + tempSecondInt + " = " + tempResultInt); System.out.println("" + tempFirstDouble + " + " + tempSecondDouble + " = " + tempResultDouble); //Subtraction tempResultInt = tempFirstInt - tempSecondInt; tempResultDouble = tempFirstDouble - tempSecondDouble; System.out.println("" + tempFirstInt + " - " + tempSecondInt + " = " + tempResultInt); System.out.println("" + tempFirstDouble + " - " + tempSecondDouble + " = " + tempResultDouble); //Multiplication tempResultInt = tempFirstInt * tempSecondInt; tempResultDouble = tempFirstDouble * tempSecondDouble; System.out.println("" + tempFirstInt + " * " + tempSecondInt + " = " + tempResultInt); System.out.println("" + tempFirstDouble + " * " + tempSecondDouble + " = " + tempResultDouble); //Division tempResultInt = tempFirstInt / tempSecondInt; tempResultDouble = tempFirstDouble / tempSecondDouble; System.out.println("" + tempFirstInt + " / " + tempSecondInt + " = " + tempResultInt); System.out.println("" + tempFirstDouble + " / " + tempSecondDouble + " = " + tempResultDouble); //Modulus tempResultInt = tempFirstInt % tempSecondInt; System.out.println("" + tempFirstInt + " % " + tempSecondInt + " = " + tempResultInt); }//Of main }//Of class BasicOperations ———————————————— 版权声明:本文为CSDN博主「闵帆」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/minfanphd/article/details/116933803
三:if语句的使用:
package basic; public class Operation1 { public static void main(String[] args) { int a,b; a = 10; if(a>=0) System.out.println("a大于等于0"); else System.out.println("a小于0"); b = -1; if(b>=0) System.out.println("b大于等于0"); else System.out.println("b小于0"); double c,d; c = 1.2; d = 1.9; if(c>d) System.out.println("c大于等于d"); else System.out.println("c小于d"); //调用绝对值函数 int tempvalue = -16; System.out.println("The absolute value of "+tempvalue+" is "+numabs(tempvalue)); } /** * 求绝对值的函数 */ public static int numabs(int num) { if(num>=0) return num; else return -num; } }
a大于等于0 b小于0 c小于d The absolute value of -16 is 16
if语句的简单运用,使用函数提高复用性,方法(函数)头部规范的注释, 是后期生成文档的基础.
还有else if,else,用法和c语言中的类似,不再举例。
四:闰年的计算:
if 语句的嵌套.
布尔类型.
闰年条件:1:年份能够被100整除,还必须被400整除。2:年份能够被4整除,但同时不能被100整除。
package basic; public class Operation1 { public static void main(String[] args) { int year1 = 2004; System.out.println(isLeapYearV2(year1)); int year2 = 2010; System.out.println(isLeapYearV2(year2)); int year3 = 2012; System.out.println(isLeapYearV2(year3)); } /** * Is the given year leap? Replace the complex condition with a number of if. */ public static boolean isLeapYearV2(int paraYear) { if (paraYear % 100 == 0) { if (paraYear % 400 == 0) { return true; } return false; } if (paraYear % 4 == 0) { if (paraYear % 100 != 0) { return true; } } return false; } }
true false true
2021.12.23日,今天继续
Switch, case, break, default 的用法.
单元测试单独使用一个方法, main 方法里面的代码越少越好.
能用于switch判断的类型有:byte、short、int、char(JDK1.6),还有枚举类型,但是在JDK1.7后添加了对String类型的判断
注意:switch-case可以做范围匹配,比如case score>90 但是不推荐。
package basic; public class SwitchStatement { public static void main(String[] args) { scoreToLevelTest(); } public static char scoreToLevel(int parascore) { int test = parascore/10; char result = 'E'; switch(test) { case 10: case 9:result = 'A';break; case 8:result = 'B';break; case 7:result = 'C';break; case 6:result = 'D';break; case 5: case 4: case 3: case 2: case 1: case 0:result = 'F';break; default:result = 'E'; } return result; } /** ********************* * Method unit test. ********************* */ public static void scoreToLevelTest() { int tempScore = 98; System.out.println("Score " + tempScore + " to level is: " + scoreToLevel(tempScore)); tempScore = 70; System.out.println("Score " + tempScore + " to level is: " + scoreToLevel(tempScore)); tempScore = 54; System.out.println("Score " + tempScore + " to level is: " + scoreToLevel(tempScore)); tempScore = 32; System.out.println("Score " + tempScore + " to level is: " + scoreToLevel(tempScore)); tempScore = 81; System.out.println("Score " + tempScore + " to level is: " + scoreToLevel(tempScore)); }//of scoreToLevelTest }//of main
Score 98 to level is: A Score 70 to level is: C Score 54 to level is: F Score 32 to level is: F Score 81 to level is: B
循环语句是程序的核心.
算法的时间复杂度一般根据循环语句来计算.
这里有按初始增长量1进行增长的,也有按自己设置的增长量进行增长的。
package basic; public class ForStatement { /** ********************* * The entrance of the program. * * @param args Not used now. ********************* */ public static void main(String[] args) { forStatementTest(); }//of main /** ****************** * method unit test ****************** */ public static void forStatementTest() { int tempN = 10; System.out.println("1 add to " + tempN + " is: " + addToN(tempN)); tempN = 12; System.out.println("1 add to " + tempN + " is: " + addToN(tempN)); tempN = 100; System.out.println("1 add to " + tempN + " is: " + addToN(tempN)); tempN = 45; System.out.println("1 add to " + tempN + " is: " + addToN(tempN)); System.out.println("1 add to " + tempN + " with step length " + 3 + " is: " + addToNWithStepLength(tempN, 3)); } /** ********************* * Add from 1 to N. * * @param paraN The given upper bound. * @return The sum. ********************* */ public static int addToN(int tempN) { int sum = 0; for(int i = 1;i<=tempN;i++) { sum += i; } return sum; } /** ********************* * Add from 1 to N with a step length. * * @param paraN The given upper bound. * @param paraStepLength The given step length. * @return The sum. ********************* */ public static int addToNWithStepLength(int paraN,int paraStepLength) { int sum = 0; for(int i = 1;i<=paraN;i+=paraStepLength) { sum+=i; } return sum; } }
1 add to 10 is: 55 1 add to 12 is: 78 1 add to 100 is: 5050 1 add to 45 is: 1035 1 add to 45 with step length 3 is: 330
7.1 矩阵的赋值.
7.2 二重循环.
矩阵相加,应该保证矩阵的行列相同,首先使用二重循环计算出相加后的矩阵和。在进行结果输出时,也可以使用二重循环输出,或者Arrays.deepToString输出(注意导入包)。
package basic; import java.util.Arrays; public class MatrixAddition { public static void main(String[] args) { martixsumTest(); } // 求矩阵内部和 public static int martixsum1(int[][] martix1){ int result = 0; for(int i = 0;i<martix1.length;i++) { for(int j = 0;j<martix1[i].length;j++) { result += martix1[i][j]; } } return result; } // 求两个矩阵之和 public static int[][] martixsum2(int[][] martix1,int[][] martix2){ int[][] martix3 = new int[martix1.length][martix1[0].length]; for(int i = 0;i<martix1.length;i++) { for(int j = 0;j<martix1[i].length;j++) { martix3[i][j] += martix1[i][j]+martix2[i][j]; } } return martix3; } // 测试方法 public static void martixsumTest() { int[][] martix1 = {{1,2,3},{4,5,6},{7,8,9}};//定义3x3的矩阵 int[][] martix2 = {{10,11,12},{13,14,15},{16,17,18}}; System.out.println("The matrix1 element sum is:"+martixsum1(martix1)); System.out.println("The matrix2 element sum is:"+martixsum1(martix2)); //接受新的矩阵 int[][] martix3 = martixsum2(martix1,martix2); //输出新的矩阵 System.out.println("The new martix3 is"+Arrays.deepToString(martix3)); //输出新矩阵的内部的和 System.out.println("The matrix3 element sum is:"+martixsum1(martix3)); } }
The matrix1 element sum is:45 The matrix2 element sum is:126 The new martix3 is[[11, 13, 15], [17, 19, 21], [23, 25, 27]] The matrix3 element sum is:171
8.1 三重循环是多数程序的极限.
8.2 非法输入检查是程序正常运行的基本保障. 如果检查所有的非法输入, 会导致大量代码行, 这在商业代码中是必须的
这串代码是看了老师的思路才写出来的,自己三重循环一直想不出来TAT,基本是围绕矩阵的基本运算方法。
其他还有可以求出矩阵的方法,不过都要去计算矩阵,对于计算机计算意义不大。(人自己来计算的话,可以简化过程,计算机算的快,影响不大)。d
package basic; import java.util.Arrays; public class MatrixMultiplication { public static void main(String[] args) { martixTest(); } public static int[][] martixMultiple(int[][] martix1,int[][] martix2){ int[][] result = new int[martix1.length][martix2[0].length]; int sum; sum = 0; for(int i = 0;i<martix1.length;i++) { for(int j = 0;j<martix2[0].length;j++) { for(int k = 0;k < martix1[0].length;k++) { result[i][j]+= martix1[i][k]*martix2[k][j]; } } } return result; } // 进行测试 public static void martixTest() { int[][] martix1 = {{1,2,3},{3,3,2}}; int[][] martix2 = {{1,2},{4,3},{1,4}}; //得出结果应该是2x2的矩阵,martix1在前 int[][] martix3 = martixMultiple(martix1,martix2); System.out.println("The final martix is "+Arrays.deepToString(martix3)); } }
The final martix is [[12, 20], [17, 23]]
while 语句本质上比 for 更基础, 因此可以替代后者. 但 for 在很多时候更方便.
break 语句又出现了, 上次是在 switch 语句里. 都是表示跳出当前代码块.
在循环控制时,不要使用浮点值来比较值是否相等。 因为浮点值都是某些值的近似值,使用他们可能导致不精确的循环次数和不准确的结果。
package basic; public class WhileStatement { public static void main(String[] args) { WhileStatementTest(); } public static void WhileStatementTest() { int tempMax = 100; int tempValue = 0; int tempSum = 0; // 法一 while (tempMax > tempValue) { tempValue += 1; tempMax -= tempValue; if (tempMax < tempValue) break; System.out.println("tempMax:" + tempMax + ">" + "tempValue:" + tempValue); } tempMax = 100; tempValue = 0; tempSum = 0; // 法二: while (tempMax > tempSum) { tempValue += 1; tempSum += tempValue; tempMax -= 3; if (tempMax < tempSum) break; System.out.println("tempMax:" + tempMax + ">" + "tempSum:" + tempSum); } } }
tempMax:99>tempValue:1 tempMax:97>tempValue:2 tempMax:94>tempValue:3 tempMax:90>tempValue:4 tempMax:85>tempValue:5 tempMax:79>tempValue:6 tempMax:72>tempValue:7 tempMax:64>tempValue:8 tempMax:55>tempValue:9 tempMax:45>tempValue:10 tempMax:34>tempValue:11 tempMax:22>tempValue:12 tempMax:97>tempSum:1 tempMax:94>tempSum:3 tempMax:91>tempSum:6 tempMax:88>tempSum:10 tempMax:85>tempSum:15 tempMax:82>tempSum:21 tempMax:79>tempSum:28 tempMax:76>tempSum:36 tempMax:73>tempSum:45 tempMax:70>tempSum:55 tempMax:67>tempSum:66
学生的成绩存放于一个矩阵,其中行表示学生,列表示科目。如:第 0 行表示第 0 个学生的数学、语文、英语成绩。要求:
package basic; import java.util.Random; import java.util.Arrays; public class Task1 { public static void main(String[] args) { Task1Test(); } public static void Task1Test() { Random rand = new Random();//随机数种子 int[][] result = new int[10][3]; for(int i = 0;i < 10;i++) { for(int j = 0;j < 3;j++) { result[i][j] = (int)(rand.nextDouble()*50+50); } } System.out.println("当前所有同学如下:"); System.out.println(Arrays.deepToString(result)); int maxscore = 0,newscore;//最好成绩与当前成绩 int flag1 = -1;//标记最好同学的位置 int flag2;//标记不及格的同学 for(int i = 0;i <10;i++) { flag2 = 0; newscore = 0; for(int j = 0;j<3;j++) { if(result[i][j]<60) { flag2 = 1; break; } } if(flag2==1) continue; for(int k = 0;k<3;k++) { newscore += result[i][k]; } if(newscore>maxscore) { flag1 = i; maxscore = newscore; } } flag1+=1; System.out.println("成绩最好的学生是:"+flag1+"号学生,他的语文是"+result[flag1-1][0]+"分,数学是"+result[flag1-1][1]+"分,英语是"+result[flag1-1][2]+"分"); } }
当前所有同学如下: [[76, 62, 92], [51, 87, 99], [76, 99, 84], [65, 69, 57], [58, 93, 77], [59, 75, 77], [65, 79, 78], [62, 63, 53], [89, 92, 80], [91, 53, 94]] 成绩最好的学生是:9号学生,他的语文是89分,数学是92分,英语是80分
这道题总体思路就是先给所有同学随机赋成绩,使用二重循环得到最高成绩,在循环过程中筛掉成绩不及格的同学,我采用了flag进行标识。总体思路比较简单。不知道有没有更简单的办法。
以下补充上最近的背单词情况: