zoukankan      html  css  js  c++  java
  • 【Java】_2_Java程序入门第二课

      前面一课说了简单的整型数据和浮点型数据,但是没有说char字符类型,今天我们来说说char字符类型。

    【Java  Char型】

      在Java中提供了字符类型,与C/C++类似,Java中字符是经过编码的;Exp: 编码值==65的字符是'A';

    在Java中,使用的是Unicode编码格式。通常情况下,我们认为Unicode是16 bit的编码规则。

      但是很多童鞋们,还是不明白这个东西,我自己也有点迷糊。下面是我摘录的部分度娘知道的回答:

         如果按照编码规则来看,这个赋值是兼容的。 输出的时候系统是根据“数值”的类型来判断的,正如上面说的,当用

    System.out.println(numchar+4);

         这里会输出的是什么呢?我们可以看一下:

    /*
    This program try to test the CHAR data type
    */
    
    public class CharTest
    {
      public static void main(String[] args)
       {
        char charTestVar=4;
                 System.out.println(charTestVar+4);
       }
    }

    输出如下所示:

    而下面的程序段:

    /*
    This program try to test the CHAR data type
    */
    
    public class CharTest
    {
      public static void main(String[] args)
       {
        char charTestVar=4;
                 System.out.println(charTestVar+4);
                 System.out.println(charTestVar);
       }
    }

    输出如下所示:

      这是为什么呢?我们知道在表达式计算过程中:会进行类型转换,通常是向数值范围方向大的转;因此第一段代码输出是8,而第二段代码输出的是8和四方形。

    【Java 控制台输入流】

      在Java类库中System.out 类在java.lang包中定义,这是一个默认包含的包。而在Java中输出数据不是这样的,在需要从控制台输入数据的时候,则需要

    引用Java提供的类库包,这个与C语言一样(C语言通过系统提供的库函数实现输入和输出)。

      在Java中用Scanner可以实现控制台数据的输入,Scanner是一个类,通过类的构造函数构造对象,然后通过类的方法(类似C++中的成员函数)来实现

    数据的读取。

      构造Scanner对象语法:   Scanner   objectIdentify=new  Scanner(System.in);

         在使用这个类的时候需要导入: java.util包,其语法如下:

     import  java.util.*;
    

      这里需要注意一点:因为import是完整的java语句,因此后面的分号不能少。

      下面我们看一段简单的代码如何实现数据的输入:

    /*
    This program test scaner 
    */
    
    import java.util.*;
    
    public class ScanerIn
    {
      public  static void main(String[] args)
       {
          Scanner GetData=new Scanner(System.in);
                  System.out.print("Please enter you name:");
                  System.out.println("You name is:"+GetData.nextLine());
       }
    }

      这段代码执行的结果如下所示:

      Scanner对象提供了很多不同的方法来输入不同的数据类型:

        1、Scanner (InputStream In)

          用给定的输入流创建一个Scanner对象

        2、String nextLine()

          读取输入的下一行内容,并保存为String对象

        3、String next()

          读取输入的下一个单词,单词以空白符分隔,空格、制表符算空白符(blank charecter)

        4、int  nextInt()

          读取输入的下一个整型数值

        5、doublet nextDouble()

          读取输入的下一个浮点数值

        6、boolean  hasNext()

          检测输入流中是否还有其他单词

        7、boolean  hasNextInt()

          检测输入流中是否还有整数

        8、boolean  hasDouble()

          检测输入流中是否还有浮点数值

    下面我来测试一下这写类的方法:

    /*
    This program test scaner 
    */
    
    import java.util.*;
    
    public class ScanerIn
    {
      public  static void main(String[] args)
       {
          Scanner GetData=new Scanner(System.in);
                  System.out.print("Please enter you name:");
                  System.out.println("You name is:"+GetData.nextLine());
    
                    System.out.print("Now we have got you name,Can we get you age:");
                  System.out.println("Your age is:"+GetData.nextInt());
    
                  System.out.print("Can you show the expect salary:");
                  System.out.println("Your expect salary is:"+GetData.nextDouble());
    
         if(GetData.hasNext())
            System.out.println("You hava finish you input data!!!");
       }
    }

      程序执行过程如下所示:

      

      这里我有一点迷惑?那就要if子句执行过程和我想象的不一样。

     【Java 控制台密码输入】

      如上面的测试一样,我们知道,在console输入中利用Scanner对象输入的时候,是明文输入的,有时候我们需要输入密码,很显然,密码不能用明文

    进行输入,否则就失去了保密的作用;考虑这一点,Java提供了另外一种输入方式来实现密码的输入。

      在Java中利用Console类实现密码的输入。其使用方法如下:

      //首先利用Console类构造一个对象

      Console   CodeInput=System.console

      String      UserName=CodeInput.readLine();

      String      PassWord=CodeInput.readPassword();

      实例代码如下所示:

        Console CodeInput=System.console();
        String UserName;
        char[] Password;
               UserName=CodeInput.readLine("Enter your name:");
               Password=CodeInput.readPassword("Enter the password:");    

      这段代码执行过程如下图所示:

      这样的话,明文就不显示,并且Java继承了Unix/Linux的特征在输入密码的时候不显示*或者其他掩码符号。

      这里有一点需要注意:如果要使用Console类,必须导入java.io.Console; 否则不能使用;同时object.readPassword()方法返回的值是数组类型,不能用String对象

    存储,否则会报错。如下所示:

    【Java 读取文件内容】

      和其他程序设计语言一样,Java也提供了读写文件的机制,与C语言不一样的是,C语言读写文件非常麻烦,而在Java中通过前面所介绍的Scanner对象就可以实现文件的读写。

    在使用前需要构造Scanner文件对象。如下所示:

      Scanner    FileIn=new Scanner(new File("test.txt"));

      这样就构造了一个文件输入输出对象,通过Scanner文件对象就可以进行文件的读写。

      为了防止文件读写“指针”无指向,在文件读写语句中,必须进行异常捕捉;否则在编译的过程中会报没有进行异常处理。 

     

      因为异常类型的处理我还没有深入了解,因此这里就不多说了,以后有机会再说。

      下面我没来看一下文件读取的代码:

    /*
    This program test scaner 
    */
    
    import java.util.*;
    import java.io.Console;
    import java.io.File;
    
    public class ScanerIn
    {
      public  static void main(String[] args)
       {
        /*
        //Scanner 对象测试
        Scanner GetData=new Scanner(System.in);
                  System.out.print("Please enter you name:");
                  System.out.println("You name is:"+GetData.nextLine());
    
                    System.out.print("Now we have got you name,Can we get you age:");
                  System.out.println("Your age is:"+GetData.nextInt());
    
                  System.out.print("Can you show the expect salary:");
                  System.out.println("Your expect salary is:"+GetData.nextDouble());
        
        //Console对象测试
        Console CodeInput=System.console();
        String UserName;
        char[] Password;
               UserName=CodeInput.readLine("Enter your name:");
               Password=CodeInput.readPassword("Enter the password:");
    
        */    
    
    
        //File对象测试
        try
        {
        Scanner FileIn=new Scanner(new File("TestText.txt"));
            while(FileIn.hasNext())
                System.out.println(FileIn.nextLine());
        }catch(Exception e)
         {
             System.out.println(e);
         }
    
    
            /*
        if(!GetData.hasNext())
               System.out.println("You hava finish you input data!!!");
        */
       }
    }

      这个代码的执行过程如下所示:

      仔细看上面的执行过程可以发现,如果没有文件我们就不能读取文件,报文件找不到的异常,要是不用try结构捕捉的话,那么我们的程序运行过程中就会崩溃。如果

    没有文件:TextText.txt,执行结果就如下所示:

      可以看到Scanner对象,不能创建文件,那么我么要如何创建文件呢?这个就等到下次再来说吧,我们再来看看文件的写入。

    【Java 写内容到文件】

      在Java中写文件和读取文件内容一样容易实现。

      为了实现“写”文件,我们需要构造一个PrintWriter对象;如下所示:

      PrintWriter  FileOut=new PrintWriter("filename.txt");

      这个对象需要引用java.io.PrinterWriter对象,为了省略很多的引用,通常我们引用:

              java.io.*;  

         即可,但是我建议在不熟悉的时候,引用什么对象,则导入不同的对象,这样可以增加对类库的认识。

      我们来看一段实例代码:

    /*
    This program test scaner 
    */
    
    import java.util.*;
    import java.io.Console;
    import java.io.File;
    import java.io.PrintWriter;
    import java.io.*;
    
    public class ScanerIn
    {
      public  static void main(String[] args)
       {
        /*
        //Scanner 对象测试
        Scanner GetData=new Scanner(System.in);
                  System.out.print("Please enter you name:");
                  System.out.println("You name is:"+GetData.nextLine());
    
                    System.out.print("Now we have got you name,Can we get you age:");
                  System.out.println("Your age is:"+GetData.nextInt());
    
                  System.out.print("Can you show the expect salary:");
                  System.out.println("Your expect salary is:"+GetData.nextDouble());
        
        //Console对象测试
        Console CodeInput=System.console();
        String UserName;
        char[] Password;
               UserName=CodeInput.readLine("Enter your name:");
               Password=CodeInput.readPassword("Enter the password:");
    
        */    
    
           
            /******************
    
        //File对象测试
        try
        {
        Scanner FileIn=new Scanner(new File("TestText.txt"));
            while(FileIn.hasNext())
                System.out.println(FileIn.nextLine());
        }catch(Exception e)
         {
             System.out.println(e);
         }
    
        **************/
    
        //写文件测试
        try
        {
        PrintWriter FileOut=new PrintWriter(new FileWriter("TestText.txt"));
            FileOut.println("Hello wellcome to my word");
            FileOut.println("This is my fisrt to write a file via java");
            FileOut.println(":)");
                    FileOut.close();
        }catch(Exception e)
         {
             System.out.println(e);
         }
    
            //测试写入文件是否成功,还测试,改写是追加还是全部重写
             try
        {
        Scanner FileIn=new Scanner(new File("TestText.txt"));
            while(FileIn.hasNext())
                System.out.println(FileIn.nextLine());
        }catch(Exception e)
         {
             System.out.println(e);
         }
    
    
            /*
        if(!GetData.hasNext())
               System.out.println("You hava finish you input data!!!");
        */
       }
    }

      上面代码的执行结果如下:

      这里可以看到程序成功执行了。要点: 我们可以看到重复的导入库是不会报错的。

      而且这样的写入文件时全部覆盖,会将原来的文件全部覆盖掉。如果不能覆盖原来的内容,则需要进行处理;我搜到了一段代码如下,可供大家参考:

    import java.io.*;
    import java.util.*;
    public class TestPrintWriter
    {
        public static void main(String[] args)throws IOException 
        {
               File file=new File("temp2.txt");
                    if(file.exists())
                    {
                       System.out.println("File temp.txt already exists.");
                       System.exit(0);
                    }
    
               PrintWriter output=new PrintWriter(new FileWriter(file));
    
                       for(int i=0;i<10;i++)
                       {
                output.print((int)(Math.random()*100)+" ");
               }
    
            output.close();
            BufferedReader input=new BufferedReader(new FileReader("temp2.txt"));
    
            int total=0;
            String line;
            while((line=input.readLine())!=null)
            {
               StringTokenizer tokens=new StringTokenizer(line);
               while(tokens.hasMoreTokens())
               total+=Integer.parseInt(tokens.nextToken());
            }
    
                    output=new PrintWriter(new FileWriter(file,true));
            output.printf("\n\n");
            output.printf("Total is %d ",total);
            output.close();
        }
    }

    今天就写到这里了,希望这次可以将这本书从头看到尾,然后根据学习进度写完整本书的总结。

  • 相关阅读:
    【FFT】BZOJ2179- FFT快速傅立叶
    【2-SAT(tarjan)】BZOJ1997-[Hnoi2010]Planar
    【平面图最小割】BZOJ1001- [BeiJing2006]狼抓兔子
    【序列莫队】BZOJ2038- [2009国家集训队]小Z的袜子(hose)
    【高斯消元解xor方程】BZOJ1923-[Sdoi2010]外星千足虫
    【高斯消元解xor方程组】BZOJ2466-[中山市选2009]树
    【高斯消元】BZOJ1013-[JSOI2008]球形空间产生器sphere
    【欧拉函数】BZOJ2818-GCD
    守望者的逃离
    传球游戏
  • 原文地址:https://www.cnblogs.com/volcanol/p/2834765.html
Copyright © 2011-2022 走看看