java经典程序编程知识(三)

Java中int、String的类型转换
int->String
  1. 加上""
  2. Integer.toString()
String->int
  1. Integer.parseInt();

String[] str=scanner.nextLine().split(" ");//是字符串数组而不是字符数组
总结:
length——数组的属性;
length()——String的方法;
size()——集合的方法;
nums2=nums1;//数组之间赋值,只是改变了引用而已
\s代表一个空白字符 正则表达是中的\s应该是匹配一个空白字符

Scanner.useDelimiter( )

由于Scanner对象将首先跳过输入流开头的所有空白分隔符,然后对输入流中的信息进行检查,直到遇到空白分隔符为止;因此输入数据:this is a test;空白后面的字符:is a test不会显示输出来。那如何将含有空格的数据输出呢?
这时就需要用Scanner.useDelimiter( )方法,可以将分隔符号修改为"回车",或者其他字符。
有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数,循环可以用%运算

打印出杨辉三角形(要求打印出10行如下图)
      1
     1 1  
    1 2 1
    ......
public class Programme {
    public static void main(String[] args) {
        int[][] nums=new int[10][10];
        //数组第一列全为1
        for(int i=0;i<10;i++){
            nums[i][0]=1;
        }
        //将杨辉三角形的数全部算出来
        for(int i=1;i<10;i++){
            for(int j=1;j<i+1;j++){
                nums[i][j]=nums[i-1][j]+nums[i-1][j-1];
            }
        }
        //分情况打印输出
        for(int i=0;i<10;i++){
            for(int j=0;j<10-i-1;j++){
                System.out.print("  ");
            }
            for(int j=0;j<10;j++){
                if(nums[i][j]==0){
                    break;
                }
                System.out.print(nums[i][j]+"  ");
            }
            System.out.println();
        }
    }
}

【程序37】
题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

public class Programme {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入人数:");
        int n=scanner.nextInt();
        boolean bool[]=new boolean[n];
        //count控制圈内人数,index控制圈的循环,c控制报数的次数
        int count=n,index=0,c=0;
        while(count>1){
            for(int i=index;i<n;i++){
                if(bool[i]==false){
                    c++;
                }
                if(c==3){//报数满三次,c重置为0
                    bool[i]=true;
                    count--;//表示人少了一个
                    c=0;
                }
            }
            index=0;//报满一圈置为0
        }
        for(int i=0;i<n;i++){
            if(!bool[i]){
                System.out.println("最后留下的是原来的第"+(i+1)+"位");
            }
        }
        scanner.close();
    }
}

高精度除以低精度=高精度

string1.compareTo(string2);

如果返回1,String1>String2
如果返回-1,String1<String2
如果返回0,String1=String2

持续输入

while (input%2!=0) {
System.out.println("你输入的不是偶数,请重新输入:");
input=scanner.nextInt();
}

文本文件换行符
  1. windows下的文本文件换行符:\r\n
  2. linux/unix下的文本文件换行符:\r
  3. Mac下的文本文件换行符:\n
输入输出流
InputStream、OutputStream

处理字节流的抽象类
InputStream 是字节输入流的所有类的超类,一般我们使用它的子类,如FileInputStream等.
OutputStream是字节输出流的所有类的超类,一般我们使用它的子类,如FileOutputStream等.

InputStreamReader、OutputStreamWriter

处理字符流的抽象类
InputStreamReader 是字节流通向字符流的桥梁,它将字节流转换为字符流.
OutputStreamWriter是字符流通向字节流的桥梁,它将字符流转换为字节流.

BufferedReader BufferedWriter

BufferedReader 由Reader类扩展而来,提供通用的缓冲方式文本读取,readLine()读取一个文本行,
从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。
BufferedWriter 由Writer 类扩展而来,提供通用的缓冲方式文本写入, newLine()使用平台自己的行分隔符(回车换行),
将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
【程序50】
题目:有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,将原有的数据和计算出的平均分数存放在磁盘文件"stud"中。最后这题涉及文件存储,输入输出流

public class Programme {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入学生信息:");
        //学生信息的格式:学号 姓名 成绩1,成绩2,成绩3
        String[][] str=new String[5][3];
        for(int i=0;i<5;i++){
            String s=scanner.nextLine();
            str[i]=s.split(" ");
        }
        int score[][]=new int[5][3];
        for(int i=0;i<5;i++){
            int j=0;
            for(String s:str[i][2].split(",")){
                score[i][j++]=Integer.parseInt(s);
            }
        }
        try {
            FileWriter writer=new FileWriter("stud2.txt");
            BufferedWriter buffer=new BufferedWriter(writer);
            for(int i=0;i<5;i++){
                String str2=str[i][0]+" "+str[i][1]+" "+str[i][2]+" "+Avg(score[i])+"\r\n";//"\r\n"代表文本文件换行
                //下面两句也可以写成writer.write(str2);
                buffer.write(str2);
                buffer.flush();
            }
            writer.close();
        } catch (IOException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }
        System.out.println("保存成功!");
        scanner.close();
    }
    private static double Avg(int[] score){    
            double sum=0;
            for(int i:score){
                sum+=(double)i;
            }
            return sum/3;
    }
}

参考:https://www.cnblogs.com/bluestorm/p/3698810.html
https://blog.csdn.net/lykangjia/article/details/70159619





posted @ 2018-12-23 23:55  liaoxuefan  阅读(107)  评论(0编辑  收藏  举报