JAVA笔记
数组
/* 动态初始化,直接指定数组长度,数组元素个数
格式:数据类型[] 数组名称 = new 数据类型[数组长度];
静态初始化,在创建数组的时候,不直接指定数组长度,而是直接指定数组的具体内容
格式:数据类型[] 数组名称 = new 数据类型[]{元素1,元素2,元素3,....};*/
import java.util.Scanner;
public class test4 {
public static void main(String args []) {
//创建一个数组,里面可以储存300个int数据
//格式:数据类型[] 数组名称 = new 数据类型[数组长度];
int[] arrayA = new int[300];
//创建一个数组,里面可以储存10个double数据
double[] arrayB = new double[10];
//创建一个数组,里面可以储存5个string数据
String[] arrayC = new String[5];
//创建一个数组,它的具体内容为5,15,25;
int[] arrayD = new int[]{5,15,25};
String[] arrayE = new String[]{"Hello","World","Java"};
//静态创建数组
double[] myList = {1.9, 2.9, 3.4, 3.5};
// 打印所有数组元素
for (int i = 0; i < myList.length; i++) {
System.out.println(myList[i] + " ");
}
// 计算所有元素的总和
double total = 0;
for (int i = 0; i < myList.length; i++) {
total += myList[i];
}
System.out.println("Total is " + total);
// 查找最大元素
double max = myList[0];
for (int i = 1; i < myList.length; i++) {
if (myList[i] > max) max = myList[i];
}
System.out.println("Max is " + max);
}
}
字符串
- [交换任意两个值](https://www.nowcoder.com/practice/95eb723a3e854376a7eb6d116cc7d875?tpId=107&tqId=33296&tPage=1&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking)
import java.util.*;
public class Demochange1 {
public static void main(String args[]){
Scanner in = new Scanner(System.in);
String str = in.next();
// indexOf 方法可返回某个指定的字符串值在字符串中首次出现的位置。
int a = str.indexOf('a'); //0
int b = str.indexOf('b'); //6
// System.out.println(str.length());
// 输出字符串的长度,从1开始
/*
* substring
* 方法返回字符串的子字符串
* beginIndex -- 起始索引(包括), 索引从 0 开始。
* endIndex -- 结束索引(不包括)
* */
String rest1 = str.substring(b + 2,str.length());
String rest2 = str.substring(a + 2,b - 1);
System.out.println("a=" + rest1 + ",b=" + rest2);
}
}
- 输出浮点数中的一位整数
package demo3;
import java.util.Scanner;
public class subString{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
double num=sc.nextDouble();
String str = String.valueOf(num);
//按小数点分隔数字字符串
String[] split = str.split("\\.");
//输出小数点前一位
System.out.println(split[0].charAt(split[0].length()-1));
}
}
/*split 方法的结果是一个字符串数组.
正常的写法是这样的:
1、如果用“.”作为分隔的话,必须是如下写法:String.split("\\."),这样才能正确的分隔开,不能用String.split(".");
2、如果用“|”作为分隔的话,必须是如下写法:String.split("\\|"),这样才能正确的分隔开,不能用String.split("|");
“.”和“|”都是转义字符,必须得加"\\";
3、如果在一个字符串中有多个分隔符,可以用“|”作为连字符,比如:“a=1 and b =2 or c=3”,把三个都分隔出来,可以用String.split("and|or");*/
/*1. 由 基本数据型态转换成 String
String 类别中已经提供了将基本数据型态转换成 String 的 static 方法,也就是 String.valueOf() 这个参数多载的方法,有下列几种:
String.valueOf(boolean b) : 将 boolean 变量 b 转换成字符串
String.valueOf(char c) : 将 char 变量 c 转换成字符串
String.valueOf(char[] data) : 将 char 数组 data 转换成字符串
String.valueOf(char[] data, int offset, int count) : 将 char 数组 data 中 由 data[offset] 开始取 count 个元素 转换成字符串
String.valueOf(double d) : 将 double 变量 d 转换成字符串
String.valueOf(float f) : 将 float 变量 f 转换成字符串
String.valueOf(int i) : 将 int 变量 i 转换成字符串
String.valueOf(long l) : 将 long 变量 l 转换成字符串
String.valueOf(Object obj) : 将 obj 对象转换成 字符串, 等于 obj.toString()
用法如:
int i = 10;
String str = String.valueOf(i);
这时候 str 就会是 "10" 。
2. 由 String 转换成 数字的基本数据型态
要将 String 转换成基本数据型态,大多需要使用基本数据型态的包装类别,比如说 String 转换成 byte,可以使用 Byte.parseByte(String s) 这一类的方法。
如果无法将 s 分析,则会丢出 NumberFormatException。
byte :
Byte.parseByte(String s) : 将 s 转换成 byte
Byte.parseByte(String s, int radix) : 以 radix 为基底 将 s 转换为 byte 比如说 Byte.parseByte("11", 16) 会得到 17
double :
Double.parseDouble(String s) : 将 s 转换成 double
float :
Double.parseFloat(String s) : 将 s 转换成 float
int :
Integer.parseInt(String s) : 将 s 转换成 int
long :
Long.parseLong(String s)
*/
for 循环
//求出1~100之间的偶数和
public class Main {
public static void main(String args[]) {
int sum = 0;//用来累加的存钱罐
for (int i = 1; i <= 100; i++){
if (i % 2 == 0){//如果是偶数
sum += i;
}
}
System.out.println("结果是;" + sum);
}
}
Switch-case的用法
package demo7;
import java.util.Scanner;
public class demo7YearMonthDays {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while (sc.hasNextInt()){
int y = sc.nextInt();
int m = sc.nextInt();
switch (m) {
case 2:
if (y%100 == 0 && y%400 != 0 || y%4 != 0) {
System.out.println("28");
} else {
System.out.println("29");
}
break;
case 4:
System.out.println("30");
break;
case 6:
System.out.println("30");
break;
case 9:
System.out.println("30");
break;
case 11:
System.out.println("30");
break;
default:
System.out.println("31");
break;
}
}
}
}
/*Switch--case的用法*/
//匹配 就是全等。
/*
语法:
switch(表达式){
case 值1:
表达式的值和 值1匹配上了,需要执行的代码;
break;
case 值2:
表达式的值和 值2匹配上了,需要执行的代码;
break;
case 值3:
表达式的值和 值3匹配上了,需要执行的代码;
break;
default:
如果表达式的值和以上的case后面的值都没有匹配上,那么就执行这里的代码。
break;
}
不写break会穿透到下一个break
*/
编程题
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
Scanner in = new Scanner(System.in);
while(in.hasNext()) {//循环读入
char c = in.next().charAt(0);//从字符串中取出一个字符
if (c >= 'a' && c <= 'z') System.out.println("YES");
else if (c >= 'A' && c <= 'Z') System.out.println("YES");
else System.out.println("NO");
}
}
}
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
Scanner in = new Scanner(System.in);
double a = in.nextDouble();
int b = in.nextInt();
int c = in.nextInt();
int d = in.nextInt();
double con = 1;
/*计算双11 12是否有折扣*/
if(b == 11 && c == 11) con = 0.7;
if (b == 12 && c == 12) con = 0.8;
if (d == 1) a = a * con - 50;
else a = a * con;
if (a < 0) a = 0.00;
System.out.println(String.format("%.2f", a));//输出控制两位小数
}
}
- 水仙花数
import java.util.Scanner;
/*水仙花数*/
public class Main {
public static void main(String args[]) {
int i;
for (i = 100; i < 1000; i++){
int g = i % 10;
int s = (i % 100) / 10;
int b = i / 100;
if (i == Math.pow(g,3) + Math.pow(s,3) + Math.pow(b,3))
System.out.println(i);
}
}
}
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
Scanner in = new Scanner(System.in);
while (in.hasNext()){
char a = in.next().charAt(0);
if (a == 'a' || a == 'A' || a == 'e' || a == 'E'|| a == 'i' || a == 'I' || a == 'o' || a == 'O' || a == 'u'
|| a == 'U')
System.out.println("Vowel");
else
System.out.println("Consonant");
}
}
}
import java.util.Arrays;
import java.util.Scanner;
/* 数组的排序*/
public class Main {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
sc.nextLine();
String s = sc.nextLine();
String[] s1 = s.split(" ");
Integer[] ss = new Integer[num];
for(int i=0;i<num;i++) {
ss[i] = Integer.valueOf(s1[i]);
}
Arrays.sort(ss);
for(int i=ss.length-1;i>ss.length-6;i--) {
System.out.print(ss[i]+" ");
}
}
}
import java.util.Scanner;
/*print 与 println的区别
1.输出方式不同。 Print在输出完信息不换行,Println在输出完信息自动换行。
print将它的参数显示在命令窗口,并将输出光标定位在所显示的最后一个字符之后。
println 将它的参数显示在命令窗口...
2.输出结果不同。 print是用于格式化输出的。
println在要输出的内容后自动加了回车换行 ,这个函数不能用输出格式。*/
public class Demo1return{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int c = sc.nextInt();
for (int i = 1; i <= 5;i++){
for(int j=5-i;j>0;j--){
System.out.print(" ");
}
for(int m=1;m<=i;m++)
System.out.print(c+" ");
System.out.println();
}
}
}
//考察循环执行的顺序并区别print 与 println .
import java.util.Scanner;
public class Demo1return{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String str = sc.next();
String year = str.substring(0,4);
String month = str.substring(4,6);
String date = str.substring(6,8);
System.out.println("year=" + year);
System.out.println("month=" + month);
System.out.println("date=" + date);
}
}
/*字符串的substring使用方法
1.substring(x)是从字符串的第x个字符截取
2.substring(x,y)是从字符串的第x个字符到第y个字符位置的停止.
*/
package demo3;
import java.util.Scanner;
public class subString{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
if(a + b >= 100) {
String s = String.valueOf(a + b);//将a+b相加后的int整型转换为String
int length = s.length();
if(s.charAt(length - 2) == '0') { //如果s倒数第二位是0,则只输出最后一位
System.out.println(s.substring(length - 1));
}else {
System.out.println(s.substring(length - 2));//如果s倒数第二位不是0,输出最后两位
}
}else {
System.out.println(a + b);//a+b小于100,直接输出相加的结果
}
}
}
package demo3;
import java.util.Scanner;
public class demo3repeat {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
int sum_A = 0;
int sum_B = 0;
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == 'A'){
sum_A++;
}else if (str.charAt(i) =='B'){
sum_B++;
}else{
break;
}
}
if (sum_A < sum_B){
System.out.println("B");
}else if (sum_A > sum_B){
System.out.println("A");
}else{
System.out.println("E");
}
}
}
package demo1;
import java.util.Scanner;
public class demo1Second {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int seconds = sc.nextInt();
if (seconds > 0 && seconds <= 100000000){
int hour = seconds / 3600;
int minute = (seconds - hour * 3600) / 60;
int seconds1 = seconds - hour * 3600 - minute * 60;
System.out.println(hour + " " + minute + " " + seconds1);
}
}
}
package demo1;
import java.util.Scanner;
public class demo1TotalScore {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
double score1 = sc.nextDouble();
double score2 = sc.nextDouble();
double score3 = sc.nextDouble();
double totalScore = score1 + score2 + score3;
double average = (score1 + score2 + score3) / 3;
System.out.printf("%.2f ", totalScore);//保持两位小数,精度控制。
System.out.printf("%.2f", average);//保持两位小数,精度控制。
}
}
package demo5;
import java.util.Scanner;
public class demo5Change {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
String s=sc.next();
System.out.println(s.toLowerCase());
}
}
}
/*基本知识:对一个String对象使用toLowerCase方法,会得到一个新的String对象,内容是原来对象的小写形式。
同样的,原对象调用toUperCase方法,回得到新的String对象,其内容是原来对象的大写形式。
问题描述:java中字符串调用toLowerCase会不会修改原本的字符串
探究结果:不会
验证代码:
String string = new String("TEST");
string.toLowerCase();
System.out.println(string);
输出结果:TEST*/
package demo5;
import java.util.Scanner;
public class demo5Shifted {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int n = sc.nextInt();
if (n >= 0 && n < 31) {
System.out.println(2 << n - 1);
}
}
}
}
package demo5;
import java.util.Scanner;
public class demo5Average {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
double[] myList = new double[5];//创建一个数组,里面可以储存5个double数据
double total = 0;
for (int i = 0; i < myList.length; i++) {
myList[i] = sc.nextInt();//依次读取数组中的数据
total += myList[i];
} //计算总和
double average = total/myList.length;
System.out.println(average);
}
}
package demo6;
import java.util.Scanner;
import java.util.Arrays;
public class demo6HighestScore {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while (sc.hasNextInt())
{
int a = sc.nextInt();
int b = sc.nextInt();
int c = sc.nextInt();
int[] arr = {a,b,c};//如果不知道数组中的具体变量个数,用动态数组怎么找出最大值。
int max = arr[0];
for (int i = 0; i < arr.length; i++) {//foreach在数组或集合上遍历变量。
//格式为:for(数组类型 变量名:数组名);
// 例如for(int i : arr)。
if (arr[i]>arr[0]) max = arr[i];
}
System.out.println(max);
//Arrays.sort(arr);//升序排列,Array.sort(int [] arr)对数组进行升序排列;
//降序排列,Arrays.sort(arr,Collections.reverseOrder());
//System.out.println(arr[arr.length-1]);
}
}
}
package demo7;
import java.util.Scanner;
public class demo7Calculator {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String s = sc.nextLine();
//正则切割
String[] str = s.split("[+\\-*/]");
if (str.length < 2){
//题目已交代了格式是“操作数 运算符 操作数”,所以不需要判断奇葩的不合法情况,例如"1+2:333"”
System.out.println("Invalid operation!");
}else {
double a = Double.parseDouble(str[0]);
double b = Double.parseDouble(str[1]);
String opt = s.substring(str[0].length(),str[0].length()+1);
switch (opt){
case "+":
System.out.printf("%.4f" + opt + "%.4f=%.4f",a,b,a+b);
break;
case "-":
System.out.printf("%.4f"+opt+"%.4f=%.4f",a,b,a-b);
break;
case "*":
System.out.printf("%.4f"+opt+"%.4f=%.4f",a,b,a*b);
break;
default:
if (b==0){
System.out.println("Wrong!Division by zero!");
}else {
System.out.printf("%.4f"+opt+"%.4f=%.4f",a,b,a/b);
}
break;
}
}
}
}
}
数学公式
$O(2^3) $
$\frac{1}{4}$
$\sqrt{16}$