java中length后面加不加括号
时间: 2023-05-27 12:07:10 浏览: 85
在Java中,如果要获取数组的长度,应该使用数组对象的length属性,而不是方法。因此,在获取数组长度时,应该使用数组名后跟一个点(.)和length,例如:
int[] arr = {1, 2, 3, 4};
int len = arr.length; // 不需要括号
注意:如果在调用方法时使用了括号,编译器会认为你在调用一个方法而不是访问一个属性,会导致编译错误。
相关问题
设计一个Java程序,完成: 表达式整理,去掉多余的括号。假设输入的表达式是正确的(不用检验是否正确),且只是由+和*两种运算组成。 如:"(((2))*(((4+1))))+2",去掉多余括号后,结果是:"2*(4+1)+2" 输入界面: 请输入表达式:(((2))*(((4+1))))+2 输出界面: 去掉多余括号后,结果是:2*(4+1)+2
好的,以下是 Java 代码实现:
```java
import java.util.Scanner;
public class ExpressionSimplification {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入表达式:");
String exp = sc.nextLine();
String result = simplify(exp);
System.out.println("去掉多余括号后,结果是:" + result);
}
// 表达式整理,去掉多余的括号
public static String simplify(String exp) {
StringBuilder sb = new StringBuilder(exp);
int len = sb.length();
boolean[] remove = new boolean[len]; // 标记哪些括号可以删除
for (int i = 0; i < len; i++) {
char c = sb.charAt(i);
if (c == '(') {
// 如果左括号后面一个字符是右括号或者数字,则说明括号可以删除
if (i + 1 < len && (sb.charAt(i + 1) == ')' || Character.isDigit(sb.charAt(i + 1)))) {
remove[i] = true;
remove[findMatchingRightParenthesis(sb, i)] = true; // 标记右括号也要删除
}
}
}
// 删除标记的括号
for (int i = len - 1; i >= 0; i--) {
if (remove[i]) {
sb.deleteCharAt(i);
}
}
// 去掉括号后,将"(a+b)*c"这种形式变成"a+b*c"
for (int i = 0; i < sb.length() - 1; i++) {
char c1 = sb.charAt(i);
char c2 = sb.charAt(i + 1);
if (c1 == ')' && c2 == '(') {
sb.insert(i + 1, '*');
}
}
return sb.toString();
}
// 找到与指定左括号匹配的右括号的下标
public static int findMatchingRightParenthesis(StringBuilder sb, int leftParenthesisIndex) {
int count = 1;
for (int i = leftParenthesisIndex + 1; i < sb.length(); i++) {
char c = sb.charAt(i);
if (c == '(') {
count++;
} else if (c == ')') {
count--;
}
if (count == 0) {
return i;
}
}
return -1; // 没有匹配的右括号
}
}
```
代码思路如下:
1. 遍历整个表达式,如果发现左括号后面一个字符是右括号或者数字,则说明这对括号可以删除,标记一下。
2. 根据标记删除对应的括号。
3. 去掉括号后,将"(a+b)*c"这种形式变成"a+b*c"。
4. 返回整理后的表达式。
注意事项:
1. 由于只考虑了+和*两种运算,所以输入的表达式必须是正确的,不用检验是否正确。
2. 如果输入的表达式中有空格,需要先把空格去掉。
package setp17; import java.util.Arrays; import java.util.Scanner; public class HelloWorld { /********** Begin **********/ /** * 第一题:定义一个方法 接收两个整数类型的参数 a和b,返回两个数的和 返回值类型为int 方法名为:getSum */ static int getSum(int a,int b){ int sum=a+b; return sum; } /** * 第二题: 定义一个方法 接收三个double类型参数a,b,c, 返回这三个数的平均值 返回值类型为double 方法名为:getAvg */ public static void getAvg(double a,double b,double c){ double avg=(a+b+c)/3.0; return avg; } /** * 第三题: 定义一个方法 接收两个参数 a 和b 打印a行 b列的一个矩形 不需要返回值 方法名为:printRect */ public static void printRect(int a,int b){ for(int i=0;i<a;i++){ for(int j=0;j<b;j++){ System.out.println("*"); } } } /** * 第四题:定以一个方法,接收整形数组 为参数 对这个数组进行升序排序 最后输出该数组 不需要返回值 方法名为 sortArr */ public static void storArr(int a []){ for(int j=0;j<a.length;j++){ for(int i=0;i<a.length-1;i++){ if(a[i]>a[i+1]){ int temp = a[i]; a[i] = a[i+1]; a[i+1] = temp; } } } /** * 第五题 * 你只需要实现for 循环括号的内容就可 ,打印语句系统已经给你完成 */ static void Print99() { for (int j=1;j<10;j++) { for(int i=1;i<10;i++) { if(i<=j){ System.out.print(j + " * " + i + " = " + i * j + "\t"); } } System.out.println(); } } /********** End **********/ } 怎么修改
这段代码存在几个问题:
1. 第二题的方法定义中,返回类型为void,但是方法体中有return语句,需要将返回类型修改为double。
2. 第三题的方法定义中,打印矩形的语句应该使用System.out.print而不是System.out.println,否则会在每个*后面打印一个换行符。
3. 第四题的方法定义中,方法名应该是sortArr而不是storArr。
4. 第五题的方法定义中,方法名应该是Print99而不是Print9。
修改后的代码如下:
```java
package setp17;
import java.util.Arrays;
import java.util.Scanner;
public class HelloWorld {
/**
* 第一题:定义一个方法 接收两个整数类型的参数 a和b,返回两个数的和
* 返回值类型为int 方法名为:getSum
*/
static int getSum(int a, int b) {
int sum = a + b;
return sum;
}
/**
* 第二题: 定义一个方法 接收三个double类型参数a,b,c, 返回这三个数的平均值
* 返回值类型为double 方法名为:getAvg
*/
public static double getAvg(double a, double b, double c) {
double avg = (a + b + c) / 3.0;
return avg;
}
/**
* 第三题: 定义一个方法 接收两个参数 a 和b 打印a行 b列的一个矩形
* 不需要返回值 方法名为:printRect
*/
public static void printRect(int a, int b) {
for (int i = 0; i < a; i++) {
for (int j = 0; j < b; j++) {
System.out.print("*");
}
System.out.println();
}
}
/**
* 第四题:定以一个方法,接收整形数组为参数 对这个数组进行升序排序 最后输出该数组
* 不需要返回值 方法名为 sortArr
*/
public static void sortArr(int a[]) {
for (int j = 0; j < a.length; j++) {
for (int i = 0; i < a.length - 1; i++) {
if (a[i] > a[i + 1]) {
int temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
}
}
}
System.out.println(Arrays.toString(a));
}
/**
* 第五题
* 你只需要实现for 循环括号的内容就可 ,打印语句系统已经给你完成
*/
static void Print99() {
for (int j = 1; j < 10; j++) {
for (int i = 1; i < 10; i++) {
if (i <= j) {
System.out.print(j + " * " + i + " = " + i * j + "\t");
}
}
System.out.println();
}
}
}
```
阅读全文