
可以,但是一个源文件中最多只能有一个公开类(public class)而且文件名必须和公开类的类名完全保持一致。
- class OuterClass { // 外部类
- // ...
- class NestedClass { // 嵌套类,或称为内部类
- // ...
- }
- }
变量有什么用?为什么要定义变量?什么时候用?
package 基础;
class DataTypeDemo {
public static void main(String[] args) {
//定义变量的格式:
//数据类型 变量名 = 初始化值;
//定义一个字节变量
byte b = 10;
System.out.println(10);//10
System.out.println(b);//10
//定义一个短整型变量
short s = 100;
System.out.println(s);//100
//定义一个整型变量
int i = 1000;
System.out.println(i);//1000
//超过了int的范围
//int j = 1000000000000;
long j = 1000000000000L;//长整型后缀用L或者l标记。建议使用L。
//long j = 100L;
System.out.println(j);//1000000000000
//定义浮点数据变量
float f = 12.345F;//单精度浮点数用F或者f标记。建议使用F。
System.out.println(f);//12.345
//float f2 = (float) 12.3;
float f2 = 12.3F;
System.out.println(f2);//12.3
double d = 12.345;
System.out.println(d);//12.345
double e = 12.3;//12.3
System.out.println(e);
//定义字符变量
char ch = 'a';
System.out.println(ch);//a
//定义布尔变量
boolean flag = true;
System.out.println(flag);//true
}
}
&& 和 & 的区别,|| 和 | 的区别
package 基础;
class OperatorDemo3 {
public static void main(String[] args) {
int a = 3;
int b = 4;
int c = 5;
//&&双与
System.out.println((a > b) && (a > c)); //false && false = false
System.out.println((a > b) && (a < c)); //false && true = false
System.out.println((a < b) && (a > c)); //true && false = false
System.out.println((a < b) && (a < c)); //true && true = true
System.out.println("----------------");
int x = 3;
int y = 4;
//boolean b1 = ((x++ == 3) & (y++ == 4));
//System.out.println("x:"+x);//4
//System.out.println("y:"+y);//5
//System.out.println(b1);//true
//boolean b1 = ((x++ == 3) && (y++ == 4));
//System.out.println("x:"+x);//4
//System.out.println("y:"+y);//5
//System.out.println(b1);//true
//boolean b1 = ((++x == 3) & (y++ == 4));
//System.out.println("x:"+x);//4
//System.out.println("y:"+y);//5
//System.out.println(b1);//false
boolean b1 = ((++x == 3) && (y++ == 4));
System.out.println("x:"+x);//4
System.out.println("y:"+y);//4
System.out.println(b1);//false
}
}
Char型变量中能不能存储一个中文汉字?为什么?
就近原则:
package 基础;
class OperatorDemo2 {
public static void main(String[] args) {
//定义两个变量
int x = 3;
int y = 4;
//字符串的拼接,字符串在前面
//System.out.println("x:"+x);
//System.out.println("y:"+y);
System.out.println("x:"+x+",y:"+y);//3,4
//单独使用
//x++;
//y--;
++x;
--y;
//System.out.println(x);
System.out.println("x:"+x+",y:"+y);//4,3
//意外的类型,常量是不可以这样做的
//System.out.println(10++);
System.out.println("-------------------");
//参与运算使用
int a = 3;
int b = 4;
//int c = a++;
//int d = b--;
int c = ++a; //++放在操作数前面,先自增或者自减,然后再赋值
int d = --b;
System.out.println("a:"+a); //4, 4
System.out.println("b:"+b); //3, 3
System.out.println("c:"+c); //3, 4
System.out.println("d:"+d); //4, 3
}
}
short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?
swtich可以作用在byte,short,int,char,枚举,String,Byte,Short,Integer,Character
从Java 7开始,expr还可以是字符串(String),但是长整型(long)在目前所有的版本中都是不可以的。
简单表述:
因为在switch表达式中,表达式只能是整数int(Integer)或者枚举常量;由于byte,short,char可以自动转换为int
package 基础;
import java.util.Scanner;
class SwitchDemo {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
//控制键盘录入数据
System.out.println("请输入一个数据(1-7):");
int week = sc.nextInt(); //3
//switch判断语句
switch(week) {
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
case 4:
System.out.println("星期四");
break;
case 5:
System.out.println("星期五");
break;
case 6:
System.out.println("星期六");
break;
case 7:
System.out.println("星期日");
break;
default:
System.out.println("你输入的数据有误");
break;
}
}
}
两数之和Ⅱ-输入有序数组
给定一个已按照 升序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。
输入:numbers = [2,7,11,15], target = 9 输出:[1,2] 解释:2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。暴力法
使用双重for循环,第一次for循环每次选取一个数,第二次for循环每次从剩余的数中选取一个数,然后计算两数之和,将其值与目标值比较
class Solution{
public int[] twoSum(int[] numbers,int target){
int[] result = new int[2];
for(int i=0;i
for(int j=i+1;j
if(numbers[i]+numbers[j]==target){
result[0]=i+1;
result[1]=j+1;
}
}
}
return result;
}
}
双指针
class Solution{
public int[] twoSum(int[] numbers,int target){
int[] result = new int[2];
//定义左侧指针left,指向数组中的第一个元素
int left = 0;
//定义右侧指针right,指向数组中最后一个元素
int right = numbers.length-1;
while(left < right){
//如果左侧指针与右侧指针所指向的元素和等于目标值,则返回结果
if(numbers[left]+numbers[right]==target){
result[0]=left+1;
result[1]=right+1;
return result;
}else if(numbers[left]+numbers[right]
//如果左侧指针与右侧指针所指向的元素和小于目标值
//因为数组是升序排列的,为了让两数之和变大一些
//因此应将左侧指针向移动一位
left++;
}else if(numbers[left]+numbers[rught]>target){
//如果左侧指针与右侧指针所指向的元素和大于目标值
//因为数组是升序排列的,为了让两数之和变小一些
//因此应将右侧指针向左移动一位
right--;
}
}
return result;
}
}