期望的结果:
使用代码解释以下引用的含义:
此外,您可以使用模数运算符从数字中提取最右边的数字。例如,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);
}
}
答案 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)
具体是类型。 参数是int
,return
是void
。现在看看你如何使用它:
int s = extRight(args);
args
是String[]
(因此编译错误),如果没有返回类型,您期望s
成为什么?
根本不清楚这段代码甚至试图做什么,但要“纠正错误”,你需要正确对齐你的类型。简单地将参数更改为String[]
将无法正常工作,因为该方法的逻辑需要int
。也许您需要将第一个args
值转换为int
并将其传递给方法?那么你也希望返回这个方法似乎......
答案 3 :(得分:0)
你可以看到或有wirten
String[] args
args
是String
- 对象
你的方法
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[]
,并尝试将其视为int
。 String[]
可能包含多个值(甚至是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);
}
}