Java开发环境及语言基础,辽宁工程技术大学上机实验报告

辽宁工程技术大学上机实验报告

实验内容:

(1)在控制台中输入java命令,查看输入结果。

程序如下:

public class HelloWorld {

       public static void main(String[] args) {

              System.out.println("我能学好Java语言!");

              System.out.println("hello world.");

       }

}

结果如下:

(2)编写一个java程序,计算半径为3.0的圆周长和面积并输出结果。

程序如下:

public class Circle {

       public static double Circum(double R)

{

       return 2*R*Math.PI;

       }

       public static double Area(double R)

{

       return R*R*Math.PI;

       }

       public static void main(String[] args) {

              double R=3.0,c,s;

              c=Circum(R);

              s=Area(R);

              System.out.print("半径为3的圆周长为:C=");

              System.out.println(c);

              System.out.print("半径为3的圆面积为:S=");

              System.out.println(s);          

       }

}

结果如下:

(3)求a+aa+aaa+...+a...a(n个)的和,其中a为1~9之间的整数。例如,当a=3、n=4时,求3+33+333+3333的和。

程序如下:

?import java.util.Scanner;

publicclass SumAAA1 {

    publicstaticvoid main(String[] args) {

        int a,n,sum=0,t=0;

        Scanner sc = new Scanner(System.in);

        System.out.print("请依次输入a,n的值:");

        a=sc.nextInt();

        n=sc.nextInt();

        while(n>=1)

        {   t=a+t*10;

            sum=sum+t;

            n=n-1;

        }

        System.out.print("a+aa+aaa+...+a...a(n个)的和为:sum=");

        System.out.println(sum);

    }

}

结果如下:

程序如下:

?import java.util.Scanner;

publicclass SumAAA2 {

    publicstaticvoid main(String[] args) {

        int n=0,sum=0,t=0;

        Scanner sc = new Scanner(System.in);

        System.out.print("请输入a的值:");

        int a=sc.nextInt();

        while(sum<=1E6)

        {   t=a+t*10;

            sum=sum+t;

            n=n+1;

        }

        System.out.print("n的值为:n= ");

        System.out.println(n);

        System.out.print("a+aa+aaa+...+a...a(n个)的和为:sum=");

        System.out.println(sum);

    }

}

结果如下:

(4)给定一个正整数m,统计其位数,分别打印每一位数字,再按照逆序打印出各位数字。

程序如下:

import java.util.Scanner;

publicclass Statistic {

    publicstaticvoid main(String[] args) {

        int m,n=0,i;int a[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

        Scanner sc = new Scanner(System.in);

        System.out.print("请输入正整数m:");

        m=sc.nextInt();

        if(m>99999||m<=0){System.out.print("输入错误!请从新输入。");}

        else {

        while(m>0)

        {   a[n]=m%10;

            m=m/10;

            n++;

        }

        System.out.print("则m的每一位的数字为:");

        for(i=n-1;i>=0;i--)

        System.out.print(a[i]+" ");System.out.println();

        System.out.print("逆序的每一位的数字为:");

        for(i=0;i<n;i++)

        System.out.print(a[i]+" ");System.out.println();       

    }}

}

结果如下:

?        ?

(5)用Scanner类方法输入三角形三边求三角形面积。

程序如下:

import java.util.Scanner;

publicclass Triangle {

    publicstaticvoid main(String[] args) {

    int a,b,c;double d=0.0,sum=0.0;

    Scanner sc = new Scanner(System.in);

    System.out.print("请依次输入三角形的三边a,b,c的值:");

    a=sc.nextInt();

    b=sc.nextInt();

    c=sc.nextInt();

    d=0.5*(a+b+c);

    sum=Math.sqrt(d*(d-a)*(d-b)*(d-c));

    System.out.println("三角形的面积为:"+sum);

    }

}

结果如下:

 

第二篇:Java语言基础实验报告

浙江大学城市学院实验报告

课程名称            面向对象程序设计     

实验项目名称             Java语言基础实验                         

学生姓名       专业班级      学号     

一. 实验目的和要求

1. 掌握Java语言的基本数据类型、字符串、数组

2. 掌握Java语言的运算符、表达式、语句

3.能够编写Java应用程序

二. 实验内容

1. 局部变量与final变量实验

2. 基本数据类型与转换实验

3. 算术运算的精度问题实验

4. 移位运算实验

5. 运算赋值实验

6. 短路逻辑运算实验

7. 编程实验:输出Unicode特定区间的字符。

8. 编程实验:分析输入的数字

三. 实验结果与分析(可将程序运行结果截屏,也可分析运行结果)

1. 局部变量与final变量实验。编写以下程序,并回答问题。

public class LocalVariableInitExample {

       public static void main(String[] args) {

              int a ; 

              System.out.print(a);

        final int b = 100;

        b++;

              System.out.print(b);

       }

}

(1)程序的错误

1、System.out.print(a);出错,局部变量a没有进行过初始化或赋值

2、b++;出错,不能对终态局部变量 b 赋值。它必须为空白,并且不使用复合赋值

(2)改正方式

public class LocalVariableInitExample {

              public static void main(String[] args) {

                     int a=10 ; 

                     System.out.print(a);

               final int b = 100;

                     System.out.print(b);

              }

}

2. 基本数据类型与转换实验。编写以下程序,分析代码的输出结果,并回答问题。

       class Test2{

          public static void main(String[] args){

            System.out.println("第1段测试代码输出");   

               System.out.println((byte)255);

               System.out.println((short)65535);

               System.out.println((byte)-129);

               System.out.println((byte)129);

               System.out.println((byte)128);

      

            System.out.println("第2段测试代码输出");   

               int i = 123456789;

               float f = i;

               System.out.println(f);

               long j = 123456789123456789L;

               double d = j;

               System.out.println(d);

      

            System.out.println("第3段测试代码输出");   

               System.out.println(077);

               System.out.println(0x77);

               System.out.println(77);

      

          }

       }  

请分析并回答以下问题:

(1)    分析第1段代码,说明在什么情况下,int类型的数字转换为byte或者short类型,会出现符号变化,即正数变负数,负数变正数?为何输出会不同?

答:在强制类型转换时,如果数值超过目标类型的取值范围,那么某些数据位会被强行截断(即数据截断),从而导致数据丢失,甚至符号丢失。

例如:byte的取值范围是-27~27-1,int类型的255不在这个范围内,强制转换的结果是-1。

(2)    分析第2段代码,说明整数类型向浮点型转型是否可能出现精度损失,是否需要强制转换。

答:整数类型向浮点型转型可能会出现精度损失,不需要强制转换,可以自动类型转换。

(3)    分析第3段代码,说明整数的八进制、十六机制、十进制的书写格式(即字面值格式)都是什么?

答:八进制:首字母为0 ,包括0到7之间的字符所组成的字符序列;

十六进制:以0x(或者0X)开始,包括0到9、以及A到F十六个符号组成的字符序列;

十进制:由0到9十个字符组成的字符序列,一般首字符不可为0。

3. 算术运算的精度问题实验。编写以下程序,并回答问题。

       class Test3{

          public static void main(String[] args){

             short a = 10;

              a = a + 2;

              byte b = 1;

              b = b + 1;

              short a = 10;

              byte b = 5;

              a = a + b;

              char c = 'a';

              c = c+1;

          }

       }  

(1)程序的错误

1、类型不匹配:不能从 int 转换为 short ,不能从 int 转换为 byte ,不能从 int 转换为 char

2、局部变量 a 、b重复    

(2)改正方式

      class Test3 {

       public static void main(String[] args){

             short a = 10;

              a = (short)(a + 2);

              byte b = 1;

              b = (byte)(b + 1);

              short d = 10;

              byte e = 5;

              d = (short)(d + e);

              char c = 'a';

              c = (char)(c+1);

          }

}

4. 移位运算实验。编写以下程序,分析代码的输出结果,并回答问题。

class Test4{

   public static void main(String[] args){

     System.out.println("第1段测试代码输出");

     System.out.println(1>>32);

     System.out.println(1L>>32);

        

     System.out.println("第2段测试代码输出");

     System.out.println(10>>5);

     System.out.println(-10>>5);

     System.out.println("第3段测试代码输出");   

        System.out.println(1<<31);

     System.out.println(1L<<31);

     System.out.println(1L<<63);

     System.out.println("第4段测试代码输出");

        System.out.println(1<<100);

     System.out.println(1L<<100);

        

     System.out.println("第5段测试代码输出");

        System.out.println(7<<2);

        System.out.println(7<<1<<1);

     System.out.println("第6段测试代码输出");

        int n = 34;     int q=7;

        System.out.println(q<<n);

     q= 7;

        for(int i = 0;i<n;i++)

           q = q<<1;

        System.out.println(q);

     System.out.println("第7段测试代码输出");   

        int m = 2000000000;

        System.out.println(m<<1);

       System.out.println(m*2);

     System.out.println("第8段测试代码输出");   

        System.out.println(-2>>1);

        System.out.println(-2>>>1);

        }

}

请分析并回答以下问题:

(1)    分析第1段代码,为何输出会不同?

答:int类型为32为,所以右移32位还是其本身,long类型为64为,所以右移32位,低位被舍弃,高位补0,最终结果为0。

(1)    分析第2段代码,正整数右移的最小值是什么?负整数右移的最大值是什么?

答:正整数右移的最小值是0,负整数右移的最大值是-1。

(2)    分析第3段代码,三个语句输出为何不同?

答:int 类型右移31位,符号位就是1。符号位1代表为负数,long 类型右移31位,只能说明扩大了2的31次方, long 类型右移63位,符号位就是1,符号位1代表为负数

(3)    分析第4段代码,两个语句输出为何不同?

答:int 类型左移100位,和右移4位一样,100除以32的余数。 long 类型左移 100位,和右移36位一样,100除以64的余数。

(4)    分析第5段代码,两个移位运算是否等价?

    答:等价。

(5)    分析第6段代码, q<<n与将q不断左移1位(共移动n位)是否相同?什么条件下相同?

    答:不相同,在n=2的情况下相同。

(6)    分析第7段代码,左移1位与乘2是否等价?左移1位是否一定值翻倍?

答:等价。如果不是移到最高位,符号位上,则不一定翻倍。

(7)    分析第8段代码,“-1>>1”和“-1>>>1”有何差别?

    答:“-1>>1”结果是-1,“-1>>>1”结果是2147483647。

5. 运算赋值实验。编写以下程序,并回答问题。

class Test5{

       public static void main(String[] args) {

              byte a = 10;

              a = a >> 1; // 是否出错?

              a >>= 1; // 是否出错?

              char c = 'a';

              c = c + 1;// 是否出错?

              c += 1; // 是否出错?

       }

(1)程序的错误

类型不匹配:不能从 int 转换为 byte      ,不能从 int 转换为 char。

(2)改正方式

publicclass Test5 {

    publicstaticvoid main(String[] args) {

       byte a = 10;

       a =(byte)( a >> 1); // 是否出错?

       a >>= 1; // 是否出错?

       char c = 'a';

       c =(char)( c + 1);// 是否出错?

       c += 1; // 是否出错?

    }

}

(3)运算赋值的特点。

   运算赋值时无需强制转换。

6. 短路逻辑运算实验。编写以下程序,并回答问题。

       class test6{

              public static void main(String[] args) {

                     int x = 1, z = 2;

                  System.out.println("第1段测试代码输出");                        

                     if(false&&(x == (z = 1)))

                            System.out.println(x);

                     else

                            System.out.println(z);

                     z = 2; x =1;

                  System.out.println("第2段测试代码输出");                        

                     if(true&&(x == (z = 1))&&false)

                            System.out.println(x);

                     else

                            System.out.println(z);

                     x=0; z = 2; 

                  System.out.println("第3段测试代码输出");                        

                     if(true||(x == (z = 1))) 

                            System.out.println(z);

                     x=0; z = 2;

                  System.out.println("第4段测试代码输出");                        

                     if(false||(x == (z =1))||true)

                            System.out.println(z);

              }

       }

请分析并回答以下问题:

(1)    第1段代码的输出结果是什么,为何?

    答:结果是2。没有计算(x == (z = 1)),z仍等于2,输出z的值,即输出2。

(2)    第2段代码的输出结果是什么,为何?

    答:结果是1。计算了(x == (z = 1)),z被赋值为1,输出z的值,即输出1。

(3)    第3段代码的输出结果是什么,为何?

答:结果是2。没有计算(x == (z = 1)),z仍等于2,输出z的值,即输出2。

(4)    第4段代码的输出结果是什么,为何?

答:结果是1。计算了(x == (z = 1)),z被赋值为1,输出z的值,即输出2。

7. 编程实验:输出Unicode特定区间的字符。功能要求:屏幕输出所有大写英文字母、小写字母)、某两个汉字字符之间的所有Unicode字符。

程序:

publicclass test7 {

    publicstaticvoid main(String[] args) {

       char i;

       for(i='a';i<='z';i++)

           System.out.println(i);

       for(i='A';i<='Z';i++)

           System.out.println(i);

       for(i='啊';i<='阿';i++)

           System.out.println(i);

    }

}

程序运行截图是:

8. 编程实验:分析输入的数字。功能要求:输入若干个数字,依次判断这些数字是否是奇数、平方数、素数,并输出判断信息。设计要求:需要设计静态方法isOdd(int n)来判断参数n是否是奇数;相似地,还需要设计静态方法isSquareNumber(int n)和isPrime(int n),来分别用于判断参数n是否是平方数、素数。

程序:

import java.util.*;

publicclass test8 {

    publicstaticvoid main(String[] args) {

       Scanner scanner=new Scanner(System.in);

       System.out.println("请输入若干数字(以英文字符结束):");

           while(scanner.hasNextInt()){

              int n=scanner.nextInt();

              if(isOdd(n))

                  System.out.println(n+"为奇数");

              else

                  System.out.println(n+"不是奇数");

              if(isSquareNumber(n))

                  System.out.println(n+"为平方数");

              else

                  System.out.println(n+"不是平方数");

              if(isPrime(n))

                  System.out.println(n+"为素数");

              else

                  System.out.println(n+"不是素数");

       }

    }

    staticboolean isOdd(int n){

       if(n%2==0)

           returnfalse;

       else

           returntrue;

    }

    staticboolean isSquareNumber(int n){

       int j;

       for(j=1;j<n/2;j++){

           if(j*j==n)

              returntrue;

       }

       returnfalse;

    }

    staticboolean isPrime(int n){

       int j;

       for(j=2;j<n/2;j++){

           if(n%j==0)

              returnfalse;

       }

       returntrue;

    }

}

程序运行截图是:

四. 讨论、心得(可写遇到的问题及解决方法,或者对技术的理解等)

本次实验我了解到java与c++有许多相同之处,如if else的用法,但也有很多的不同之处,如输入与输出的方法,还有不同类型的运算等。

相关推荐