Java实验:第一次编写的Java程序

目录

Java实验:第一次编写的Java程序

选修课老师讲的过于专业,没有完全消化,只有硬着头皮作下去了。

一周的时间,就编好了两道题目,已经筋疲力尽了。

第一题:

编程解决以下问题:
谁做的好事?有四位同学中的一位做了好事,不留名,表扬信来了之后,班长问这四位是谁做的好事。张三说:不是我,李四说:是王五,王五说:是卫六,卫六说:他胡说。已知三个人说的是真话,一个人说的是假话,现在要根据这些信息,找出做了好事的人。

package Exercise1;

/**

  • Write a description of class Student here.

  • Exercise 3 from lab01.txt

  • @author Windroc

  • @version 0.1 @2007.10.16
    */
    public class Student
    {
    // instance variables - replace the example below with your own
    private int x;

    /**
    * Constructor for objects of class Student
    */
    public Student()
    {
    // initialise instance variables
    x = 0;
    }

    /**
    * An example of a method - replace this comment with your own
    *
    * @param y a sample parameter for a method
    * @return the sum of x and y
    */
    public int sampleMethod(int y)
    {
    // put your code here
    return x + y;
    }

    public static void main(String[] args){
    int a[][]=new int [4][4]; //条件数组
    int i,j; //循环控制变量
    int right;
    int num=-1;
    Student d=new Student();

       //初始化数组  
       for(i=0;i<=3;i++){  
           for(j=0;j<=3;j++){  
               a[i][j]=-1;  
           }  
       }  
    
       //设置条件  
       a[0][0]=0;  
       a[2][1]=1;  
       a[3][2]=1;  
       a[3][3]=0;  
    
       //进行判断  
       right=d.Judge(a,0,0,1);  
       if(right==1) num=0;  
       right=d.Judge(a,2,1,0);  
       if(right==1) num=1;  
       right=d.Judge(a,3,2,0);  
       if(right==1) num=2;  
       right=d.Judge(a,3,3,1);  
       if(right==1) num=3;  
    
       switch(num){  
           case 0:{  
               System.out.println("张三说谎了");  
               d.FindPeople(a,0,0,1);  
               break;  
           }  
           case 1:{  
               System.out.println("李四说谎了");  
               d.FindPeople(a,2,1,0);  
               break;  
           }  
           case 2:{  
               System.out.println("王五说谎了");  
               d.FindPeople(a,3,2,0);  
               break;  
           }  
           case 3:{  
               System.out.println("卫六说谎了");  
               d.FindPeople(a,3,3,1);  
               break;  
           }  
           case -1:{  
               System.out.println("无法判断");  
           }  
       }  
       System.out.println("Program Done");  
    

    }

    public int Judge(int[][] stu,int m,int n,int k){
    int i,j;//循环控制变量
    int old;//存储旧值
    int flag=1; //是否矛盾
    int numone=0; //1的个数
    int row=-1; //1行的状态

       old=stu[m][n];  
       stu[m][n]=k;  
    
       for(i=0;i<=3;i++){  
           row=-1;  
           for(j=0;j<=3;j++){  
               switch(stu[i][j]){  
                   case 1:  
                       numone++;  
                       if(numone>1) flag=0;  
                       if(row==0) flag=0;  
                       else row=1;  
                       break;  
                   case 0:  
                       if(row==1) flag=0;  
                       else row=0;  
                       break;  
                   }  
               }  
           }  
           stu[m][n]=old;  
    
           return flag;          
    

    }

    public void FindPeople(int[][] stu,int m,int n,int k){
    int i=0,j=0;
    int right=-1;
    int old;
    old=stu[m][n];
    stu[m][n]=k;
    while((right==-1)&&(i<=3)){
    for(j=0;j<=3;j++){
    if(stu[i][j]==1) right=i;
    }
    i++;
    }
    stu[m][n]=old;

       switch(right){  
           case 0:  
               System.out.println("张三做了好事");  
               break;  
           case 1:  
               System.out.println("李四做了好事");  
               break;  
           case 2:  
               System.out.println("王五做了好事");  
               break;  
           case 3:  
               System.out.println("卫六做了好事");  
               break;   
           }  
       }  
    

}

第二题:

编程验证:
任意一个>1的自然数,对其进行一系列变换,变换法则如下:若这个自然数N不是素数,则把它分解成素因子的连乘积,然后将这些因子相加,并在其和数上再加1,记其结果为N1;如果N已经是素数,则把它加1作为N1。得到N1之后,再依此类推,得到N2,…。
结论:
A. 对于<=6的自然数,最后收敛必为6;
B. 对于>=7的自然数,最后收敛必为7和8的交替。

package Exercise2;
import java.math.*;

/**

  • Write a description of class Number here.
  • Exercise 5 grom lab01.txt
  • @author Maraf
  • @version V0.1@2007.10.18
  •      [V0.2@2007.10.19](mailto:V0.2@2007.10.19)  
    

*/
public class Number
{
// instance variables - replace the example below with your own
private int x;

 /**  
  * Constructor for objects of class Number  
  */  
 public Number()  
 {  
     // initialise instance variables  
     x = 0;  
 }

 /**  
  * An example of a method - replace this comment with your own  
  *   
  * @param   y    a sample parameter for a method  
  * @return      the sum of x and y   
  */  
 public int sampleMethod(int y)  
 {  
     // put your code here  
     return x + y;  
 }  
  
  //判断是否是质数,质数返回0,和数返回1,0返回-1  
 public int IsPrime(int a){  
     int i;  
     int ans=0;  
     if(a==0) ans=-1;  
     for(i=2;i<=Math.sqrt(a);i++){  
         if(a%i==0){  
             ans=1;  
             break;  
         }  
     }  
     return ans;  
 }  
  
 //分解质因数  
 public int Factor(int a){  
     int sum=0;  
     int n=a;  
     int i;  
     Number tnum=new Number();  
      
     for(i=2;i<=n;i++){  
         while(n%i==0){  
             sum=sum+i;  
             n=n/i;  
             }  
     }  
     return sum;  
 }  
  
 //主程序  
 public static void main(String[] args){  
     final int N=20;  
     final int TIME=15;  
     int a[]=new int [N];  
     int i,j,n,t;  
     Number num=new Number();  
      
     System.out.println("Program Strated");  
      
     //初始化自然数组  
     for(j=0;j<N;j++){  
         a[j]=j+2;  
     }  
     
     //进行变换  
     for(j=0;j<N;j++){  
         System.out.println("数字 "+a[j]+" ");  
         for(i=1,n=a[j];i<=TIME;i++){  
             if(num.IsPrime(n)==0){  
                 n=n+1;  
             }  
             else if(num.IsPrime(n)==1){  
                 t=num.Factor(n);  
                 n=t+1;  
             }  
             System.out.print(" "+n+" ");  
             //if(i%20==0) System.out.println("");  
         }  
         System.out.println("");  
     }  
     System.out.println("Program Done");  
 }  

}