Java学习3
Java学习3
主要学习了scanner的用法和流程控制的结构
JavaDoc
-
javaDoc是用来生成自己的API文档的
-
参数信息
- @author 作者名
- @version 版本号
- @since 指明需要最早使用的JDK版本
- @param 参数名
- @return 返回值情况
- @throws 异常抛出情况
-
加在类上就是类的注释,加在方法上就是方法的注释
-
利用指令产生JavaDoc文档: javadoc -encoding UTF-8 -charset UTF-8 文件名.java
Scanner对象
-
通过Scanner类可以获取用户输入
-
基本语法
Scanner s = new Scanner(System.in);
-
通过Scanner类的next()与nextLine()方法获取输入的字符串;读取前需要使用hasNext()与hasNextLine()判断是否有输入数据
-
关于next():
next()不能得到带有空格的字符串!以空格为结束符
-
关于nextLine():
以Enter(回车)为结束符!输入的是回车之前的所有字符;可以获得空白
-
示例:
import java.util.Scanner; public class demo1 { public static void main(String[] args){ //从键盘接收数据 Scanner scanner = new Scanner(System.in); System.out.println("请输入"); String str = scanner.nextLine(); //程序会等待用户输入完毕 System.out.println(str); //凡是属于IO流的类如果不关闭会一直占用资源,要养成好习惯用完就关掉 scanner.close(); } }
-
题目:输入多个数字,求其总和与平均数。每输入一个数字用回车确认,通过输入非数字来结束输入并输出结果。
import java.util.Scanner; public class demo3 { public static void main(String[] args){ double sum = 0; double average; //m为输入的数字个数 int m = 0; Scanner scanner = new Scanner(System.in); System.out.println("请输入数字"); while(scanner.hasNextDouble()){ //循环判断是否有数字输入 double x = scanner.nextDouble(); sum += x;//结果累加 m++;//数字位数+1 System.out.println("你输入了第" + m + "个数据,当前sum结果为:" + sum); } average = sum / m;//平均数 //结果输出 System.out.println("这" + m + "个数字的总和为: " + sum); System.out.println("这" + m + "个数字的平均数为: " + average); scanner.close(); } }
结构
顺序结构
- 语句与语句之间,框与框之间都是按照从上到下的次序执行的,是任何算法都离不开的基本算法结构
选择结构
if结构
-
if单选择结构
if(){ }
-
if双选择结构
if(){ }else{ }
-
if多选择结构 一定要严谨
if(){ }else if(){ }else if(){ }else{ }
-
if嵌套结构
if(){ if(){ } }
-
注意点:
if语句中至多有一个else语句,else语句在所有的else if语句之后
if语句可以有若干个else if语句,它们必须在else语句之前
一旦其中一个else if语句检测为true,其他的else if语句及else语句都将跳过执行
switch结构
- 匹配一个具体的值
switch(expression){
case value :
break;
case value :
break;
default:
}
- 变量类型注意点
- switch语句中的变量可以是byte/short/int/char
- 从JDK7开始支持String类型
- case标签必须为字符串常量或字面量
循环结构
while循环
while(){
}
- 注意:一般情况下条件设置都会最终让while循环终止,实际写程序时注意避免死循环
do while循环
do{
}while(布尔表达式);
- while是先判断再执行,最少可以不执行;do...while是先执行再判断,最少得执行一次
for循环
for(int i = 0;i<=100;i++){ //初始化;条件判断;迭代
}
-
for循环是最有效最灵活的循环结构
-
典例1
//for循环输出1-1000内能被5整除的数,每行输出3个
public class ForDemo3 {
public static void main(String[] args) {
for (int i = 1; i <= 1000; i++) { //1000.for
if (i % 5 == 0) {
System.out.print(i + "\t"); //print()输出完不换行
}
if (i % (3 * 5) == 0) {
System.out.println(); //println()输出完换行,没有内容等价于'\n'
}
}
}
}
- for循环嵌套 典例
//打印九九乘法表
public class ForDemo4 {
public static void main(String[] args){
for(int i = 1;i<=9;i++){
for(int j = 1;j<=i;j++){ //for循环嵌套
System.out.print(j + "x" + i + "=" + j*i + "\t");
}
System.out.println(); //输出完一行换行
}
}
}
- 增强for循环
JDK5引入的一种主要用于数组或集合的增强型for循环
public class ForDemo5 {
public static void main(String[] args){
int[] num = {1,2,3,4,55,6,7,88};//数组定义
//遍历数组元素 增强for循环
for(int x:num){
System.out.println(x);
}
System.out.println("=========================");
//与下面等价
for(int i =0;i<5;i++){
System.out.println(num[i]);
}
}
}
break
- 作用:在任何循环的主体部分均可使用break控制流程,break用于强行退出循环,不执行循环中的剩余语句
continue
- 用在循环语句体中,用于终止某次循环过程,跳过循环中尚未执行的语句,接着进行下一次是否执行的判定
goto方法
示例:输出101-150间的质数(不推荐使用)
public class LabelDemo {
public static void main(String[] args){
//输出101-150间的质数
outer: for(int i = 101;i<=150;i++){
for(int j = 2;j<(i/2);j++){
if(i % j == 0)
continue outer; //跳了两层的循环
}
System.out.print(i + "\t");
}
}
}
正常写法:
public class LabelDemo {
public static void main(String[] args){
//输出101-150间的质数
int j=0;
int i=0;
for(i = 101;i<= 150;i++){
for(j = 2;j<i/2;j++){
if(i % j == 0)
break;
}
if(j >= i/2 )
System.out.println(i + "\t");
else
continue;
}
}
}
拓展
-
将I编译生成的.class文件导入到IDEA工程中可以反编译,可以帮助看程序如何底层运行
-
IDEA快捷键
for(i = 0;i <100 ;i ++){
}
//等价于 100.for jdk17没有?存疑
- print 与 println的区别
print()输出完不换行;println()输出完换行,没有内容等价于'\n'
-
注意转义字符的字符输出和字符串输出的区别
System.out.print(3 + '\t'); System.out.print(3 + "\t");
注:'\t'被当做数字与3一起相加输出,显然不符合我们原本想用制表符对齐的目的;利用“\t”则不会出现这种情况
-
练习:打印三角形,可以指定三角形行数
- 自己写的
import java.util.Scanner;
public class TestDemo01 {
//打印三角形 行数任意指定
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入三角形的行数:");
int row,num,j; //row:行数 num:行数对应的每行字符个数
row = scanner.nextInt();
num = 1+2*(row-1);
for(int i =1;i<=row;i++){
j = 2*i - 1; //每行的有效字符个数
for(int p = 1;p<=((num - j)/2);p++){ //(num - j)/2 每行的空格字符个数的一半
System.out.print(" ");
}
for(int o = 1;o<=j;o++)
System.out.print('*');
for(int p = 1;p<=((num - j)/2);p++){ //这里可以不需要再输出空格了 看完教程发现的
System.out.print(" ");
}
System.out.println();//换行
}
scanner.close();
}
}
2.教程标准写法
public class TestDemo2 {
public static void main(String[] args) {
//打印三角形,指定行数为5
for(int i =1;i<=5;i++){
for(int j = 5;j>i;j--) //j>i是保证开头没有多余s空格
System.out.print(" ");
for(int j=1;j<=i;j++)
System.out.print("*");
for(int j=1;j<i;j++)
System.out.print("*");
System.out.println();
}
}
}