杂七杂八的笔记
循环语句
/**
* 转义字符
* 使用char类型保存 \n回车(空一行) \t-tab \r换行 \\
* */
char lineFeed = '\n';
char tab = '\t';
char enter = '\r';
char slash = '\\';
/**
* 经典的打印金字塔
* 接受一个整数表示层数
* @param totalLevel 层数
* */
public void normalPyramid(int totalLevel){
for (int a=1;a<=totalLevel;a++){
for(int b=1;b<=a;b++){
System.out.print("*");
}
System.out.println('\r');
}
}
/**
* 改进金字塔
* */
public void advancePyramid(int totalLevel){
for (int a = 0;a<totalLevel;a++){
for (int c=totalLevel-a;c>0;c--){
System.out.print(" ");
}
for (int b=1;b<=a*2+1;b++){
System.out.print("*");
}
System.out.println('\r');
}
}
/**
*空心金字塔 使用while实现
* */
public void hollowPyramid(int totalLevel){
//控制输出行数
for(int a=1;a<totalLevel;a++){
//输出空格--第一个*前空格
for(int b=totalLevel-a;b>0;b--){
System.out.print(" ");
}
//第一个*--最后一个*--中间的空格
for(int c=1;c<=a*2;c++){
while (c==1&&a>1){
System.out.print("*");
break;
}
while (c==a*2){
System.out.print("*");
System.out.println('\r');
break;
}
while(c>1&&c<a*2-1){
System.out.print(" ");
break;
}
}
while(a==totalLevel-1){
for(int d=1;d<=(totalLevel-1)*2+1;d++){
System.out.print("*");
}
break;
}
}
}
初始化块
public class PublicClass {
// 非静态初始化块 先赋值9再赋值6
{
a=9;
System.out.println("这里执行了a");
}
int a = 6;
public static void main(String[] args) {
System.out.println(new PublicClass().a);
}
}
数组
public class ArrayDrill {
//foreach
private int[] arr = {1,1,1,1,1,};
private int[] arr1 = new int[8];
public int[] getArr(){
return arr;
}
public String getArrString(int[] arr){
String sum = "";
for (int i:arr) {
System.out.print("{"+ i +"}");
}
return sum;
}
/**
* 创建一个char类型的26个元素的数组,分别放置A-Z。使用for循环访问所有元素并打印出来。
* */
public void printCharArray(){
char[] wordArray = new char[26];
for (int i = 0;i<wordArray.length;i++){
wordArray[i] = (char)('A'+i);
}
for(char word:wordArray){
System.out.print(word);
}
}
/**
* 请求出一个数组int[]的最大值{4,-1,9,10,23},并得到对应的下标。
* */
/**
* 请求出一个数组的和和平均值。
* */
/**
* 数组扩容
* 创建新数组
* 循环赋值拷贝,插入最后一个元素值
* */
/**
* 二维数组 int[][] arr = {{4,6},{1,4,5,7},{-2}} 遍历二维数组并得到和
* */
public void twoDimensionalArray(){
int[][] arr = {{4,6},{1,4,5,7},{-2}};
int sum=0;
for(int[] item:arr){
for(int inItem:item){
sum = sum+inItem;
}
}
System.out.println("二维数组求和"+ sum);
}
/**
* 使用二维数组打印杨辉三角
* 1
* 1 1
* 1 2 1
* 1 3 3 1
* 1 4 6 4 1
* 1 5 10 10 5 1
* */
public void printPascalsTriangle(int level){
int[][] arr = new int[level][];
for(int i = 0;i<level;i++){//创建二维数组部分
arr[i] = new int[i+1];
for(int j = 0;j<=i;j++){
if(j==i||j==0){//第一个 和 最后一个
arr[i][j] = 1;
}else if(i>=2){//第三行开始
arr[i][j] = arr[i-1][j-1]+arr[i-1][j];
}
}
}
//打印二维数组部分
for(int[] item:arr){
for(int inItem:item){
System.out.print(inItem + " ");
}
System.out.println("");
}
}
/**
* 27. 移除元素
* 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
*
* 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
*
* 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
* */
public static void removeElement(int[] nums,int val) {
int resoult = 0;
for (int i = 0;i<nums.length;i++){
if(nums[i]==val){
for (int j = i+1;j<nums.length;j++){
nums[j-1] = nums[j];
}
nums[nums.length-1] = 0;
System.out.println(Arrays.toString(nums));
resoult++;
i--;
}
}
System.out.println("最终结果:"+Arrays.toString(nums)+"数组新长度:" + (nums.length-resoult));
}
/**
* 找出数组中重复的数字。
*
*
* 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
* */
public static void findRepeatNumber(int[] nums) {
int num = 0;
for(int i = 0;i<nums.length;i++){
for(int j = nums.length-1;j>0 && j>i;j--){
if(nums[i] == nums[j]){
num++;
System.out.println(nums[i]);
}
}
}
}
public static void main(String[] args) {
// ArrayDrill arrayDrill = new ArrayDrill();
// arrayDrill.printCharArray();
// arrayDrill.twoDimensionalArray();
// arrayDrill.printPascalsTriangle(10);
// char a = '\u25CF';//实心圆
// char b = '\u25CB';//空心圆
// System.out.println(a+" "+b);
// int[] nums = {0,1,2,2,3,0,4,2};
//// int val = 2;
//// removeElement(nums,val);
int[] nums1 = {1,1, 1};
findRepeatNumber(nums1);
}
}
循环
public class OneDrill {
/**
* 编程实现如下功能
* 1.某人有100000元,每经过一次路口,需要交费
* 当现金>50000时每次交5%
* 现金<=50000时每次交1000
* 计算可以经过多少次路口
* */
public int countPassNum(){
double totalAmount = 100000;
int num = 0;
while(totalAmount>50000){
totalAmount = totalAmount - totalAmount*0.05;
num++;
System.out.println("第"+num+"次"+ totalAmount);
if(totalAmount<=50000){
while(totalAmount<=50000){
totalAmount -= 1000;
num++;
System.out.println("第"+num+"次"+ totalAmount);
if(totalAmount-1000<0){
break;
}
}
}
}
return num;
}
//判断是否为闰年
//判断一整数是否为水仙花数 水仙花数一个三位数,其各个数的立方和为其本身。
public Boolean judgeNumIsFlower(double num){
Boolean sign = false;
double unit = num%10;
double tensDigit = (num%100 - unit)/10;
double hundredsDigit = (num-tensDigit*10-unit)/100;
double sum = Math.pow(unit,3)+Math.pow(tensDigit,3)+Math.pow(hundredsDigit,3);
if(num==sum){
sign = true;
}
return sign;
}
//输出1-100不能被5整除的数,五个一行
//输出a-z和A-Z
//求出1 -1/2 +1/3 --- 1/100的和 --1 + 1+2 + 1+2+3 + 1234 +++ 1+--+100超出范围
public String pointNum(){
double sum1 =0.0;
int sum2 =0;
double numerator = 1.0;
int[] numArray = new int[100];
for(int i=1;i<=5;i++){
//分数判断是否偶数
if(i%2==0){
sum1 -= numerator/i;
}else{
sum1 += numerator/i;
}
//整数部分
sum2 = sum2+i;
numArray[i-1] = sum2;
}
for(int num:numArray){
sum2 += num;
}
//实际整数求和要少5050
return "分数求和"+sum1 +'\n'+"整数求和"+sum2;
}
/**
* 随机生成1-100的一个数,直到生成某个指定值,结束返回或输出循环的次数
* */
public void creatMath(int totalNum){
int a = 0;
int times = 0;
while(a!=totalNum){
a = (int)(Math.random()*100)+1;
// System.out.println("a--"+ a);
//可以使用if加上break来退出循环体
if(a==totalNum){
break;
}
times++;
}
System.out.println(times);
}
字符串
public class StringDrill {
/**
* 13.罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
* 字符 数值
* I 1
* V 5
* X 10
* L 50
* C 100
* D 500
* M 1000
* 输入: s = "III"
* 输出: 3
*
* 输入: s = "IX"
* 输出: 9
* 输入: s = "LVIII"
* 输出: 58
* 解释: L = 50, V= 5, III = 3.
* 示例 5:
*
* 输入: s = "MCMXCIV"
* 输出: 1994
* 解释: M = 1000, CM = 900, XC = 90, IV = 4.
* */
public void romanToInt() {
String s = "LVIII";
int resoult = 0;
char[] sArr= s.toCharArray();
int[] iArr = new int[sArr.length];
for (int i = 0; i < sArr.length; i++) {
switch (sArr[i]){
case 'I': iArr[i] = 1;
break;
case 'V': iArr[i] = 5;
break;
case 'X': iArr[i] = 10;
break;
case 'L': iArr[i] = 50;
break;
case 'C': iArr[i] = 100;
break;
case 'D': iArr[i] = 500;
break;
case 'M': iArr[i] = 1000;
break;
}
}
for (int i = 0; i < iArr.length; i++) {
if(i+1<iArr.length){
if(iArr[i]<iArr[i+1]){
resoult += iArr[i+1] - iArr[i];
i++;
}else{
resoult += iArr[i];
}
}else{
resoult += iArr[i];
}
}
System.out.println(resoult);
}
/**
* 9. 回文数
* */
public static void isPalindrome() {
int a = 0;
//Integer integer = new Integer(a);
//自动装箱
Integer integer = a;
String str = integer.toString();
int strLength = str.length();
//判断位数是 双/单
boolean sign = strLength % 2 == 0 ? true:false;
if(sign){
//双
for(int i = 0;i < strLength / 2;i++){
if(str.charAt(i)!=str.charAt(strLength -1 -i)){
System.out.println("双"+false);
}
}
}else{
//单
for(int i = 0;i< (strLength-1)/2 ;i++){
if(str.charAt(i)!=str.charAt(strLength -1 -i)){
System.out.println("单"+false);
}
}
}
}
/**
* 实现 strStr() 函数。
*
* 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。
* */
public static void strStr(String haystack, String needle) {
System.out.println(haystack.indexOf(needle));
}
public static void main(String[] args) {
// isPalindrome();
strStr("hello","ll");
}
}