我收到错误消息:此处不允许使用“无效”类型

时间:2019-12-03 19:55:57

标签: java arrays void

public static void displayMenu(String[] name, double[] price) {
 int i = 0;
 double pr = 0;
 System.out.println("Welcome to our store, we have the following. Please enter what you would like: ");
 for (int j = 0; j < name.length; j++) {
      pr = price[j];
      System.out.println((j + 1) + " - for " + name[j] + " (" + pr + ")");
 }
 System.out.println("0 - for checkout");
}

capitalize(name)是一个void方法,它将字符串数组作为参数。

public static void capitalize(String[] name) {
  String s = "";
  for (int i = 0; i < name.length; i++) {
     s = name[i];
     s = s.substring(0,1).toUpperCase() + s.substring(1).toLowerCase();
     System.out.println(s);
  }                    
}

我想使用String数组的“大写/小写”版本,但是会出现错误:

error: 'void' type not allowed here
     System.out.println((j + 1) + " - for " + capitalize(name) + " (" + pr + ")");
                                                        ^

对此我该怎么办? *注意=必须使用void方法来完成。

2 个答案:

答案 0 :(得分:1)

我最初的回答确实是错误的。如果您需要返回void,而不是打印它,请替换数组(或使用大写的字符串创建一个新数组):

public void capitalize(String[] name) {
  String s = "";
  for (int i = 0; i < name.length; i++) {
     s = name[i];
     s = s.substring(0,1).toUpperCase() + s.substring(1).toLowerCase();
     name[i] = s;
  }                    
}

然后,在打印语句中,打印出名称[j](或如果要保留原始名称,则称为新数组)。

答案 1 :(得分:0)

您正在尝试打印不允许的void方法的结果。如果您无法更改方法的类型,请让该方法修改实例变量(可以是您所拥有的数组),然后打印该变量(数组)。您甚至可以在每次迭代后仅在void方法内打印值。

说您的实例变量是这个String[] name。然后,您可以这样做:

for (int j = 0; j < name.length; j++) {
    pr = price[j];
    capitalize(name);
    System.out.println((j + 1) + " - for " + name[j] + " (" + pr + ")");
}

您的大写方法:

  for (int i = 0; i < name.length; i++) {
     this.name[i] = name[i].substring(0,1).toUpperCase() + name[i].substring(1).toLowerCase();
     System.out.println(this.name[i]); //this is optional if you're okay with printing here instead of where the capitalize method gets called
  }