如何不下载编译器 在txt文本和终端上运行java文件
【java】如何创建和运行一个java文件_哔哩哔哩_bilibili
1.在终端打开文件位置: cd+空格+文件位置
2.输入javac +文件名.java 会生成一个class文件 这是编译过程
再输入 java+class文件名
3.输入ls 打印出当前文件列表
Java Development Kit (or JDK)
Java Runtime Environment (or JRE)
java Virtual Machine (JVM)
java Virtual Machine (JVM):借助jvm java才能一个软件在任何系统都能运行
Java Runtime Environment (or JRE):只有JVM不能运行,它还需要核心类库,才能保证Java运行
Java Development Kit (or JDK):比JRE多个开发工具包,给程序员写代码用的。
java编译成字节码bytecode,就是用javac HelloWord.java编译吧
定义变量时,前面加上final,则这个变量变成常量。
如 final double PI = 3.14159265359; 则PI的值不能再变化
one method cannot see the variables that are declared inside another.
用户可在终端输入内容:
使用Scanner:
import java.util.Scanner;
Scanner input=new Scaner(System.in);
int Fahrenheit=input.nextInt();
import java.util.Scanner;
使用trim()就是去掉头尾的空格;
String day=input.nextLine().trim();
使用printf , f就是format。
记得加上\n 切换到下一行。
System.out.printf("%s Celsius: %f\n",day,celsius);
System.out.printf("the day is %s.\n",day); //%s是string类型
System.out.printf("the celsius is %f\n",celsius); //%f是float或者double类型
%d :整数
%f : float或者double
%s :string类型
%%:这才代表%
完整代码:
import java.util.Scanner;
public class Celsius8{
public static void main(String[] args){
System.out.print("type something:");
Scanner input=new Scanner(System.in);
int Fahrenheit=input.nextInt();
String day=input.nextLine().trim();
double celsius=(5.0/9)*(Fahrenheit-32);
System.out.println(day + " Fahrenheit: "+Fahrenheit);
System.out.printf("%s Celsius: %f\n",day,celsius);
System.out.printf("the day is %s.\n",day);
System.out.printf("the celsius is %f\n",celsius);
}
}
NumberFormat方法:
getCurrencyInstance: 将输出的数字直接变成货币形式+保留2位小数。输出什么货币看ip在哪个国家..java.util里的Locale允许切换到不同定位
import java.util.Locale;
import java.util.Scanner;
import java.text.NumberFormat;
public class CurrencyDemo{
public static void main(String[] args){
int items;
double itemCost,total;
Scanner input=new Scanner(System.in);
System.out.print("Enter the number of items:");
items=input.nextInt();
System.out.print("Enter the cost per item:");
itemCost=input.nextDouble();
total = items * itemCost;
System.out.println(); //这一句的作用是空一行
System.out.println("Unformatted total:"+total);
//这里用了getCurrencyInstance,货币形式,也可以用其他形式
NumberFormat currencyFormat=NumberFormat.getCurrencyInstance();
System.out.println("Formatted Total:"+currencyFormat.format(total));
}
}
import java.util.Scanner;
import java.text.NumberFormat;
import java.util.Locale;
public class CurrencyDemo{
public static void main(String[] args){
int item;
double itemCost,total;
Scanner input =new Scanner(System.in);
System.out.print("enter the total item:");
item=input.nextInt();
System.out.print("enter the cost per item:");
itemCost=input.nextDouble();
total = item * itemCost;
System.out.println();
System.out.println("Unformated total:"+total);
NumberFormat currencyFmt=NumberFormat.getCurrencyInstance(Locale.FRANCE);
System.out.println("formatted total:"+currencyFmt.format(total));
}
}
DecimalFormat:
DecimalFormat formatter=new DecimalFormat(0.0);
casting 对象转型
double d = (double) a; //将int转换成double
int e = (int) b; //将double转换成int
char g = (char) i;
转换成大写:
string.toUpperCase()
条件语句:
第一个if:
//引入Scanner 调用main
//用户输入day和fahrenheit
//使用%s,%f输出结果
//使用if判断
import java.util.Scanner;
public class Fahrenheit{
public static void main(String[] args){
Scanner input= new Scanner(System.in);
System.out.print("pls enter the day:");
String day=input.next();
System.out.print("pls enter the Fahrenheit:");
int Fahrenheit=input.nextInt();
double Celsius=(5.0/9)*(Fahrenheit-32);
System.out.println(day+" Fahrenheit is: "+Fahrenheit);
System.out.printf("%s celsius is: %.1f\n",day,Celsius);
if (Fahrenheit>70)
System.out.println("Go to parrrk.");
}
}
判断string是否相等:
String x = "park"; String y = "home";
x==y; x!=y; 或者用: x.equals(y) !x.equals(y)
public class EqualityTest{
public static void main(String[] args){
String x="park";
String y="home";
if ( x==y ){
System.out.println("x and y are aliases");
}
if ( x!=y ){
System.out.println("x and y are not aliases");
}
if ( x.equals(y) ){
System.out.println("x and y have the same content");
System.out.println("x:"+x);
System.out.println("y:"+y);
}
}
}
String y = "park"; 和 String x =new String("park"); 的区别:
如果用String x = "park" String y = "park",
那么 x=y 和 x.equals(y) 都成立
但是如果用 String x = "park" String y =new String("park"),
则 x!=y(为啥?), 而x.equals(y)成立
字符串比较大小,根据ascii code的编号比较
字符串比较大小不用>或<,要用compareTo
String x = "park"; String y = "home";
int result = x.compareTo(y);
两个字符串x和y如果相等,则返回0
如果x>y,则x.compareTo(y) 返回负数
如果x<y,则x.compareTo(y) 返回正数
public class ComparisonTest{
public static void main(String[] args){
String x="zillow";
String y="park";
if (x.compareTo(y)>0) {
System.out.println("x is bigger than y");
}
}
}
条件语句if else:
if (booleanExpression) statement1; else statement2;
或者
if (booleanExpression) { statement; statement; statement; } else { statement; statement; statement; }
if (x.compareTo(y)>0) {
System.out.println("x is bigger than y");
}
else {
System.out.println("y is bigger");
}
逻辑运算符 && || !
(fahrenheit >= 70) && (fahrenheit <= 90)
或者
fahrenheit >= 70 && fahrenheit <= 90
//引入scanner 调用main
//初始化最低温度和最高温度
//用户输入温度和日期
//用if else判断,用&&表示并且,如果在最低和最高温度之间则出去玩 否则呆在家
import java.util.Scanner;
public class Fahrenheit2{
public static void main(String[] args){
int Min_F=50;
int Max_F=100;
Scanner input=new Scanner(System.in);
System.out.print("pls enter the Fahrenheit:");
int Fahrenheit=input.nextInt();
System.out.print("the day:");
String day=input.next();
System.out.printf("On "+day+" the Fahrenheit is "+Fahrenheit+"\n");
if ( Fahrenheit >= Min_F && Fahrenheit <= Max_F ){
System.out.println("Go to parrrrrk");
}
else {
System.out.println("stay at home");
}
}
}
加入boolean判断:
//引入scanner 调用main
//初始化最低温度和最高温度
//用户输入温度和日期
//raining给个初始值为false 用户输入 如果为y 则raining变为false
//用if else判断,用&&表示并且,如果在最低和最高温度之间 并且不下雨 则出去玩 否则呆在家
import java.util.Scanner;
public class Fahrenheit2{
public static void main(String[] args){
//用final 无法再修改变量值
final int Min_F=50;
final int Max_F=100;
Scanner input=new Scanner(System.in);
System.out.print("pls enter the Fahrenheit:");
int Fahrenheit=input.nextInt();
System.out.print("the day:");
String day=input.next();
double celsius = (5.0/9)*(Fahrenheit-32);
System.out.printf("On %s the Fahrenheit is %.1f.\n",day,celsius);
boolean raining = false; //先假定raining为false raining居然是个boolean..
System.out.println("Is it raining?(y/n):");
String rainInput=input.next().toLowerCase();//用户可能输入大写Y或N,统一换成小写
//判断是否下雨 如果下雨就把raining改为true
if (rainInput.startsWith("y")){ //只要是y开头就行 以防用户输入yes
raining=true;
}
if ( Fahrenheit >= Min_F && Fahrenheit <= Max_F && !raining ){
System.out.println("Go to parrrrrk");
}
else {
System.out.println("stay at home");
}
}
}
boolean raining = false; //先假定raining为false raining居然是个boolean..
System.out.println("Is it raining?(y/n):");
String rainInput=input.next().toLowerCase();//用户可能输入大写Y或N,统一换成小写
//判断是否下雨 如果下雨就把raining改为true
if (rainInput.startsWith("y")){ //只要是y开头就行 以防用户输入yes
raining=true;
}
if ( Fahrenheit >= Min_F && Fahrenheit <= Max_F && !raining ){
System.out.println("Go to parrrrrk");
}
java的抄捷径 short-circuit evaluation:
如果&&的左端为false 那就不用运行右端了 整个语句为false 就算右端出现了除数为0也不会报错 因为没有运行
如果 || 的右端为true 那也不用运行右端了 整个语句为true
条件语句的nesting 嵌套
//引入scanner 调用main
//初始化最低温度和最高温度
//用户输入温度和日期
//raining给个初始值为false 用户输入 如果为y 则raining变为false
//用if else判断,用&&表示并且,如果在最低和最高温度之间 则好天气
//嵌套nesting,进一步判断是否下雨
import java.util.Scanner;
public class Fahrenheit3{
public static void main(String[] args){
//用final 无法再修改变量值
final int Min_F=50;
final int Max_F=100;
Scanner input=new Scanner(System.in);
System.out.print("pls enter the Fahrenheit:");
int Fahrenheit=input.nextInt();
System.out.print("the day:");
String day=input.next();
double celsius = (5.0/9)*(Fahrenheit-32);
System.out.printf("On %s the Fahrenheit is %.1f.\n",day,celsius);
boolean raining = false; //先假定raining为false raining居然是个boolean..
System.out.println("Is it raining?(y/n):");
String rainInput=input.next().toLowerCase();//用户可能输入大写Y或N,统一换成小写
//判断是否下雨 如果下雨就把raining改为true
if (rainInput.startsWith("y")){ //只要是y开头就行 以防用户输入yes
raining=true;
}
if ( Fahrenheit >= Min_F && Fahrenheit <= Max_F ){
System.out.println("good temperature");
嵌套语句
if (!raining){
System.out.println("Not raining, we go to park");
}
else{
System.out.println("Raining,we stay at home");
}
}
else {
System.out.println("Not good temperature. Bye!");
}
}
}
the Dangling Else problem:
如果有两个if 一个else 那么else对应哪个if?
对应最靠近else的那个if
In java, an else branch is matched to its closest unmatched if branch
public class DanglingElse{
public static void main(String[] args){
int num=9;
if (num>0)
if (num<10)
System.out.print("aaa");
else
System.out.println("bbb");
}
}
java的三元运算符 The Ternary Conditional Operator
condition ? expression1 : expression2
例句
if (rainInput.startsWith("y")) { raining = true; } else { raining = false; }
转换为
raining = rainInput.startsWith("y") ? true : false;
翻译为if rainInput.startsWith("y")成立,则raining=true,否则raining=false
if
else if
else
if (fahrenheit>50 && fahrenheit<75){
System.out.println("Go to park");
}
else if (fahrenheit>=75 && fahrenheit<90){
System.out.println("Swimming");
}
else{
System.out.println("Stay at home");
}
//引入Scanner 调用main
//用户输入day和fahrenheit
//用%s %f输出
//用if-else if-else判断
import java.util.Scanner;
public class Fahrenheit4{
public static void main(String[] args){
final int Min_F=50;
final int Max_F=100;
Scanner input=new Scanner(System.in);
System.out.print("Pls enter the day:");
String day=input.next();
System.out.print("enter Fahrenheit:");
int fahrenheit=input.nextInt();
double celsius=(5.0/9)*(fahrenheit-32);
System.out.printf("On %s the temperature is %.1f\n",day,celsius);
if (fahrenheit>50 && fahrenheit<75){
System.out.println("Go to park");
}
else if (fahrenheit>=75 && fahrenheit<90){
System.out.println("Swimming");
}
else{
System.out.println("Stay at home");
}
}
}
switch语句
记得写break , break是用来结束每个case的
记得写default;
switch(selection){
case 0: //如果selection=0
menuOption="Operator";
break;
case 1:
menuOption="Customer Service";
break;
case 2:
menuOption="Billing";
break;
case 3:
menuOption="Hang up";
break;
default: //记得写default默认值
menuOption="Retry Selection";
break;
}
//电话按键
//引入Scanner 调用main函数
//用户输入,定义为selection
//用switch分情况,不同switch对应不同menuOption
//输出menuOption
import java.util.Scanner;
public class SwitchTest{
public static void main(String[] args){
Scanner input=new Scanner(System.in);
System.out.println("pls enter the selection:");
int selection=input.nextInt();
String menuOption;
switch(selection){
case 0: //如果selection=0
menuOption="Operator";
break;
case 1:
menuOption="Customer Service";
break;
case 2:
menuOption="Billing";
break;
case 3:
menuOption="Hang up";
break;
default: //记得写default默认值
menuOption="Retry Selection";
break;
}
System.out.println(menuOption);
}
}
switch和if-else if-else的区别:
1.switch没那么安全 容易出bug
2.switch每个case后面只能加一个语句,而if-else if-else可以加很多个语句。
遍历iteration,三种语句:
while
do-while
for
while语句:
public class HelloWorldLoop{
public static void main(String[] args){
int counter=0;
while (counter<4){
System.out.println("Hello "+counter);
counter++;
}
}
}
while (fahrenheit>Max_f){
System.out.println("error,pls re-enter the fahrenheit:");
fahrenheit=input.nextInt();
}
do-while
一直做xx,直到while语句不成立
public class HelloWorldLoop2{
public static void main(String[] args){
int lineNum=10;
do{
System.out.println("hello"+lineNum);
lineNum--;
}while (lineNum>0);
}
}
do{
System.out.println("hello"+lineNum);
lineNum--;
}while (lineNum>0);
for循环
public class HelloWorldLoop2{
public static void main(String[] args){
for(int lineNum=0;lineNum<10;lineNum++){
System.out.println("helloworld"+lineNum);
}
}
}
循环的嵌套nested loops
用while作嵌套循环:
//调用main函数
//while外循环 变量outerCouter递增
//while内循环 innerCouter递增 打印helloword
public class HelloWorldLoop3{
public static void main(String[] args){
int outerCounter=0;
while (outerCounter<3){
int innerCounter=0;
System.out.println("outerCounter is:"+outerCounter);
while(innerCounter<5){
System.out.println("helloword"+innerCounter);
innerCounter++;
}
outerCounter++;
}
}
}
用for做嵌套循环nested loops
//用for做nested loops
//调用main函数
//for三元表达式做外循环 变量base
//for三元表达式做内循环 变量pow 打印base和pow的乘积
public class Powers{
public static void main(String[] args){
final int Limit=5;
for(int base=1;base<Limit;base++){
//System.out.println("base:"+base);
for(int pow=4;pow>0;pow--){
int result=base*pow;
System.out.println("base:"+base);
System.out.println("pow:"+pow);
System.out.println("the result is:"+result+"\n");
}
}
}
}
break和continue:
break 是直接跳出整个程序
continue是跳过本次循环,继续后面的循环
array数组
//create a new array创建数组
double[] weight={2.4,5.6,8.7,98.8};
//or
double[] weight; //declaration
weight={2.4,5.6,8.7,98.8}; //initialization
//数组某项赋值
double[] weight=new double[5]; //创建五位的数组
weight[0]=1.2; //array start from zero 数组从0开始
weight[1]=4.5;
weight[2]=6.7;
weight[3]=8.9;
weight[4]=7.8;
//input array
Scanner input=new Scanner(System.in);
double[] weight=new double[5];
weight[0]=input.nextDouble(); //用户输入作为array第一位的值
已知数组,求平均值:
public class array1{
public static void main(String[] args){
double[] weight={23,56,89,65,32};
double average_weight=(weight[0]+weight[1]+weight[2]+weight[3]+weight[4])/5;
System.out.println("the average weight is:"+average_weight);
}
}
改进一下,方法一:用for遍历array 的index:
//方法一:用for遍历array里的index
public class array1{
public static void main(String[] args){
double[] weight={23,56,89,65,32};
double sum=0;
for (int index=0;index<weight.length;index++){
sum=sum+weight[index];
}
double average_weight=sum/weight.length;
System.out.println("the average weight is:"+average_weight);
}
}
方法二,用for遍历array里的element:
for(double single_weight:weight){
sum=sum+single_weight;
}
//方法二 用for遍历array里的element
public class array1{
public static void main(String[] args){
double[] weight={34,56,78,90,54};
double sum=0;
for(double single_weight:weight){
sum=sum+single_weight;
}
double average_weight=sum/weight.length;
System.out.println("the average weight is:"+average_weight);
}
}
//寻找一个字符串是否在某个字符串数组中
//寻找一个字符串是否在某个字符串数组中
public class array2{
public static void main(String[] args){
String[] array2={"how","are","you","now"};
String target="hello";
String result="not found";
for (String single_string:array2){
if (single_string.equals(target)){
result="found";
break; //加个break 找到了后面的就不用找了 不然浪费时间
}
}
System.out.println("the target string is "+result);
}
}
Sparse Arrays and Null Checking 稀疏数组和空值检查
如果数组里的某个元素是空值null 那么查找的时候会报错 出现NullPointerException空指针异常:
Since a null reference does not point to an actual object, we cannot legally use it to invoke a method. As a result, a NullPointerException is thrown by the program in line 11. At this point, the program terminates due to the error.
解决方法:利用 &&的short-circuit evaluation短路评估,如果&&左侧是空值,为假,那么右侧就不会运行了,就不会报错
if ((concept != null) && (concept.equals("polymorphism")))
//sparse array and null cheacking 稀疏数组 和空值的处理
//调用main
//新建array,设置array各个元素值
//定义查找目标
//定义result的默认值为not found
//使用for遍历array的元素
//用equal判断查找目标是否和元素相等。使用&& 如果是空值就利用short circuit evaluation跳过
//如果找到目标,就break,不继续找
//输出结果
public class array3{
public static void main(String[] args){
String[] array3=new String[5];
array3[0]="how";
array3[1]="are";
array3[3]="you"; //注意没有index2 因为为空值null
array3[4]="now";
String target_str="hello";
String result="not found"; //默认result为not found 如果找到了再改为found
for (String single_str:array3){
if (single_str != null && single_str.equals(target_str)){
result="found";
break;
}
}
System.out.println("the result is "+result);
}
}
如何理解public static void main(String[] args) 的String[] args?
String[] args:从控制台接收参数
Double.parseDouble()是把括号里面内容变成double类型;如果要变成int,则用Integer. parseInt()。
2D array二维数组
创建二维数组:
double[ ][ ] array2d={{22,33,44},{55,66,77}};
或者
double[ ][ ] array2d={{22,33,44},
{55,66,77}};
或者 创建一个两行三列的数组
double[ ][ ] array2d=new double[2][3]; 默认各个元素都是0
//调用main函数
//创建一个二维数组
//初始化最小值最大值
//用嵌套循环判断数组里的每个元素都处于最小值和最大值之间
//输出结果
public class array6{
public static void main(String[] args){
double[][] array2d={{22,33,44},{55,66,77}};
final double min_tem=10;
final double max_tem=100;
for (int row=0;row<array2d.length;row++){
for (int col=0;col<array2d[row].length;col++){
if ((array2d[row][col]>min_tem) && (array2d[row][col]<max_tem)){
System.out.println("go to park");
}
}
}
}
}
Ragged Arrays:java允许array的不同行有不同长度..
可以直接创建:
double[][] array2d={{3,4,5},{6,7,8,9,10}};
也可以一行行创建赋值:
//ragged array
//新建一个两行的array
//新建array的第一行
//给array的第一行赋值
//新建array第二行
//给array的第二行赋值
public class array7{
public static void main(String[] args){
double[][] array7=new double[2][]; //新建2行的array
//新建array第一行
array7[0]=new double[3];
array7[0][0]=23;
array7[0][1]=34;
array7[0][2]=44;
//新建array第二行
array7[1]=new double[4];
array7[1][0]=445;
array7[1][1]=65;
array7[1][2]=89;
array7[1][3]=2;
}
}
方法method:
- 修饰符modifier:如public static。修饰符,这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。
- 返回值类型 :如void,String,Int. 方法可能会返回值。returnValueType 是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值。在这种情况下,returnValueType 是关键字void。
- 方法名:如main。是方法的实际名称。方法名和参数表共同构成方法签名。
- 参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。
- 方法体:方法体包含具体的语句,定义该方法的功能。
创建method
//method
//调用main函数
//定义searchStringArray method
//判断一个string在不在array中
public class array8{
public static void main(String[] args){
String[] array8={"one","thirty","two"};
String result=searchStringArray("zero",array8); //这里的result和searchStringArray的result在不同的范围 所以不用担心会有冲突
System.out.println(result);
result=searchStringArray("one",array8);
System.out.println(result);
}
public static String searchStringArray(String target,String[] array){
String result="not found";
for (String element:array){
if (element.equals(target)){
result="found";
break;
}
}
return result;
}
}
将result改为boolean值输出
//使用method,判断目标字符串是否在array中,并将result改为true或false
public class array9{
public static void main(String[] args){
String[] array9={"one","two","three"};
System.out.println(searchStringArray("one",array9));
System.out.println(searchStringArray("hello",array9));
}
public static boolean searchStringArray(String target,String[] array){
boolean result=false;
for (String element:array){
if (element.equals(target)){
result=true;
break;
}
}
return result;
}
}
调用外部方法 exterbal method calls
直接调用就可以 class.method()
//这个array10.java程序要调用array9.java里的class和method
//如何调用别的程序的class和method?用.就可以
public class array10{
public static void main(String[] args){
String[] another_array={"five","seven","ten"};
System.out.println(array9.searchStringArray("five",another_array));
//调用其他程序的class里的method,直接加上.就可以使用
System.out.println(array9.searchStringArray("six",another_array));
}
}
重载方法overload a method
???
重写和重载 没搞懂
后面有讲不要紧