书写Java时的常见问题

发布于:2023-02-14 ⋅ 阅读:(517) ⋅ 点赞:(0)

书写Java时的常见问题

第一条:从键盘接受用户输入时

第一条第一则:

1.1.1 没有指定的接收 名 时

提示语句和定义的用户从键盘输入的语句,这二者的顺序对我们代码的运行没有很大明显的印象的,现阶段我们可以不用考虑这二者的顺序,当然,知道原理的情况的下,采用规定的顺序更好

比如:

 System.out.print("请输入需要产生的二维数组之二维随机数:");
 Scanner MyScannerOne = new Scanner(System.in);

1.1.2 指定接受名接收

在这种情况下,我们有必要规避一个很大的错误写法,那就是将提示语句写在了接受名的下方

比如:

byte num = MyScannerOne.nextByte();
System.out.print("请输入需要产生的二维数组之二维随机数:")

这种情况是需要规避的,很影响我们在客户端的输入问题,造成了没有提示语句就需要输入,此刻,在我们不知情的情况下,会对客户端产生很大程度的影响,其次,当我们输入语句是,这是,提示语句就会出来,我们需要在输入一次,就目前情况而言,很影响我们的持续

如果我们规避的上面的一条,我们对顺序就目前而言不做明确的要求,但是呢,定义语句和接收语句的顺序我们应该不会乱,除非你抬杠
我们举一例主编建议的顺序写法

  System.out.print("请输入需要产生的二维数组之二维随机数:");
  Scanner MyScannerOne = new Scanner(System.in);
  byte num = MyScannerOne.nextByte();

本质

本质是将接收的数给他(MyScannerOne.nextByte()),至于他(MyScannerOne.nextByte())又将数(地址)赋给谁,我们不就关系,要做的就是保证他(MyScannerOne.nextByte())以及他(MyScannerOne.nextByte())将数(地址)赋给谁在提示语句的后面

第一条第二则:

2.1 我们在定义从键盘接收客户端的指令时,我们只需要定义一次,在后续当中,我们写了多少个 MyScannerOne.nextByte() (byte可以为任意类型),就有多少个接收指令,类型可以重复多次

2.2 String temp = MyScannerOne.nextLine(); 当我们执行此条语句时,此条语句有个缓冲,我们知道, MyScannerOne.nextLine();
是从键盘接收客户端指令的,可以直接使用,但是,当我们执行 String temp = MyScannerOne.nextLine();
时,需要将 MyScannerOne.nextLine();
接收到的值赋给temp,这就形成了一个缓冲,可以解决我们的很多问题,最主要的是当我们同时输出多条提示语句时,我们又想单独根据提示语句赋值,此时,我们就可以使用这个缓冲

2.3 例如:


     System.out.print("请输入书籍名字:");
     Scanner MyScannerOne = new Scanner(System.in);
     String temp = MyScannerOne.nextLine();
     System.out.print("请输入书籍价格:");

     Book book = new Book(temp, MyScannerOne.nextShort());
**如果没有缓冲,提示语句会提示输出,对我们造成困扰**

第二条第一则

二维数组之给一维数组单独开空间

以 byte 类型为例
我们都,给二维数组开空间有一下三种简单的方法

  1. 语法: 类型[][] 数组名=new 类型[大小][大小] 比如: byte a[][]=new int[2][3]
  2. 先声明:类型 数组名[][]; 再定义(开辟空间) 数组名 = new 类型[大小][大小] 赋值(有默认值,比如 int 类型的就是 0) 比如: byte arr[][]; //声明二维数组 arr = new byte[2][3];//再开空间
  3. 定义 类型 数组名[][] = {{值 1,值 2…},{值 1,值 2…},{值 1,值 2…}} 使用即可 [ 固定方式访问 ] 比如: byte[][] arr = {{1,1,1}, {8,8,9}, {100}};
  4. 二维数组的声明方式有: int[][] y 或者 int[] y[] 或者 int y[][]
  5. 二维数组实际上是由多个一维数组组成的,它的各个一维数组的长度可以相同,也可以不相同。

我们知道

二维数组实际上是由多个一维数组组成的,它的各个一维数组的长度可以相同,也可以不相同。
故,我们可以单独给每一阶段的一维数组开空间,以保证数组看见不浪费,我们够用的情况

我们先展示正确的单独开空的示例

arr[i] = new double[MyScannerTwo.nextByte()];

初学者常犯的错误示例

这样子写,虽然在写的过程中不会报错,编译阶段也不会说是他的错,但是程序无法执行下去,需注意

arr = new double[i][MyScannerTwo.nextByte()];

第三条第一则

Java接收字符串

1.首先创建一个 Scanner 实例对象
2.我们可以调用的Scanner类的next()方法来获取输入的字符串。
3.查看结果你会发现,next()方法只能读取第一个空格前的一个段字符串。所以使用这个方法,你输入的数据不能有空格。
4.另外接收字符串,一般使用nextLine()方法。
5.查看下面的运行输出结果。发现nextLine(),一次性读取一行数据.
6.当然接收字符串还可以使用BufferedReader类来接收。 然后调用它的readLine()方法来获得字符串

Java实现接受一个字符

java不像c语言一样,有自己的对应从键盘接受单个字符的能力,java为什么只能接受字符串,而单个字符的能力却没有呢?

java接受单个字符的方法如下

1.先导入java工具包

import java.util.Scanner;

2.创建一个输入类(从键盘接收)

Scanner scanner = new Scanner(System.in);

3.接收一个字符串

String s = scan.next();

4.利用chatAt截取第一个字符

char c = s.charAt(0);

5.关闭输入io流

scanner.close;	//关闭输入io流

6.输出字符

System.out.println("获取的的第一字符"+c);	

第四条第一则

在 Java 中,当我们遇到需要输入 π 时,我们发现系统并不认识 π,所以,我们这时被迫就输出了 3.14,但是,Java时非常强大的,我们可以输入 Math 中 PI,就可以解决我们的这个问题

比如
圆的周长

	(Math.PI * this.Radius * this.Radius)

圆的面积

	(2 * this.Radius * Math.PI)

第五章第一则

vs code Java运行问题:Build failed, do you want to continue?

在这里插入图片描述

这是因为:

因为vscode构建将编译项目中的所有java文件,所以,应该是你的其他java文件存在一些问题,所以无法通过编译,但是这个你选择的java文件可以通过编译,所以如果你继续,它仍然可以工作.可以通过将其他java文件里面的错误都改正,再进行编译时,就不会再出现这个弹窗了。

我们可以选择是(当前问价)也可以可以通过将其他java文件里面的错误都改正

第五条第一则

Scanner MyScanner = new Scanner(System.in);
强调:只能在当前类中使用,需要注意

Array对数组进行排序

第六章第一则

关于 this 和 super 的区别

this

1.this调用属性 总结: 在构造器和方法中我们可以直接调用属性,往往会省略“this.”,但是当局部变量名和属性名一样的时候 必须使用“this.”来区分和属性和局部变量
2.this调用方法 在同一个类中,方法之间可以相互调用,在调用的时候可以省略“this.”。
3.this调用构造器 格式:this(形参列表) 作用:调用本类中的其他构造器

关键字:this

用来表示当前对象
可以用来调用属性、方法和构造器

一、this调用属性

总结: 在构造器和方法中我们可以直接调用属性,往往会省略“this.”,但是当局部变量名和属性名一样的时候
必须使用“this.”来区分和属性和局部变量

二、this调用方法

在同一个类中,方法之间可以相互调用,在调用的时候可以省略“this.”。

三、this调用构造器

格式:this(形参列表)
作用:调用本类中的其他构造器
注意:
1、this(形参列表)必须在构造器的首行
2、在同一个构造器中最多只能用一个this(形参列表)调用其他构造器
3、如果有n个构造器,那么最多能有n-1个this(形参列表)

super

super 用于在不同的包中调用构造器

super:可以用来修饰属性,方法,构造器

1、当子类与父类有同名的属性时,可以通过super。属性的方式调用父类中生命的属性。

2、当子类重写父类的方法后,在子类中若想调用父类中被重写的方法时,需用super.的方法

3、super修饰构造器,通过在子类中使用super列表参数的形式调用父类中制定的构造器

    a、在构造器内部,super(参数列表)必须声明在首行

    b、在构造器内部,this(参数列表)或super(参数列表)只能出现一个

    c、当构造器中不显示的调用this(参数列表)或super(参数列表)默认调用父类中的空参                 构造器

super只在子类中出现 - - - 语法如下

super有三种用法

【1】 super.xxx; xxx可以是类的属性。 例如super.name;即从子类中获取父类name属性的值

【2】 super.xxx(); xxx()可以是类中的方法名。 super.xxx();的意义是直接访问父类中的xxx()方法并调用

【3】 super(); 此方法意义是直接调用父类的构造函数。
super(无参/有参)即调用父类中的某个构造方法,括号里的内容根据你所调用的某个构造函数的变化而改变

与this对比:

this :本身调用者这个对象
super: 代表父类对象的应用

前提:

this:没有继承也可以使用
super: 只能在继承条件才可以使用

构造方法:

this (): 本类的构造
super(): 父类的构造

一张图解决很多文字,如下:

在这里插入图片描述

OK,本期内容就分享到这里,后续有关一些需要写在本篇文章中的我会继续更近,有些细节不需要在本篇文章我会放在当前文章,感谢大家的支持

本文含有隐藏内容,请 开通VIP 后查看