作业2

作业要求:

  1. 第一版本程序Prog1: + 给定一个数组,实现数组元素求和;,具体要求:实现对一维数组(a[100])的所有元素相加运算。 + 数据准备:a)数组长度:100;b)数组数据来源:实验数据A列:1~100,CSV 格式则填充 前100个数据.

  2. 第二版本程序Prog2: + 改写成一个函数(函数名称为ArraySum),能实现任意长度数组所有元素求和; + 数据准备:a)数组长度:任意; b)数组数据来源:实验数据A列.

  3. 第三版本程序Prog3: + 将Prog2改写成能从文件中读取数据,实现任意长度数组,指定范围内元素相加。 + 数据准备:a)数组长度:任意; b)数组数据来源:从文件中读取.

  4. 依次将Prog1、Porg2、Prog3上传到Github。

  5. 发布一篇博客,介绍上述三个程序的实现过程。遇到的问题及如何解决的。

prog1:

       第一版本的程序实际上是很简单的,因为没有要求从文件中读取,我们可以直接复制前100个元素(虽然用文件流更简单)。这题没什么好说的,太简单了。

prog2:

       第二版本的程序也不是很难,只不过这次要求任意长度的数组,所以要先从控制台输入数组的长度,这里用Scanner类实现数组长度的输入。用文件流方式把A列前100个数取出,具体实现过程是按行读取数据,然后屏蔽掉B和C列,求和,输出。

prog3:

       第三版程序我在一个地方卡了一个下午,就是文件的打开,当我把Excel文件里的数据粘贴复制进txt文件中时,然后再程序中使用时程序总是出错,而把要打开的文件换成csv格式时,就能成功。

      程序的具体过程是这样的,我先要求用户输入任意的数组长度(不大于3*65535),再输入数组要求和的范围;

      我把求和的过程分为三个部分:第一部分为范围小下标那一行,中间所有行,最后一行。各自分析,然后相加。最后打印出结果。

github账号:dxy123456

prog1:

package prog;

import java.io.*;
public class prog1 {
    public static void main(String[] args) {    
        try{System.out.println("下面是数组100个元素的和:");
          FileReader fr1=new FileReader("data.csv");
          BufferedReader bf1=new BufferedReader(fr1);
          String str1 = null;String [] strI=null;int total=0,j=0,count=0;
          while(count<100&&(str1=bf1.readLine())!=null){    //将中间的数全相加                                                                                           
                strI=str1.split(",");    
                count++;                                        
                j=Integer.parseInt(strI[0]);                           
                total+=j;                         
                }
          System.out.print("the 100 number sum is:"+total);
          fr1.close(); bf1.close();
        }catch (Exception e){
            e.printStackTrace();}
    }
}

prog2:

package prog;

import java.io.*;
import java.util.Scanner;
public class prog2 {
    public static void main(String[] args) {    
        try{System.out.println("请输入数组的长度:");
          Scanner in = new Scanner(System.in);
          int a = in.nextInt();
          in.close();
          FileReader fr1=new FileReader("data.csv");
          BufferedReader bf1=new BufferedReader(fr1);
          String str1 = null;String [] strI=null;int total=0,j=0,count=0;
          while(count<a&&(str1=bf1.readLine())!=null){    //将中间的数全相加                                                                                           
                strI=str1.split(",");    
                count++;                                        
                j=Integer.parseInt(strI[0]);                           
                total+=j;                         
                }
          System.out.print("the"+a+ "number sum is:"+total);
          fr1.close(); bf1.close();
        }catch (Exception e){
            e.printStackTrace();}
    }
}

prog3:

package prog;

import java.io.*;
import java.util.*;
/*已知数据在文件中的存储方式为每三个数为一行,共65536行*/
public class prog3{
    public static void main(String[] args) {                    
        System.out.println("输入数组长度(默认起始位置从第一个数据开始开始):"); 
        Scanner in = new Scanner(System.in);
          int a = in.nextInt();        
        System.out.println("下面将在数组的指定范围内求sum");
        System.out.println("输入范围的起始值(假设第一个数据的起始位置为0):");    
         int b=in.nextInt();
         System.out.println("输入范围的结束值:");
         int c=in.nextInt();    
         in.close();int flage=0;
         try{
             if(b<0||c>=a)
            {
            flage=1;
            System.out.println("超出范围!");throw new IOException();
            }
         if(b>c)
            {
             flage=1;
            System.out.println("左范围大于右范围!");throw new IOException();
            }
         }catch(Exception e){e.printStackTrace();}
         if(flage==0)
            D(a,b,c);          
}
    public static void D(int a,int b,int c) {
        try{
          FileReader fr1=new FileReader("data.csv");
          BufferedReader bf1=new BufferedReader(fr1);
          int count=0;
          String str1 = null;String [] strI=null;int total=0,j=0;
          while((b/3+1)>1&&(str1=bf1.readLine())!=null){//字符不等于空,找到要求数组的上一行!
              count++;
          if(b/3==count) break;
          }
          str1=bf1.readLine();  count++;               //开始累加的起始行数
          strI=str1.split(",");
          int f=b%3;
          if(c/3>b/3){                        //防止指定范围只在第一行
          for(;f<3;f++){                      //将起始行元素相加
                   j=Integer.parseInt(strI[f]);    System.out.print("前面"+j+"\n");                       
                   total+=j;
          }    
          }
          else{                                  //如果范围只有一个或两个元素且靠近左边
              for(;f<=(c%3);f++){                        
                   j=Integer.parseInt(strI[f]);    System.out.print("前面"+j+"\n");                       
                   total+=j;
              }          
          }
          if(b/3!=c/3){
          while((c/3!=count)&&(str1=bf1.readLine())!=null){    //将中间的数全相加                                                                                           
                strI=str1.split(",");count++;                                            
                 for(int i=0;i<3;i++){
                           j=Integer.parseInt(strI[i]);    System.out.print("中间"+j+"\n");                       
                           total+=j;                         
                           }                                                                  
            }    
          }
          str1=bf1.readLine();               
          strI=str1.split(",");
          int y=c%3;
          if(b/3!=c/3){
          for(int s=0;s<=y;s++){                        //将最后一行元素相加
                   j=Integer.parseInt(strI[s]);            System.out.print("最后"+j+"\n");               
                   total+=j;
          }
          }
          System.out.print("\n"+total);
          fr1.close(); bf1.close();
      }catch (Exception e){
            e.printStackTrace();}
    }
}
    

 

 

 

      

posted @ 2016-03-07 21:31  浮世孤独  阅读(148)  评论(0编辑  收藏  举报