Java 各整数类型有固定的表数范围和字段长度,不受具体 OS 的影响,以保证 java 程序的可移植性。
与整数类型类似,Java 浮点类型也有固定的表数范围和字段长度,不受具体操作系统的影响。
浮点型常量有两种表示形式:
char 型数据用来表示通常意义上 “字符” ( 2 字节) ,Java 中的所有字符都使用Unicode编码,故一个字符可以存储一个字母,一个汉字,或其他书面语的一个字符。
乱码:世界上存在着多种编码方式,同一个二进制数字可以被解释成不同的符号。因此,要想打开一个文本文件,就必须知道它的编码方式,否则用错误的编码方式解读,就会出现乱码。
boolean 类型用来判断逻辑条件,一般用于程序流程控制:
自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。
String n = "123";
int i = Integer.parseInt(n);
String不是基本数据类型,属于引用数据类型,java.lang.String 是 java 中定义的一个类,类都属于引用数据类型。
package com.company;
public class Main {
public static void main(String[] args) {
String str1 = Integer.toBinaryString(60);//转二进制
String str2 = Integer.toHexString(60);//转十六进制
System.out.println(str1);
System.out.println(str2);
//手写转十六进制
int i = 60;
int i1 = i & 15;
String s1 = (i1 > 9) ? (char)(i1 - 10 + 'A') + "" : i1 + "";
int temp = i >>> 4;
int i2 = temp & 15;
String s2 = (i2 > 9) ? (char)(i2 - 10 + 'A') + "" : i2 + "";
System.out.println(s2 + s1);
}
}
运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。(一共六种)
注意:
m = (m ^ n) ^ n
num1 = num1 ^ num2;
num2 = num1 ^ num2;
num1 = num1 ^ num2;
程序从上到下逐行地执行,中间没有任何判断和跳转。
根据条件,选择性地执行某段代码。
switch 语句有关规则:
具体实现步骤:
1、导包:
import java.util.Scanner;
2、Scanner 的实例化
Sacnner scan = new Scanner(System.in);
3、调用 Scanner 类的相关方法,来获取指定类型的变量。
int num = scan.nextInt();
double weight = scan.nextDouble();
boolean nIs = scan.nextBoolean();
String name = scan.next();
注意:需要根据相应的方法,来输入指定类型的值,如果输入的数据类型与要求的类型不匹配时,会报异常:InputMismatchException 导致程序终止。
double value = Math.random(); // [0.0,1.0)
int value = ( int ) ( Math.random() * 90 + 10); //[10.0,100.0) -->[10,99]
int value = ( int ) ( Math.random() * (b - a + 1) + a);
1、
2、从键盘分别输入年、月、日,判断这一天是当年的第几天。
package com.company;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("年:");
int year = input.nextInt();
System.out.print("月:");
int mOnth= input.nextInt();
System.out.print("日:");
int day = input.nextInt();
int days = day;
//加前面几个月的满月天数
switch(month){
case 12:
//前面11个月的总天数
//days += 第11月的天数;
days += 30;
case 11:
//前面10个月的总天数
//days += 第10月的天数;
days += 31;
case 10:
days += 30;//九月
case 9:
days += 31;//八月
case 8:
days += 31;//七月
case 7:
days += 30;//六月
case 6:
days += 31;//五月
case 5:
days += 30;//四月
case 4:
days += 31;//三月
case 3:
days += 28;//二月
// 闰年天数+1
if(year % 4 ==0 && year % 100 != 0 || year%400==0)
{
days++;
}
case 2:
days += 31;//一月
}
System.out.println(year + "年" + month + "月" + day + "日是这一年的第" + days + "天");
}
}
根据循环条件,重复性的执行某段代码。
输入两个正整数 m 和 n,求其最大公约数和最小公倍数。比如:12 和 20 的最大公约数是 4,最小公倍数是 60
package com.company;
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
System.out.print("请输入正整数m:");
int m = input.nextInt();
System.out.print("请输入正整数n:");
int n = input.nextInt();
//求最大公约数
int iMin = m > n ? n : m;
for(int i = iMin; i >= 1; i--)
{
if(m % i == 0 && n % i == 0)
{
System.out.println("最大公约数为:" + i);
break;
}
}
//求最小公倍数
int iMax = m > n ? m : n;
for(int i = iMax; i <= m * n; i++)
{
if(i % m == 0 && i % n == 0)
{
System.out.println("最大公倍数为:"+ i);
break;
}
}
}
}
1、从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入为 0 时结束程序。
package com.company;
import sun.security.krb5.SCDynamicStoreConfig;
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
int positiveNumber = 0;//记录正数的个数
int negativeNumber = 0;//记录负数的个数
while(true) //可替换为for( ; ; )
{
int num = input.nextInt();
//判断num的正负情况
if(num > 0)
{
positiveNumber++;
}else if(num <0)
{
negativeNumber++;
}else
{
break;
}
}
System.out.println("正数的个数为:" + positiveNumber);
System.out.println("负数的个数为:" + negativeNumber);
}
}
package com.company;
import java.util.Scanner;
/*
10000以内的所有质数的输出,有2种优化方法。
*/
public class Main
{
public static void main(String[] args) {
boolean isFlag = true;//是否是质数的标志位
int nCount = 0;
//获取当前时间距离1970-01-01 00:00:00 的毫秒数
long start = System.currentTimeMillis();
//优化二:针对本身是质数的自然数进行优化
for(int i = 2 ; i <100000; i++){
for(int j = 2; j <= Math.sqrt(i);j++){//for(int j = 2; j if(i % j == 0) {
isFlag = false;
break; //优化一,只针对非质数的自然数进行优化
}
}
if(isFlag == true){
//System.out.println(i);
nCount++;
}
isFlag = true;//还原标志位
}
//获取当前时间距离1970-01-01 00:00:00 的毫秒数
long end = System.currentTimeMillis();
System.out.println("质数的个数为:"+ nCount);
System.out.println("程序运行所用时间为:"+ (end-start));
//质数个数:9592
//不优化时间:30609;优化一时间:3120;优化二时间:31
}
}
使用范围 | 循环中使用的作用(不同的) | 相同点 | |
---|---|---|---|
break | switch-case循环结构中 | 结束当前循环 | 关键字后面不能声明执行语句 |
continue | 循环结构中 | 结束当次循环 | 关键字后面不能声明执行语句 |
public class Main
{
public static void main(String[] args) {
label:for(int i = 1; i <= 4; i++){
for(int j = 1; j <= 10; j++){
if(j % 4 == 0)
break label;
}
System.out.println(j);
}
}
}
public class Main
{
public static void main(String[] args) {
label:for(int i = 1; i <= 4; i++){
for(int j = 1; j <= 10; j++){
if(j % 4 == 0)
continue label;
}
System.out.print(j);
}
}
}
public class Main
{
public static void main(String[] args) {
int nCount = 0;
//获取当前时间距离1970-01-01 00:00:00 的毫秒数
long start = System.currentTimeMillis();
lable:for(int i = 2 ; i <100000; i++){
for(int j = 2; j <= Math.sqrt(i);j++){
if(i % j == 0) {
continue lable; //
}
}
//能执行到此步骤的都是质数
nCount++;
}
//获取当前时间距离1970-01-01 00:00:00 的毫秒数
long end = System.currentTimeMillis();
System.out.println("质数的个数为:"+ nCount);
System.out.println("程序运行所用时间为:"+ (end-start));
//质数个数:9592
//优化时间:31
}
}