String []无法通过方法调用转换转换为int?

时间:2014-06-03 09:40:57

标签: java types compiler-errors

此代码尝试执行的操作

期望的结果:

使用代码解释以下引用的含义:

  

此外,您可以使用模数运算符从数字中提取最右边的数字。例如,x%10产生x的最右边的数字(在基数10中)。类似地,x%100产生最后两位数。     - Think Java,Allan Downey,Green Tea Press

问题

  • 如何修复此错误?
  • 我的代码可以简化或合并吗(参见评论)?

错误消息

extRight.java:11: error: method extRight in class 
extRight cannot be applied to given types;
                int s = extRight(args);
                        ^
  required: int
  found: String[]
  reason: actual argument String[] cannot be 
  converted to int by method invocation conversion
1 error

我的代码

class extRight {

    public static void extRight(int x) {

        x = x % 10; //initially tried `x % 10;`

    }

    public static void main(String[] args){

            //initially the below was: extRight(args);
            //then: System.out.print(extRight(args));
        int s = extRight(args);
        String o = Integer.toString(s);
        System.out.print(o);

    }

}

7 个答案:

答案 0 :(得分:1)

现有职能

首先,将您的函数名称extRight更改为其他名称!它是函数类的名称,用于定义该类的构造函数。

如何为参数

分配新值

x是一个参数,您无法修改x = x % 10;之类的参数。声明一个静态变量int x,并直接访问它;或者,从您的函数返回int!否则,您的功能将无用。的例:

//return x
public static int extRight1(int x) {

    x = x % 10;
    return x;

}

传递错误的类型

您正在将args传递给extRight,它需要一个int类型参数:int s = extRight(args);

自动字符串对话

您不必采取这一步骤:String o = Integer.toString(s);。您可以直接编写System.out.print(s);,因为在将它打印到控制台之前,它会自动将sysout中的int转换为String。

工作代码

工作代码看起来像下面的内容(了解你想要实现的目标):

class extRight {

public static int extRight1(int x) {

    x = x % 10; 
     return x;

}

public static void main(String[] args){
    //do not forget  to pass command line args to program like this "java extRight 1"   
    int s = extRight1(Integer.parseInt(args[0]));// change indices to assign different arg[] values
   //  String o = Integer.toString(s)  you dont have to do this you can directly write
    System.out.print(s);

}

}

答案 1 :(得分:0)

extRight(args) // extRight() expects an int, you are passing a String[]

检查

public static void extRight(int x) { // expecting int. Also int s = extRight(args); --> this method returns nothing i.e, void

    x = x % 10; //initially tried `x % 10;`

}

答案 2 :(得分:0)

乍一看,这里有两件事情错了(可能还有一些)。查看extRight方法的定义:

public static void extRight(int x)

具体是类型。 参数intreturnvoid。现在看看你如何使用它:

int s = extRight(args);

argsString[](因此编译错误),如果没有返回类型,您期望s成为什么?

根本不清楚这段代码甚至试图做什么,但要“纠正错误”,你需要正确对齐你的类型。简单地将参数更改为String[]将无法正常工作,因为该方法的逻辑需要int。也许您需要将第一个args值转换为int并将其传递给方法?那么你也希望返回这个方法似乎......

答案 3 :(得分:0)

你可以看到或有wirten

String[] args

argsString - 对象

的数组

你的方法

void extRight(int x)
然而,

int作为参数。基本类型int和对象类型String不兼容。另外,对象数组与同一类型的单个对象不兼容。您需要迭代参数数组,并将String值显式转换/解析为int值。

声明

x = x % 10;

没有预期的效果,在java参数中通过值传递(引用也是如此),因此当您在方法中修改x时,修改后的值仅在该方法中可见。 (它不像C中那样可以将指针传递给int!)

最后,您的方法extRight的返回类型为void,这会在行上显示错误

int s = extRight(args);

您的方法需要

int extRight(int x)

以下是您班级的修改版本

class ExtRight {
    public static int extRight(int x) {
        return x % 10;
    }

    public static void main(String[] args){
        for(String s : args) {
            int i = extRight(Integer.parseInt(s));
            System.out.print(i);
        }
    }
}

另请注意,您不应将具有相同名称的方法命名为该类,并且该类名应始终以大写字母开头。

答案 4 :(得分:0)

args是字符串类型。您需要将arg转换为Int类型。

以下是修改后的代码:

class extRight {

public static int extRight(int x) {

    x = x % 10; //initially tried `x % 10;`
    return x;

}

public static void main(String[] args) {

    int i = Integer.parseInt(args[0]) //convert to int
    int s = extRight(i);
    String o = Integer.toString(s);
    System.out.print(o);
}
}

答案 5 :(得分:0)

您必须将'args'字符串选项卡解析为整数:

int t = 0;
try {
    t = Integer.parseInt(args[0]);
} catch (Exception e) {
    // error : the first argument is not an integer
    t = 0;
}
s = extRight(t);

答案 6 :(得分:0)

您的代码存在一些非常基本的问题。

第一个问题是您有一个String[],并尝试将其视为intString[]可能包含多个值(甚至是0值!),因此不清楚要将哪个值视为数字。我只是假设你想要第一个。

第二个问题是extRight函数中的返回类型和按值调用的问题。在函数内部为x赋值将仅覆盖局部变量x。它不会更改调用函数的变量(您的main)。

以下是我想要实现的目标以及我提出的解决方案:

class extRight {
    //this function now returns a value so that the changes by your calculations
    // can be used by the main function
    public static int extRight(int x) {
        return x % 10;
    }

    public static void main(String[] args){
        //this converts the first argument to an int:
        int arg = Integer.valueOf(args[0]);
        //the return value of your extRight function is store to the variable s
        int s = extRight(arg);
        //instead of your code, you can simply print the int variable
        System.out.print(s);
    }
}