今天敲了个关于华氏温度和摄氏温度转换的代码,如下:
package com.yxc;
import java.util.Scanner;
public class Hera {
public static void main(String[] args) {
//要保证输入的数字和单位间有空格
System.out.println("请输入温度值(n C|F): ");
Scanner sca = new Scanner(System.in);
int d = sca.nextInt();//输入的数字
char c = sca.next().trim().charAt(0);//输入的单位
if(c=='c'||c=='C') {
double f_temp = 9*d/5.0+32;
//对double四舍五入
int f_temp_int = (int)(f_temp+0.5);
System.out.println("转换前的温度值是:"+d+" "+"C");
System.out.println("转化后的温度值是:"+f_temp_int+" "+"F");
}
else {
if(c=='f'||c=='F') {
double c_temp = 5*(d-32)/9.0;
//对double四舍五入
int c_temp_int = (int)(c_temp+0.5);
System.out.println("转换前的温度值是:"+d+" "+"F");
System.out.println("转化后的温度值是:"+c_temp_int+" "+"C");
}
else {
System.out.println("你输入对是个啥?单位都不正确");
}
}
}
}
里面用到了控制台Scanner
我就比较好奇,为什么其中的char c = sca.next().trim().charAt(0);
是可以这样使用的?
经过百度
得到以下启发:
Scanner是一个类,next()是一个方法,charAt()也是方法
next().charAt(0)结构分析?
Scanner scan=new Scanner(System.in);
String s=scan.next(); //返回一个String 对象
char c= s.charAt(0) ; //调用String 对象的charAt() 方法,该方法返回char
//最重要的是理解java对象,在java中 几乎一切皆对象;
另外的:这是百度的回答
scanner可以允许输入多行,
next() 每次取到一个间隔符前面的数据 如: 输入 a b c 取值应该是a,因为a后面有空格
nextLine() 每次取一个换行符前面的数据 如:输入 a b c 回车,取值 就是a b c
nextInt() 是取next() 然后把字符串解析成一个int数字。
hasNextInt() 是判断下次搜索调用next()是否可以得到一个可以安全解析成int的字符串。
如果已经到达输入的结尾,或者下一个next()的返回值不能解析为一个数字,即不符合数字的格式,那么返回发false
但是经过我的实验,next()一旦输入带有空格是会报错的//补充:报错是因为下一个输入的格式不对,如果下一个输入正确,比如下一个是int型,我输入a 空格 2 这样是可以的,空格将作为分隔符!!!
nextInt()也不会转换成int而是必须定义和输入int,这个输入字符类型真的会报错
实验代码如下:
package com.yxc;
import java.util.Scanner;
public class Isis {
public static void main(String[] args) {
Scanner sca = new Scanner(System.in);
String text = sca.nextLine();
System.out.println(text);
String text2 = sca.next();
System.out.println(text2);
int text3 = sca.nextInt();
System.out.println(text3);
boolean text4 = sca. hasNextInt();//判断下次搜索调用next()是否可以得到一个可以安全解析成int的字符串。
//如果已经到达输入的结尾,或者下一个next()的返回值不能解析为一个数字,即不符合数字的格式,那么返回发false
System.out.println(text4);
}
}