JAVA I GATECH EDX

如何不下载编译器 在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

???

重写和重载 没搞懂 

后面有讲不要紧


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值