java编程题学习与心得

来源:互联网 发布:渣到触画画的过程知乎 编辑:程序博客网 时间:2024/06/14 19:30

心得:因为是自己做的,所以并不一定官方和正确,请怀着怀疑的态度看待问题,加油,heson!

package heson.java;

/**
 * 打印九九乘法表,
 * 心得:两个for循环分别控制第一个数i和第二个数j,第一个数范围是1-9,而第二个数范围是受第一个数影响
 * 所以,j是1到i,这样才避免重复
 *
 */
public class ChengFa {
public static void main(String[] args){
for (int i = 1; i <= 9; i++){
for (int j = 1; j <= i; j++){
System.out.print(j + "*" + i + "=" + j*i +'\t');
}
System.out.println();
}
}

}

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

package heson.java;
/**
 * 题目:求素数
 * 心得:
 * 1.素数是除了1和本身,其他不能整除,
 * 2.那如何确实一个数是不是素数就可以用一个for循环i=2到本身看能不能整除,如果其中有一个数能整除就不是素数
 * 3.那如何确定一个范围的素数用两个for循环,第一个表示要求素数范围,第二个和2一样判断素数
 *
 */
public class GetPrime{
public static void main(String[] args){
int i,num;
for (num = 101; num <= 200; num++){
for (i = 2; i <= num; i++)
if (num % i == 0)
break;
if (num == i){
System.out.println(num);
}
}
}
}

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
package heson.java;
/**
 * 打印菱形
 * 心得:1.首先找出规律2.分上部分和下部分打印,上部分行数为num/2+1(菱形一半再加上中间最大的)。
 *    3.上部分分为三部分(突破点找到每行打印空格和星号个数并且之间关系)
 * 3.1打印空格:第一行打印上部分行数减1,第二行打印上部分行数减2,所以循环条件为num/2-i;
 * 3.2打印星型:每行打印个数为1,3,5,7.也就是奇数,2*i(i表示上半部每行)+1;
 * 3.3打印隔行,System.out.println();
 * 4.下部分分为三部分,下部分行数为num/2
 * 4.1打印空格:第一行为一个空格,第二行为两个空格,第i行为i个空格(记住,i是从0开始)
 *        循环条件为num/2(下半部行数)
 * 4.2打印星号:先记得规律中间行星个数为行数(行数为7,中间最大行数星星个数为7),
 *        然后每一行是上一行减2;也就是num-2*(i+1)(记得i从0开始,所以加1表示第int行);
 * 4.3打印隔行,System.out.println();
 *     *        
 *    ***
 *   *****        num为7时候
 *  *******     (上部分为num/2+1)
 *   *****
 *    ***
 *     *
 * @author hesonl
 *
 */
public class LingXing2 {
public static void main(String[] args){
int num = 7;

for (int i = 0; i < num/2+1; i++){
for (int j = 0; j <num/2-i;j++){
System.out.print(" ");
}
for (int k = 0; k <i*2+1; k++){
System.out.print("*");
}
System.out.println();
}

for (int i = 0; i < num/2; i++){
for (int j = 0; j < i+1;j++){
System.out.print(" ");
}
for (int k = 0; k <num-2*(i+1); k++){
System.out.print("*");
}
System.out.println();
}
}
}

。。。。。。。。。。。。。。。。。。。。。。。。。
package heson.java;


import java.util.Scanner;


/**
 * 题目:求s = a + aa + aaa + aaaa + aa...a的值,其中a是一个数字。
 * 例如2 + 22 + 222 + 2222 + 22222(此时共有5个数相加),几个数相加有键盘控制
 * 
 *心得:看到数列或者一些数累加和就想到sum = sum + 公式;
 *    然后就是理解这个sum2 = sum1*10 + a神奇地方;
 */
public class PaiLie {
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int a = scan.nextInt();
int n = scan.nextInt();
int sum1 = 0;
int sum2 = 0;

for (int i = 0; i <=n-2; i++){
sum1 = sum1*10 + a;
System.out.print(sum1 + "+");
}
sum2 = sum1*10 + a;
System.out.println(sum2);
}
}

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
package heson.java;
/**
 * 题目: 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?且打印出来
 */
public class shuZi {
public static void main(String[] args) {
int i, j, k;
for (i = 1; i <= 4; i++) {
for (j = 1; j <= 4; j++) {
if (i != j) {
for (k = 1; k <= 4; k++) {
if (i != k && j != k) {
int n = i * 100 + j * 10 + k;
System.out.print(n + " ");

}
}
}
}
}
}
}

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
package heson.java;
/**
 * 题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。
 *     有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
 * 
 * 心得:把abc为一个容器,a可以赋值为xyz,b也可以赋值为xyz,c也一样,赋值为哪个就是和哪个比赛。
 *      和三位数不重复题思想一样
 */
public class PingPang {
public static void main(String[] args){
char  a,b,c;

for (a = 'x'; a <= 'z'; a++){
for (b = 'x'; b <= 'z'; b++){
if (a != b){
for (c = 'x'; c <= 'z'; c++){
if (a != c && b != c){
if (a != 'x' && c != 'x' && c != 'z'){
System.out.println("a Vs " + a);
System.out.println("b Vs " + b);
System.out.println("c Vs " + c);
}
}
}
}
}
}
}
}

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

package heson.java;
/**
 *题目: 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,
 * 假如兔子都不死,问每个月的兔子总数为多少?
 * 
 *心得:1 1 2 3 5 列出来几个就发觉是fibonacci,所以就知道怎么做了,这是迭代做法
 *
 */
public class Rabbit {
public  static int rabbiNum(int month){
int firstRabbit = 1, twoRabbit = 1, rabbitNum = 0, i;
 
if (month <= 0){
System.out.println("输入错误,请重新输入");
}else if (month > 0 && month <3){
rabbitNum = 1;
}else{
for (i=3; i<=month; i++)
{
rabbitNum=firstRabbit+twoRabbit;
firstRabbit=twoRabbit;
twoRabbit=rabbitNum;
}
}
return rabbitNum;
}
public static void main(String[] args){
int month = 3;
System.out.println("每个月的兔子总数为:" + 2*rabbiNum(month));
}
}

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

package heson.java;
/**
 * 5. 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和
 * 
 *解法:重点是每个分数的父母是上一个分数的分子,而每个数的分子是上一个数的分子和分母相加,其中需要用到中间变量,
 *  
 */
public class ShuLie {
public static void main(String[] args){
float fenMu = 1;
float fenZi = 1;
float sum = 0;
float temp = 0;

for (int i = 1; i <= 20; i++){
temp = fenMu;
fenMu = fenZi;
fenZi = temp + fenZi;
sum += fenZi/fenMu;//数列或者多个数累加经常用这模式  sum += 公式;
}

System.out.println(sum);
}
}

。。。。。。。。。。。。。。。。。。。。。。。。。

package heson.java;
/**
 *  打印杨辉三角
 * 1
 * 1 1
 * 1 2 1
 * 1 3 3 1
 * 1 4 6 4 1
 * 1 5 10 10 5 1 
 * 心得:主要是找出规律:1.行数和列数相等2.首行都为1,末行都为1,
 *        中间每个数是倒三角和也就是上一个数和左上一个数的和。
 *        刚开始我没想到二维数组,后来发现中间规律不是和索引有关,
 *     而是和每个实际值相关,所以需要某个容器装它,然后和行列有关,所以用二维数组。
 *     然后架构是分成三部分
 */
import java.util.Scanner;


public class YangHui {
public static void main(String[]  args){
System.out.println("请输入行数:");
int n = new Scanner(System.in).nextInt();
int[][]arr = new int[n][n];

for (int i = 0; i < n; i++){
for (int j = 0; j <= i; j++){
if (j == 0){             //首行
System.out.print("1"+" ");
arr[i][j] = 1;
}
else if(j == i ){        //末行
System.out.print("1");
arr[i][j] = 1;
}
else{                    //中间
arr[i][j] = arr[i-1][j]+arr[i-1][j-1];
System.out.print(arr[i][j]+" ");
}
}
System.out.println();//隔行
}
}
}

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

package heson.java;
/*
 * 题目:冒泡排列(从小到大)
 * 心得:1.解题思想是第一个位置与第二个位置到最后一个位置比较把最小的数放到位置上,所以角度是位置
 * 然后第二个位置再循环放第二小位置,这样就可以排序
 * 2.然后知道两个for循环什么意思。第一个for是从第一个位置到倒数第二个位置放最小数循环(因为n-1个数确定位置,那最后一个肯定确定位置)
 * 所以for从第0位置到长度-1位置确定;
 * 3.第二个for是每一个位置与接下来的每个数比较,比如第1个for循环i=1个位置确定是,第二个for循环从i=1和i=2个位置比较
 * 所以for从j=i+1到长度(因为是和每个接下来数比较,所以肯定要和最后一个数比较,所以不是长度减1)
 * 
 */
public class Array {
public static void main(String[] args){
int[] arr = {6,8,7,5,9,1,3,2};

for (int i =0; i < arr.length - 1; i++){
for (int j = i+1; j < arr.length; j++){
if (arr[i] > arr[j]){
arr[i] ^= arr[j];
arr[j] ^= arr[i];
arr[i] ^= arr[j];
}
}
}

for(int v : arr){
System.out.print(v + " ");
}
}
}

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

package heson.java;
/**
 * 题目:倒序输出数组内容
 * 心得:1.掌握arraycopy用法:第一个参数为复制源数组,第二个为复制开始的位置,也就是取出内容的起始位置
 *       第三个为复制的目标数组,第四个为粘贴开始的位置,也就是放置内容的起始位置,第五个为源数组提取的长度
 * 2.理解for-each增强型循环,因为一般遍历数组和数组下标也就是索引无关,所以用了这个。
 *   第一个参数是输出的内容,类型和数组一样就行,第二个为数组名
 *
 *
 */
public class ArrayCopy {
public static void main(String[] args){
int[] arrSrc = {1,2,3,4,5};
int[] arrDest = new int[5];

for (int i = 0; i <= arrSrc.length - 1; i++){
System.arraycopy(arrSrc, i, arrDest, arrSrc.length - 1 - i, 1);
}

for(int v:arrDest) {
System.out.print(v+",");
}
}
}

原创粉丝点击