【Java程序设计】Java上机实验(二)

实验二、数组
 
 
一、实验目的:
1、学会使用一维与二维数组管理简单数据。
2、学会编写简单的菜单驱动(命令行式)的Java程序
二、实验环境:
BLUEJ
三、实验内容:
(写出主要的内容)
1.定义一个int型的一维数组,数组的长度由键盘输入,为数组中的元素随机赋值。依次完成如下功能:
(1) 输出数组中的元素。每行输出最多十个数字,数字之间用Tab键分隔;
(2) 计算数组中元素之和,并输出;
(3) 求出数组中元素的最大值及其位置(若有多个相同的最大值,仅输出第一个),并输出。
代码:

import java.util.Scanner;
import java.util.Random;
public class Experiment
{
   static void Print(int array[])
   {
       int i;
       for(i=0;i<array.length;i++)
       {
           System.out.print(String.format("%3d",array[i])+"    ");
           if((i+1)%10==0)
               System.out.println();
       }
       System.out.println();
   }
   static int Sum(int array[])
   {
       int sum=0;
       for(int i=0;i<array.length;i++)
           sum=sum+array[i];
       return sum;
    }
   static void FindMax(int array[])
   {
       int max=array[0],max_situation=0;
       for(int i=1;i<array.length;i++)
       {
           if(max<array[i])
           {
               max=array[i];
               max_situation=i;
            }
        }
       System.out.println("数组中元素的最大值为:"+max+",所处位置为array["+max_situation+"]。");
   }
   public static void main(String[] args)
   {
       int n,i;
       System.out.print("请输入数组长度:");
       Scanner scanner=new Scanner(System.in);
n=scanner.nextInt();
int array[]=new int[n];
       Random rand=new Random();
       for(i=0;i<n;i++)
       {
           array[i]=rand.nextInt(100);
       }
       Print(array,n);
       System.out.println("数组中元素之和为:"+Sum(array));
       FindMax(array);
   }
}

2.定义一个二维整形数组data[5][6],数组中的元素在区间[0, 100)上随机赋值。找出数组中所有的具有这类性质的元素及其位置:该元素在所在行是最大的,但在其所在列是最小的。如果没有这样的元素,则输出“没有这样的元素”。

代码:

import java.util.Scanner;
import java.util.Random;
public class Experiment
{
      public static void main(String[] args)
   {
       int array[][]= new int[5][6];
        int i,j;
        Random r=new Random();//拟随机数
        for(i=0;i<5;i++)
        {
            for(j=0;j<6;j++)
            {
                array[i][j]=r.nextInt(100);
            }
         }
        for(i=0;i<5;i++)//输出这个数组
        {
        	for(j=0;j<6;j++)
        	{
        		System.out.print(String.format("%2d",array[i][j])+"  ");
        		if(j==5) 
        			System.out.println();
        	}
        }
        judge(array);//调用判断函数
	}
	public static void judge(int array[][])
	{
		int i=0,j=0,flagi=0,flagj=0;
        boolean tryi,tryj,result=false;
        for(i=0;i<5;i++)//遍历每一行
        {
            for(j=0;j<6;j++)//遍历每一行上的每一个元素
            {
                tryi=true;tryj=true;
                for(flagi=0;flagi<5;flagi++)
                {
                    if(array[flagi][j]<array[i][j])//如果本列存在元素比这个数字小,判断条件置false
                    {
                        tryi=false;
                        break;
                    }
                }
                for(flagj=0;flagj<6;flagj++)
                {
                    if(array[i][flagj]>array[i][j])//如果本行存在元素比这个数字大,判断条件置false
                    {
                        tryj=false;
                        break;
                    }
                }
                if(tryi&&tryj)//如果都为true,则存在
                {
                    System.out.println("存在一个这样的元素:"+array[i][j]+",位于["+i+"]["+j+"]。");
                    result=true;
                }
            }
        }
        if(!result)
        {
            System.out.println("没有这样的元素。");
        }
   }
}
  1. Write a menu-driven program that provides three options (编写一个菜单驱动程序,提供如下三个选项):
    a) the first option allows the user to enter a temperature in Celsius and displays the corresponding Fahrenheit temperature (第一个选项允许用户输入一个摄氏温度,并输出其相应的华氏温度);
    b) the second option allows the user to enter a temperature in Fahrenheit and displays the corresponding Celsius temperature (第二个选项允许用户输入一个华氏温度,并输出其相应的摄氏温度);
    c) the third option allows the user to quit (第三个选项允许用户关闭程序).
    The formulate that you need are as follows, where C represents a Celsius temperature and F a Fahrenheit temperature: (以下是你需要的公式,其中C代表摄氏温度,F代表华氏温度)
    F = 9C/5 + 32
    C = 5(F – 32)/9
    代码:
import java.util.Scanner;
import java.util.Random;
public class Experiment
{
      public static void main(String[] args)
    {
        Scanner scanner=new Scanner(System.in);
        int choice=1;
        while(choice!=3)
        {
            System.out.print("Please input your choice:\n1.C TO F\n2.F TO C\n3.EXIT THIS PROGRESS\n");
            choice=scanner.nextInt();
            if(choice==1)
            {
                double C,F;
                System.out.print("请输入一个摄氏温度 C=");
                C=scanner.nextDouble();
                F=9*C/5+32;
                System.out.println(C+"°C="+F+"°F");
                System.out.println();
            }
            else if(choice==2)
            {
                double C,F;
                System.out.print("请输入一个华氏温度F=");
                F=scanner.nextDouble();
                C=5*(F-32)/9;
                System.out.println(F+"°F="+C+"°C");
                System.out.println();
            }
        }
        System.exit(0);
    }
}

4.Adapt the above program so that the user is not allowed to enter a temperature below absolute zero: this is -273.15C, or -459.67F. (修改以上程序,不允许用户输入的温度低于绝对零度,即-273.15C或-459.67F)
代码:

import java.util.Scanner;
import java.util.Random;
public class Experiment
{
      public static void main(String[] args)
    {
        Scanner scanner=new Scanner(System.in);
        int choice=1;
        while(choice!=3)
        {
            System.out.print("Please input your choice:\n1.C TO F\n2.F TO C\n3.EXIT THIS PROGRESS\n");
            choice=scanner.nextInt();
            if(choice==1)
            {
                double C,F;
                System.out.print("请输入一个摄氏温度 C=");
                C=scanner.nextDouble();
                if(C<(-273.15))
                    continue;
                F=9*C/5+32;
                System.out.println(C+"°C="+F+"°F");
                System.out.println();
            }
            else if(choice==2)
            {
                double C,F;
                System.out.print("请输入一个华氏温度F=");
                F=scanner.nextDouble();
                if(F<(-459.67))
                    continue;
                C=5*(F-32)/9;
                System.out.println(F+"°F="+C+"°C");
                System.out.println();
            }
        }
        System.exit(0);
    }
}

5、(选做)超级递增序列指的是一个整数序列,这个序列中的每一个整数都要比它前面所有整数的和大。编写一个程序,读入一组整数,然后判断这组整数是否为超级递增序列。
输入格式为:数组长度n 数1 数2 数3 … 数n
输出格式为:“数1 数2 数3 … 数n”是(或不是)超级递增序列。
示例:当输入为5 1 2 4 9 20时,输出应为“1 2 4 9 20”是超级递增序列;当输入为6 1 4 9 14 25 65时,输出应为“1 4 9 14 25 65”不是超级递增序列。
代码:

import java.util.Scanner;
import java.util.Random;
public class Experiment
{
      public static void main(String[] args)
    {
        int n=1,i,j,temp;
        System.out.println("");
        Scanner scanner=new Scanner(System.in);
        while(n!=0)
        {
            n=scanner.nextInt();
            int array[]=new int[n];
            for(i=0;i<n;i++)
                array[i]=scanner.nextInt();
            for(i=0;i<n-1;i++)
                for(j=0;j<n-i-1;j++)
                    if(array[j]>array[j+1])
                    {
                        temp=array[j];
                        array[j]=array[j+1];
                        array[j+1]=temp;
                    }
            int sum=array[0];
            boolean flag=true;
            for(i=1;i<n;i++)
            {
                if(array[i]>=sum)
                {
                    sum=sum+array[i];
                    continue;
                }
                else
                {
                    flag=false;
                    break;
                }       
            }
            for(i=0;i<n;i++)
                System.out.print(array[i]+" ");
            if(flag)
                 System.out.println("是超级递增序列");
            else
                System.out.println("不是超级递增序列");
            }
    }
}
  1. (选做)编写一个程序,从键盘读入一个句子(句子中可能包含空格、大小写字母、数字、标点符号等),试统计该句子中字符(不区分大小写)、数字、空格及其它字符的个数。
    代码:
import java.util.Scanner;
public class Experiment
{
      public static void main(String[] args)
{
Scanner scanner=new Scanner(System.in);
		System.out.print("请输入要统计的句子:");
		String str=scanner.nextLine();
		char charray[]=str.toCharArray();
		count(charray);
		scanner.close();
		
	}
	public static void count(char str[])
	{
		int lowercase=0,uppercase=0,number=0,blank=0,punctuation=0,other=0;
		for(int i=0;i<str.length;i++)
		{
			if(str[i]>='a'&&str[i]<='z')
				lowercase++;
			else if(str[i]>='A'&&str[i]<='Z')
				uppercase++;
			else if(str[i]>='0'&&str[i]<='9')
				number++;
			else if(str[i]==' ')
				blank++;
			else if(str[i]==','||str[i]=='.'||str[i]=='?'||str[i]=='!')
				punctuation++;
			else 
				other++;
		}	
		System.out.println("该句子中包含:");
		System.out.println("小写字母:"+lowercase+"个");
		System.out.println("大写字母:"+uppercase+"个");
		System.out.println("数字:"+number+"个");
		System.out.println("空格:"+blank+"个");
		System.out.println("标点符号:"+punctuation+"个");
		System.out.println("其他:"+other+"个");
	}
}

四、心得体会:
通过本次实验,我掌握了数组的使用,也进一步理解了数组的定义,JAVA与C语言不同的是,JAVA可以指定数组的大小。C、C++不能通过输入n后再定义数组:int n;cin>>n;int array[n]。这样子就是错误的,但是JAVA可以:int n;Scanner scanner=new Scanner(System.in);n=scanner.nextInt();int array[]=new int[n];。所以其实JAVA相较于C语言来说更为简便一些,这样不再需要固定数组的长度或大小,可以通过输入随意调节数组的大小。我进一步理解了数组。

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值