#Java第三周总结

第三周实验题目+总结

第一题:打印输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其中各位数字立方和等于该数本身。例如,153是一个“水仙花数”。

代码:

package o;
public class a
{
    public static void main(String[] args)
    {
    	 int flower;
         for (int s=1; s<9; s++)
         {
             for (int j=1; j<9; j++)
             {

                 for (int k=1; k<9; k++)
                 {
                     flower = s*100 + j*10 + k;
                     if(Math.pow(s,3)+Math.pow(j,3)+Math.pow(k,3) == flower)
                     {
                         System.out.println(flower);
                     }
  }
   }

         }

     }
 }

运行截图:

第二题:编写Java程序,求13-23+33-43+…+973-983+993-1003的值。

代码:

package o;
public class a
{
    public static void main(String[] args)
    {
    	 
    	 int r = 0;
         int flag = 1, t = 3;
         
         for(int i=1;i<=100;i++) {
             r +=flag*((i*10)+t);
             flag = -flag;
         }
         System.out.println(r);
     }

 }


运行截图:

第三题:编程求1!+2!+3!+…+20!。

代码:

package o;
public class a
{
    public static void main(String[] args)
    
    {
        int i = 0;

        for (int k=1;k<=20;k++)
        {
            i += factorial(k);

        }

        System.out.println(i);
    }


    public static long factorial(int num)
    {
        long sum = 1L;

        for (long x=1L; x<=num; x++)
        {
            sum *= x;
        }

        return sum;
    }

    
}

运行截图:

第四题:编写Java程序,计算8+88+888+…前10项之和。

代码:

package o;
public class a
{
    public static void main(String[] args)
    {
    	long r = 0,a = 8;
        for(int i=1;i<=10;i++)
        {
            r = r + a;
            a = a * 10 + 8; 
        }
        System.out.println(""+r);
    }
}

运行截图:

第五题:一个数如果恰好等于它的因子之和,这个数就称为完数。编写程序输出1000以内的所有完数。

代码:

package o;
public class a
{
    public static void main(String[] args)
    {
      for (int x=1; x<=1000; x++)
           { int r=0;
                 for(int k=1; k<x;k++)
               {
                 if (x%k ==0)
                   {r += k;
 }
      }
                      if(r == x)
               {
                   System.out.println(x);
           }
                          }
                               }
                          }

运行截图:

第六题:编写应用程序,输出满足1+2+3+…+n<8888的最大正整数。

代码:

package o;
public class a
{
    public static void main(String[] args)
    {
    	int h,l=0;
    	
    	   for(h=1;h<8888;h++)
    	{
    		   
    	    l=l+h;
    	if(l>=8888)
    	break;
    	                }
    	   System.out.println(h);
    	}
    	                }

运行截图:

第七题:使用for循环打印下面的图(等腰三角形)

代码:

package o;
public class a
{
    public static void main(String[] args)
    {
    	int flag = 5;

        for (int a=1; a<=flag; a++){
            for (int c=0; c<flag-a; c++){
                System.out.print(" ");
            }

            for (int j=1; j<=a; j++) {
                if(j==a){
                    System.out.print("*");
                }

                else{
                    System.out.print("* ");
                }
            }

            System.out.println("");
}
}
}

运行截图:

这周学习的知识点:

一、this关键字主要有三个应用:

(1)this调用本类中的属性,也就是类中的成员变量;

(2)this调用本类中的其他方法;

(3)this调用本类中的其他构造方法,调用时要放在构造方法的首行。

Public Class Student {
String name; //定义一个成员变量name
private void SetName(String name) { //定义一个参数(局部变量)name
this.name=name; //将局部变量的值传递给成员变量
}
}

this指的是当前正在访问这段代码的对象,当在内部类中使用this指的就是内部类的对象, 为了访问外层类对象,就可以使用外层类名。

1、this调用当前属性:其主要作用是当需要给类中的数据进行初始化时,可以通过this来进行赋值,而不用随便定义一个变量来进行赋值。

2、构造方法:普通方法与构造方法的区别是构造方法在创建后只能掉用一次,用来初始化数据,而普通方法在创建后可以调用多次。对this调用必须是构造方法中的第一个语句,否则便会出错,当然也不能在普通方法中调用构造方法。最为重要的是,使用this调用不能形成循环,即不能形成递归调用而没有出口。

3、this表示当前方法,在整个过程中,this的定义没有变,只要有某一个对象调用本类中的方法,此时this就表示当前执行的对象。

二、

关于main的讲解,刚好和我这周用eclipse有点关系。https://www.cnblogs.com/xy-hong/p/7197725.html 我觉得这个网站上讲的比较详细and精华,就贴一下吧~

三、

(一些小的知识点总结起来的,包括上周的一点)

①参数传值分为基本数据类型参数的传值和引用类型参数的传值。基本数据类型参数的传值能将低精度传给高精度,但不能将高精度传给低精度;引用类型参数的传值传的是参数,如果改变参数变量所引用的实体,就会导致原变量的实体发生同样的变化。对象的组合就是把某类的对象将其他对象作为自己的组成部分,即对象a委托对象b调用b的方法来得到a想要的结果。

②成员变量可以分为实例变量和类变量,在声明成员变量时用关键字static给予修饰的称作类变量,否则称作实例变量。不同对象的实例变量互不相同,所有对象共享类变量,通过类名,可以直接访问类变量。

③类中的方法也可以分为实例方法和类方法,加static关键字修饰的是类方法静态方法,否则为实例方法。实例方法不仅可以操作实例变量,也可以操作类变量。类方法只能操作类变量,不可以操作实例变量。如果一个方法不需要操作类中的任何实例变量就可以满足程序的需要,可以考虑将这样的方法设计为一个类方法。

④方法重载的意思是一个类中可以有多个方法,具有相同的名字,但这些方法的参数必须不同。即参数的个数不同或参数的个数相同,但参数列表中对应的某个参数的类型不同。

⑤不同Java源文件中的两个类名字相同时他们可以通过隶属于不同的包来互相区分,用“package 包名”来指名该源文件定义的类所在的包。

⑥用javac -d . 类名.java来编译源文件,用java 包名.类名 来运行字节码文件。

⑦import 可以引入类库中的类和自定义包中的类,自定义包名形成的目录和无包名的类,应该放在同一文件夹中。

作业过程中遇到的问题及总结:

JDK的环境搭建没弄好,就用了eclipse来码。而上手这个软件也是真心困难,因为花了我很多时间都没搞好,所以心情就蛮烦躁的,而且也开始怀疑自己是不是不适合搞这些,运行结果下面的那几条红字把我搞毛躁了,也问了一些比我有经验的同学,并未得到解决,就度娘了一波。


以及一个我觉得写的很好的能解决这个问题的网站(虽然我并没解决自己的问题...):https://blog.csdn.net/u011170921/article/details/47614063
好吧原来是菜鸟问题,想想也是,看了别的同学也用的这个软件写的为什么很顺畅,而我就搞半天都搞不好,跟着操作依然是一行又一行的醒目的红。但我大概就知道了是自己没有“包头”的问题这种,以及新建类啥的。直到今天下午问了李萱,她告诉我改了对应的package和public class,顺便解决了我的几个小问题+鼓励我keep going on,我终于解决了第一个作业题。我太难了.......后面的题目也遇到了一些麻烦,但是都问题不大,因为主要还是“借鉴”的网上或者平日里比较会的同学的代码,我是really比珍珠还真的菜,也想自己动脑,奈何实力不够,看了别人的代码然后自己理解了一波再改了些比较基础的东西。这次作业我真的要非常非常非常感谢学委,就在这里记录下来吧,前些日子不着急,这两天却急得像热锅上的蚂蚁。像上学期一样,只要有问题了我最先找的就是学委,这两天刚好也是学委的生日,我...仍然死皮赖脸的问..问了好多好多,我超级不好意思,因为实在是问的太蠢了,学委还是emmmmm告诉我了,一个一个的告诉我,因为这种弱智问题还浪费同学的时间让我更加想好好学了..(学不会就是另一件事了 哈 哈 哈 哈.. ....),不管怎么说这次作业还是搞完了,有几个题也没看懂,打算周一周二再看看回顾回顾吧,怕考试不会(学委说完全copy代码会担心我考试出问题...为了这句话我也要好好学习Java呀!!!!下次作业希望少骚扰学委吧就...

原文地址:https://www.cnblogs.com/Duya9ian/p/11523859.html