JAVA学习-包机制、Scanner、循环
包机制
包相当于一个文件夹,包名一般利用公司域名倒置作为包名。如www.baidu.com,包名为com.baidu.www。
包语句应该存在于类的上方,如
package com.tang.operator;
public class Demo06 {
public static void main(String[] args) {
}
}
如果创建com.tang 没有出现包分层的情况,可以按照下图操作:
取消勾选Compact Middle Packages
引用一个包
引用包 要用 import
Scanner
基本语法
Scanner type = new Scanner(System.in);
type 为名字
使用方法
通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前我们一般要使用hasNext与haoNextLine()判断是否还有输入数据
如使用next()获取,hasNext()方式判断:
package com.tang.scanner;
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
Scanner type = new Scanner(System.in);
System.out.println("使用next方式就收:");
//判断用户有没有输入
if (type.hasNext()){
//使用next方式接受
String str = type.next();
System.out.println("输出的内容为:"+str);
}
type.close(); //即使关闭I/O 节省资源
}
}
如使用nextLine()方式获取,hasNextLine()方式判断:
package com.tang.scanner;
import java.util.Scanner;
public class Demo02 {
public static void main(String[] args) {
Scanner type = new Scanner(System.in);
System.out.println("使用nextLine方式接受:");
if (type.hasNextLine()){
String str = type.nextLine();
System.out.println(str);
}
}
}
- next()一旦输入空格就断了
- nextLine()的结束符为回车,不会因为空格断掉
对于hasNext判断的理解
实验可证明,在上面两种代码中,去掉hasNext()或则hasNextLine()并没有影响,但可以思考其作用,如下:
package com.tang.scanner;
import java.util.Scanner;
public class Demo03 {
public static void main(String[] args) {
int a = 0;
float b = 0.0f;
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个整数:");
a = scanner.nextInt();
System.out.println(a);
}
}
这是一个让用户输入整数的代码,并且输入的值赋值于a。这个代码没有写hasNextInt(),也就是没有判断用户输入的是不是整数,一旦输入的不是整数,代码就会报错,得不到任何反馈。但如果,我们使用hasNextInt(),就不同,如:
package com.tang.scanner;
import java.util.Scanner;
public class Demo03 {
public static void main(String[] args) {
int a = 0;
float b = 0.0f;
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个整数:");
if (scanner.hasNextInt()){
a = scanner.nextInt();
System.out.println("你输入的整数是:"+a);
}else System.out.println("你输入的不是整数!");
}
}
关于hasNext的应用
题目: 做一个程序,可以记录每次用户输入的数据,并提示这是第几个输入的数据,当前的输入数据众和为多少,直到用户输入的不是数据时,停止运行,并计算出所有数据的个数,和值,平均值。
代码如下:
package com.tang.scanner;
import java.util.Scanner;
public class Demo04 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double sum = 0;
int a = 0;
System.out.println("请输入需要计算的数据:(每个数据用回车隔开)");
while (scanner.hasNextDouble()){
double b = scanner.nextDouble();
a++;
sum = sum + b;
System.out.println("这是你输入的第"+a+"个数据,它的值为"+b+",当前数据众和为:"+sum);
System.out.println("请继续输入下一个数据,结束请输入任意不为数字的字符");
}
System.out.println("你一共输入了"+a+"个数据,数据总和为:"+sum+",数据平均值为:"+(sum/a));
scanner.close();
}
}
循环结构
首先,记住for循环的一种简单输入的方式(在idea):for.100 这就会自动输出 for (int i = 0; i <= 100; i++) {} 这个格式。
题一 计算0到100之间所有奇数,偶数的和
我的代码:
public class Demo01 {
public static void main(String[] args) {
// 计算0到100之间所有奇数,偶数的和
int sumJi = 0;
int sumOu = 0;
for (int i = 0; i <= 100; i+=2) {
sumOu = sumOu + i;
}
for (int j = 1; j <= 100; j+=2) {
sumJi = sumJi + j;
}
System.out.println("所有偶数的和:"+sumOu);
System.out.println("所有奇数的和:"+sumJi);
}
}
老师的代码:
public class Demo02 {
public static void main(String[] args) {
int oddSum = 0;
int evenSum = 0;
for (int i = 0; i <= 100; i++) {
if (i%2==0){
evenSum = evenSum + i;
}else {
oddSum = oddSum + i;
}
}
System.out.println("这是偶数和:"+evenSum);
System.out.println("这是奇数和:"+oddSum);
}
}
我觉得老师的代码要精简很多,先判断奇数偶数,再相加。
题二 用while或for循环输出1-1000之间能被5整除的数,并且每行输出3个
用for:
public class Demo03 {
public static void main(String[] args) {
for (int i = 1; i <= 1000; i++) {
if (i%5==0){
System.out.println(i);
}
}
}
}
用while:
public class Demo04 {
public static void main(String[] args) {
int i = 0;
while(i<=1000){
if (i%5==0){
System.out.println(i);
i++;
}else i++;
}
}
}
但是,没有解决每行输出三个这个问题。
老师的代码:
public class Demo04 {
public static void main(String[] args) {
int i = 0;
while(i<=1000){
if (i%5==0){
System.out.print(i+"\t"); //这里时print不是println 表示输出不换行
i++; // 且为了方便查看 \t 是为了留距离
}else i++;
if (i%(5*3)==0){ //这里是判断什么时候一行输出了三个了,可以换行了
System.out.println("\n");
}
}
}
}
学到了print与println的区别。print输出结束不换行,println是输出完换行。
题三 打印九九乘法表
我的思路:按照j*i的思路写,i永远比j大,j永远小于等于i;i还可以表示行数,而一旦j等于i就换行。
九九乘法表的样子
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
// 我的做法
ublic class Demo05 {
public static void main(String[] args) {
int j = 1;
for (int i = 1; i <= 9; i++) {
while (j<=i){
System.out.print(j+"*"+i+"="+(i*j)+"\t");
j++;
}
System.out.println(); //println 就已经换行了
j=1;
}
}
}
老师的做法更加精简,用两个for循环:
public class Demo06 {
public static void main(String[] args) {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j<=i ; j++) {
System.out.print(j+"*"+i+"="+(i*j)+"\t");
}
System.out.println();
}
}
}
break continue
break
break在任何循环语句的主题部分,均可用break控制循环的流程,break用于强行退出循环,不执行循环中剩余的语句。(break语句也在switch语句中使用)
continue
continue语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判断。
注意,continue只会终止所在循环的这个循环的本次循环,也就是说,如果是嵌套类的循环,continue在最里面的循环,他不会终止它属于的循环的外面的循环。而break是直接跳出当前所在的循环,如果所在循环外面还有循环,还是会进行判断,符合条件再次进入。
思考题,打印一个三角形
三角形如下:
*
***
*****
*******
*********
思路是把这个图形分割成三份,空格部分的倒三角,半个三角,和另外半个三角,然后一行一行打印出来。
public class Demo07 {
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
for (int i1 = 5; i1 >=i; i1--) {
System.out.print(" ");
}
for (int i1 = 1; i1 <= i; i1++) {
System.out.print("*");
}
for (int i1 =1 ; i1 < i; i1++) { //这里不写i1<=i,就可以在第一行只有一个*
System.out.print("*");
}
System.out.println();
}
}
}

浙公网安备 33010602011771号