引用数据类型
Scanner类
引用数据类型的使用
与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有一个相对固定的步骤或格式
数据类型 变量名 = new 数据类型()
每种引用数据类型都有其功能,我们可以调用该类型实例的功能
类变量名.方法名()
Scanner类
获取键盘输入
使用步骤:
导包:import java.util.Scanner
创建对象实例:Scanner sc = new Scanner(System.in)
调用方法:int i = sc.nextInt();
String str = sc.next();
public class Test {
public static void main(String[] args) {
//获取键盘输入
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数字");
int i = sc.nextInt();
System.out.println("您输入的数字是 " + i);
System.out.println("请输入字符串");
String str = sc.nextLine();
System.out.println("您输入的数字是 " + str);
//用Scanner来截取字符串的方法 API中看到的,感觉这个方法不错
String input = "1 fish 2 fish red fish blue fish";
Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*");
System.out.println(s.nextInt());
System.out.println(s.nextInt());
System.out.println(s.next());
System.out.println(s.next());
//输出结果:1,2,red,blue
sc.close;//关闭Scanner,释放资源;
}
}
随机数类Random
讲义里的方法简介:
public int nextInt(int maxValue) 产生[0,maxValue)范围的随机整数,包含0,不包含maxValue;
public double nextDouble() 产生[0,1)范围的随机小数,包含0.0,不包含1.0。
这个没看明白 按照它这个弄了半天没成功 下边是我自己摸索出来的使用方法
int i = new Random().nextInt(10);产生[0,10)范围的随机整数,包含0
double i = new Random().nextDouble()*10;产生[0,1)范围的随机小数,包含0.0,不包含1.0。
后边的*10是为了扩大随机生成的浮点类型数据的范围而增加的,这个范围不能像上边那个一样写在括号里边
public class Test {
public static void main(String[] args) {
int i = new Random().nextInt(10);//生成0-10的随机整数,包含0但不包含10;
double d = new Random().nextDouble() * 10;//生成0-10的随机小数,包含0.0但不包含10;
System.out.println(i);
System.out.println(d);
}
}
//第一次运行结果:
6
5.611427839186057
流程控制语句
选择结构if
if (条件语句){
执行语句; //满足条件则执行
}
if (判断条件){
执行语句1//满足条件执行,不满足就执行else
……
}else{
执行语句2
……
}
if (判断条件1) {
执行语句1//满足条件执行,不满足就执行下一条else if 依次类推
} else if (判断条件2) {
执行语句2
}
…
else if (判断条件n) {
执行语句n
} else {
执行语句n+1 //所有else if 都不满则 执行此处
}
三元运算符
语法:判断条件?表达式1:表达式2
条件表达式为真时,取表达式1,为假时,取表达式2
示例
boolean a =1>3?a=true:a=false//结果为6
其等价的if-else语句如下:
boolean a;
if (1 >3) {
a = true;
}else{
a = false;
}
很多时候三元运算符可以和if–else语句进行互换,它们两个可以等价的实现判断效果,两者的不同之处:
****1.两者对于返回值有不同的要求。三元运算符必须要有返回值,其运算后一定有一个返回值返回给开发人员使用,而if–else不一定有返回值,其执行结果可能是赋值语句或者是输出语句
2.两者的性能不同,三元运算符的运算性能高于if–else
3.两者使用范围不同,在一些特定的环境下(还不清楚,后续的学习中应该能遇到),只能用三元运算符。
4.两者的语言环境不同,三元运算符涉及到一种双目运算提升的特性
所谓双目数值提升,在双目运算符Java的开发环境下可以简单的理解为类型转换的问题
(1).如果定义了数据类型的变量和未定义数据类型的变量参与双目运算符的后双目运算,那么返回的结果就是范围大的类型
(2).如果两个定义了数据类型的变量参与双目运算的后双目运算,那么返回的结果就是范围大的类型
(3).如果直接进行数值的比较,则自动转换为范围大的类型
1.1 循环语句while
while循环语句和选择结构if语句有些相似,都是根据条件判断来决定是否执行大括号内的执行语句。区别在于,while语句会反复地进行条件判断,只要条件成立,{}内的执行语句就会执行,直到条件不成立,while循环结束。while循环语句的语法结构如下:
while(循环条件){
执行语句
………
}
在上面的语法结构中,{}中的执行语句被称作循环体,循环体是否执行取决于循环条件。当循环条件为true时,循环体就会执行。循环体执行完毕时会继续判断循环条件,如条件仍为true则会继续执行,直到循环条件为false时,整个循环过程才会结束。
public class WhileDemo {
public static void main(String[] args) {
int x = 1; // 定义变量x,初始值为1
while (x <= 4) { // 循环条件
System.out.println("x = " + x); // 条件成立,打印x的值
x++; // x进行自增
}
}
}
运行结果:
循环语句for
for循环语句是最常用的循环语句,一般用在循环次数已知的情况下。for循环语句的语法格式如下:
for(初始化表达式; 循环条件; 操作表达式){
执行语句
………
}
示例:
public static void main(String[] args) {
int sum = 0; // 定义变量sum,用于记住累加的和
for (int i = 1; i <= 4; i++) { // i的值会在1~4之间变化
sum += i; // 实现sum与i的累加
}
System.out.println("sum = " + sum); // 打印累加的和
}
运行结果:
循环语句do…while
do…while循环语句和while循环语句功能类似,其语法结构如下:
do {
执行语句
………
} while(循环条件);
在上面的语法结构中,关键字do后面{}中的执行语句是循环体。do…while循环语句将循环条件放在了循环体的后面。这也就意味着,循环体会无条件执行一次,然后再根据循环条件来决定是否继续执行。
跳转语句(break、continue)
break语句
在switch条件语句和循环语句中都可以使用break语句。当它出现在switch条件语句中时,作用是终止某个case并跳出switch结构。当它出现在循环语句中,作用是跳出循环语句,执行后面的代码。
2、 标记
当break语句出现在嵌套循环中的内层循环时,它只能跳出内层循环,如果想使用break语句跳出外层循环则需要对外层循环添加标记(给循环起名字)
public static void main(String[] args) {
int i, j; // 定义两个循环变量
over: for (i = 1; i <= 9; i++) { // 外层循环
for (j = 1; j <= i; j++) { // 内层循环
if (i > 4) { // 判断i的值是否大于4
break over; // 跳出外层循环
}
System.out.print("*"); // 打印*
}
System.out.print("\n"); // 换行
}
}
continue语句
continue语句用在循环语句中,它的作用是终止本次循环,执行下一次循环。
猜数字案例
要求:l 后台预先生成一个1-100之间的随机数,用户键盘录入猜数字l 如果猜对了,打印“恭喜您,
答对了”l 如果猜错了猜大了:打印“sorry,您猜大了!”猜小了:打印“sorry,您猜小了!”l 直到
数字猜到为止
public class Test {
public static void main(String[] args) {
//1.通过Random类中方法nextInt(),生成一个1-100之间的随机数
int randomNumber = new Random().nextInt(100);
System.out.println("随机数已生成!");
//2.输入猜的数字
System.out.println("----请输入您猜的数字:----");
Scanner sc = new Scanner(System.in);
int enterNumber = sc.nextInt();
//3.通过while循环,进行猜数字对错判断
//猜对,跳出循环,游戏结束
while(enterNumber != randomNumber){
//猜错了,根据结果,给出提示,接着猜数字,游戏继续
if(enterNumber>randomNumber) {
//如果猜大了,打印sorry,您猜大了!继续下一次循环
System.out.println("sorry,您猜大了!继续下一次循环");
}else {
//如果猜小了,打印sorry,您猜小了!继续下一次循环
System.out.println("sorry,您猜小了!继续下一次循环");
}
//输入猜的数字
System.out.println("----请输入您猜的数字:----");
enterNumber = sc.nextInt();
}
System.out.println("恭喜您,答对了!");
}
}
作业
直角三角形:
/*
这类的练习建议多练练 锻炼下逻辑思维 本菜鸟刚开始照抄答案 后来
弄半天都没弄明白逻辑,休息了一天把答案忘记后弄了差不多4个小时
才弄通O(∩_∩)O哈哈~ 弄明白后打印各种三角形的方法瞬间明悟
*/
public class Test {
public static void main(String[] args) {
System.out.println("请输入您要打印几行的直角三角形");
int lineNum = new Scanner(System.in).nextInt();
for (int i = 1; i <= lineNum; i++) {
//如果要打印倒立的直角三角形 下边的条件改为 int j = lineNum; j >= i; j--
for (int j = i-1; j >= 0; j--) {
System.out.print("* ");
}
System.out.println();
}
}
}
编写程序,生成5个1至10之间的随机整数,并打印结果到控制台
public class Test {
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
int randomNum = new Random().nextInt(11);//这里如果写10的话 生成的是1-9的随机数
System.out.print(randomNum + ",");
}
}
}
编写程序,打印1到100之内的整数,但数字中包含7的要跳过
有个求质数的题 本菜鸟跳过了,质数这个东西,是真心脑袋混乱。有大神看到的话指教下,必须要搞明白什么是质数吗
public class Test {
public static void main(String[] args) {
for (int i = 0; i <=100 ; i++) {
if (i == 7||i%10==7||i/10==7){
continue;
}
System.out.println(i);
}
}
}