zoukankan      html  css  js  c++  java
  • 关于转入软件工程专业后第二次java课上作业的某些体会

    今天是第二周的java课。

    自从转入了软件工程专业后,在我没有学习c++的基础上,直接开始了学习java的过程。不得不说过程很艰辛。今天下午老师让编写一个随机产生作业的软件。而我的基础差到都不知道如何创建数组。

    在尴尬的坐了一下午后,我终于尴尬的回到了宿舍。激动的我又开始气冲冲的写代码,但写了一俩小时也没有什么进展。在借鉴了同学的作业后,明明是一模一样,我的却死活无法运行,显示by zero.

    悲伤欲绝的我疯狂的修改代码,却仍然无法解决这个错误。最后才发现我误把一个变量名写成了另一个变量名。真是在编代码的路上绝对不能太慌,不然会出事。

    下面贴上代码,仍有些错误。姑且先贴上,有空再加修改。

     (课后作业1)

    package Test;
    
    import java.util.*;
    import java.math.*;
    public class _15 
    {
     public static void main(String[] args){
         Scanner in = new Scanner(System.in);
         int num = in.nextInt();
         int line = in.nextInt();
         int []a= new int[num];
         int []b=new int[num];
         int []c=new int[num];
         for(int i=0;i<num;i++){
             int x = (int) (Math.random()*99+1);
             int y = (int) (Math.random()*99+1);
             int sign =(int)(Math.random()*3);
             if(sign==1||sign==3){
                 while(x<y){
                     x = (int) (Math.random()*99+1);
                     y = (int) (Math.random()*99+1);
                 }
             }
             if(sign==2){
                 while(x*y>100){
                     x = (int) (Math.random()*99+1);
                     y = (int) (Math.random()*99+1);
                 }
             }
             if(sign==3){
                 while(x%y!=0){
                     x = (int) (Math.random()*99+1);
                     y = (int) (Math.random()*99+1);
                 }
             }
             a[i]=x;b[i]=y;c[i]=sign;boolean pd=true;
             if(i!=0){
                 while(pd){
                     for(int cha=0;cha<i;cha++){
                         if(x!=a[i]&&y!=b[i]&&sign!=c[i]){
                             pd=false;
                         }
                         else  {x = (int) (Math.random()*100+1);
                         y = (int) (Math.random()*100+1);
                         sign =(int)(Math.random()*3);
                         }
                     }
                 } 
             }
             if(sign==0)
                {
                    System.out.print((i+1)+"."+x+"+"+y+"=    ");
                }
                if(sign==1)
                {
                    System.out.print((i+1)+"."+x+"-"+y+"=    ");
                }
                if(sign==2)
                {
                    System.out.print((i+1)+"."+x+"*"+y+"=    ");
                }
                if(sign==3)
                {
                    System.out.print((i+1)+"."+x+"/"+y+"=    ");
                }
                if((i+1)%line==0)
                     System.out.println();
             }
    
         }
    }

    
    

     然后发现可以把后面的if语句省略成更为简单的switch语句:

             switch(sign){
             case 0:System.out.print((i+1)+"."+x+"+"+y+"=         ");break;
             case 1:System.out.print((i+1)+"."+x+"-"+y+"=         ");break;
             case 2:System.out.print((i+1)+"."+x+"*"+y+"=         ");break;
             case 3:System.out.print((i+1)+"."+x+"/"+y+"=         ");break;

     关于课上一些动手动脑的问题,也做了个小总结:

    1.java中对于字符串的比较,可以用"=="或equals()方法。而例题代码中给出的两个字符串变量不同时,自然会传出false结果。

    2.对于枚举类型的最基本应用,就是枚举名.内容,可以直接引用枚举中的一个变量。

    3.同时也从代码中得知,枚举类型不属于原始数据类型。

    4.在枚举类型中,有一个编译器生成的valueOf()方法,可以返回带指定名称的指定枚举类型的枚举常量。

    5.同时,编译器还提供了value()方法,用于返回枚举类型中的所有值(作为数组)。 

     6.原码:最简单的机器数表示法。反码:正数的反码还是等于原码   负数的反码就是他的原码除符号位外,按位取反。 补码:正数的补码等于他的原码     负数的补码等于反码+1。

    为了验证java中对于各种数是用哪种码表示的,编写了一个示例程序对java中的数进行了小运算。以下为代码:

    package Teste;
    
    public class TESt {
        public static void main(String [] args){
            int a=128;
            int b=-129;
            System.out.println("进行位运算的结果为:"+(a&b));
            System.out.println("进行或运算的结果为:"+(a|b));
            System.out.println("a进行非运算的结果为:"+(~a));
            System.out.println("进行异或运算的结果为:"+(a^b));    
        }
    
    }
    View Code

    通过运行结果与手动运算比较,再加上int型占四个字节,对于int型的存储,第一位表示符号(0为正,1为负),对于负数,用补码储存。正数则是原码储存。

    7.关于java中的同名变量的屏蔽原则,用一个示例程序说明吧:

    package Teste;
    
    public class TESt {
        static int x=1;
        public static void main(String [] args){
    
            System.out.println(x);
            {
                int x=1;
                System.out.println(x);
            }
            
        }
    
    }

    运行结果后,发现第二个输出语句输出的是复合语句中的x的值,也就可以解释所谓同名变量的屏蔽原则,就是以局部变量为准。在本例中就是以大括号中的变量声明与定义为准。

    8.关于java中的类型转换,由表可以看出,由占用字节数多的向少的转换不会造成数据丢失,反之则会造成一定的数据丢失。

    9.在java中,浮点数的运算结果是不准确的。其中的原因可以这样解释:在计算机的计算中,总是将十进制转换为二进制。而double类型的存储是64个二进制数,也就代表着最低位大概率会出现误差(除非正好是2的n次方)因为要准确表示我们需要的数字需要远远大于64个二进制数。

    10.关于这个问题,会输出结果X+Y=100200

    300X+Y=  可以这样解释:第一个输出语句,双引号在前,这样就使得整个输出语句是输出了一个字符串,就不再会进行后面的加法运算。而第二个输出语句就不同了,先进行运算再输出字符串。这告诉我们想输出结果时应该把内容分开写,不能把字符串顶头写。

    另外,老师还布置了一个生成和验证验证码的程序,以下附上:

    package code;
    import java.awt.*;
    import javax.swing.*;      
    public class GetCode {
        static String result ="";
        static void getnumber1(){
              for(int i=0;i<(int)(Math.random()*6+1);i++)
              {
                  int number1=(int)(Math.random()*9);
                  result+=number1;
              }
        }
        static void getnumber(){
            for(int i=0;i<(int)(Math.random()*6+1);i++)
              {
                  //生成一个97~122的INT型的整数
                  int number =(int)(Math.random()*26+97);
                  //生成一个0~9的数字
                  result+=(char)number;
              }
        }
      public static void main(String [] args){
          //生成验证码.
          int flag=0;
          do{
              if(result.length()!=6)
              {
                  getnumber();
                  getnumber1();
              }
              //显示验证码,并提示用户输入验证码
              String input =JOptionPane.showInputDialog(result+"\n请输入验证码:");
              if(input.equals(result))
              {
                  JOptionPane.showMessageDialog(null,"验证码输入正确,验证成功!"
                          ,"Results",JOptionPane.PLAIN_MESSAGE);
                  flag=1;
              }
              else {
                  JOptionPane.showMessageDialog(null,"验证码错误,请重新输入!"
                          ,"Results",JOptionPane.PLAIN_MESSAGE);
                  
              }
          }while(flag==0);
      }
    
    }

    但这个代码中仍出现了一些问题,比如无法用if语句保证其输出的字符串长度为6等等,待日后解决。

  • 相关阅读:
    【好书摘要】性能优化中CPU、内存、磁盘IO、网络性能的依赖
    【转】性能调优从哪里入手
    【转】从来没有冲突的团队是最糟糕的团队
    【转】华为Java编程军规,每季度代码验收标准
    【转】性能测试随笔,看看罢了,只做笑谈尔。
    MVC的JsonResult用法
    artDialog
    js apply/call/caller/callee/bind使用方法与区别分析
    jquery的each()详细介绍
    ASP.NET 4.5.256 has not been registered on the Web server
  • 原文地址:https://www.cnblogs.com/wushenjiang/p/11530869.html
Copyright © 2011-2022 走看看