从类getValue调用Java
好的,我正在尝试创建一个名为:setIncrement()的方法。我有两个我正在使用的类,FourDigit,它包含我制作的两个两位数的对象。我把每一个都称为分段1和分段2。他们的关系是:分段1.2。此方法将递增分段2,当其重置为零时,该方法将递增分段1 问题就在这段代码中:从类getValue调用Java,java,Java,好的,我正在尝试创建一个名为:setIncrement()的方法。我有两个我正在使用的类,FourDigit,它包含我制作的两个两位数的对象。我把每一个都称为分段1和分段2。他们的关系是:分段1.2。此方法将递增分段2,当其重置为零时,该方法将递增分段1 问题就在这段代码中: public void setIncrement(){ segment2.incrementValue(); if(segment2.getValue == 0){ segment1.va
public void setIncrement(){
segment2.incrementValue();
if(segment2.getValue == 0){
segment1.value = segment1.value +1;
}else{
segment2=aNum%tooHighB;
}
getDisplayString();
}
它说:找不到符号变量:getValue()
以下是课程:
四位数类:
public class FourDigits
{
/**
* Fields
*/
private Digits segment1;
private Digits segment2;
private String displayString;
/**
* Constructor for objects of class FourDigits
*/
public FourDigits(int anyHigha, int anyHighb)
{
segment1 = new Digits(anyHigha);
segment2 = new Digits(anyHighb);
}
/**
* Mutator method to set values
*/
public void setValues(int anyNuma, int anyNumb){
segment1.setValue(anyNuma);
segment2.setValue(anyNumb);
}
/**
* Mutator method to set the increments
*/
public void setIncrement(){
segment2.incrementValue();
if(segment2.getValue == 0){
segment1.value = segment1.value +1;
}else{
segment2=aNum%tooHighB;
}
getDisplayString();
}
/**
* Mutator method to getDisplayString
*/
public void getDisplayString(){
System.out.println(segment1.displayString() ="." + segment2.displayString());
}
}
public class Digits
{
/**
* Fields
*/
private int value;
private int tooHigh;
private String displayString;
/**
* Constructors
*/
public Digits(int anyNum)
{
value = 0;
tooHigh=anyNum;
displayString = "";
}
/**
* Mutator method to set the value
*/
public void setValue(int anyValue){
if((anyValue < tooHigh) && (anyValue >= 0)){
value = anyValue;
}else{
value=0;
}
}
/**
* Mutator method to add to the value
*/
public void addValue(){
if(value < tooHigh){
value=value+1;
}else{
value=tooHigh;
}
}
/**
* Mutator method to increment the value
*/
public void incrementValue(){
int incrementValue;
incrementValue = value + 1;
value = incrementValue % tooHigh;
}
/**
* Mutator method to display the string
*/
public void displayString(){
if(value<10){
displayString="0" + value;
}else{
displayString="" + value;
}
System.out.println(displayString);
}
public int getValue(){
return value;
}
}
它从Digits类中获取方法:
public class FourDigits
{
/**
* Fields
*/
private Digits segment1;
private Digits segment2;
private String displayString;
/**
* Constructor for objects of class FourDigits
*/
public FourDigits(int anyHigha, int anyHighb)
{
segment1 = new Digits(anyHigha);
segment2 = new Digits(anyHighb);
}
/**
* Mutator method to set values
*/
public void setValues(int anyNuma, int anyNumb){
segment1.setValue(anyNuma);
segment2.setValue(anyNumb);
}
/**
* Mutator method to set the increments
*/
public void setIncrement(){
segment2.incrementValue();
if(segment2.getValue == 0){
segment1.value = segment1.value +1;
}else{
segment2=aNum%tooHighB;
}
getDisplayString();
}
/**
* Mutator method to getDisplayString
*/
public void getDisplayString(){
System.out.println(segment1.displayString() ="." + segment2.displayString());
}
}
public class Digits
{
/**
* Fields
*/
private int value;
private int tooHigh;
private String displayString;
/**
* Constructors
*/
public Digits(int anyNum)
{
value = 0;
tooHigh=anyNum;
displayString = "";
}
/**
* Mutator method to set the value
*/
public void setValue(int anyValue){
if((anyValue < tooHigh) && (anyValue >= 0)){
value = anyValue;
}else{
value=0;
}
}
/**
* Mutator method to add to the value
*/
public void addValue(){
if(value < tooHigh){
value=value+1;
}else{
value=tooHigh;
}
}
/**
* Mutator method to increment the value
*/
public void incrementValue(){
int incrementValue;
incrementValue = value + 1;
value = incrementValue % tooHigh;
}
/**
* Mutator method to display the string
*/
public void displayString(){
if(value<10){
displayString="0" + value;
}else{
displayString="" + value;
}
System.out.println(displayString);
}
public int getValue(){
return value;
}
}
公共类数字
{
/**
*田地
*/
私有int值;
私家车指数偏高;
私有字符串显示字符串;
/**
*建设者
*/
公共数字(int anyNum)
{
数值=0;
Tooheigh=anyNum;
displayString=“”;
}
/**
*设置值的Mutator方法
*/
公共无效设置值(int anyValue){
如果((任意值<过高)&&(任意值>=0)){
value=anyValue;
}否则{
数值=0;
}
}
/**
*要添加到值的Mutator方法
*/
公共无效附加值(){
如果(值<太高){
值=值+1;
}否则{
数值=太高;
}
}
/**
*增加值的Mutator方法
*/
public void incrementValue(){
int递增值;
增量值=值+1;
值=递增值%1过高;
}
/**
*用于显示字符串的Mutator方法
*/
公共void显示字符串(){
如果(value比较两个数字时需要使用“=”,而不是赋值的“=”
e、 g:
您的问题是这一行:
if(segment2.incrementValue() = 0){
编译器会准确地告诉您出了什么问题:您正在尝试为某个值赋值,而不是变量。您可能希望比较而不是赋值,因此该行应为:
if(segment2.incrementValue() == 0){
if (segment2.incrementValue() == 0) {
segment1.setValue(segment1.getValue() + 1);
} else {
segment2.setValue(aNum % tooHighB);
}
除了使用赋值运算符而不是相等比较外,您还尝试设置segment2而不是segment2.value。我怀疑块应该是:
if(segment2.incrementValue() == 0){
if (segment2.incrementValue() == 0) {
segment1.setValue(segment1.getValue() + 1);
} else {
segment2.setValue(aNum % tooHighB);
}
请注意,aNum
或tooHighB
,我看不到任何声明,incrementValue()
此时返回void,而您可能希望它返回新值
(顺便说一句,我鼓励您使用空格使代码更易于阅读。)为什么要进行这种比较[这是一种赋值,而不是比较]:
if(segment2.incrementValue() = 0)
难道不是吗
if(segment2.incrementValue() == 0)
同时将increment()方法更改为:
public int incrementValue(){
int incrementValue;
incrementValue = value + 1;
value = incrementValue % tooHigh;
return value;
}
每个人都得到了=
,所以我将指出一个不同的错误
FourDigits
没有访问Digits.value
的权限。您应该使用Digits
中的setValue()
方法
编辑以进行更新:
if(segment2.getValue == 0){
getValue是一个方法,需要在其末尾有括号。相反,您需要这样:
if(segment2.getValue() == 0){
除了大家说的以外:
segment2.incrementValue()
您的类方法Digits.incrementValue()
属于类型void
,因此此比较检查将永远不会起作用:
if(segment2.incrementValue() == 0){ //Corrected your equals operation
我建议:
- 在
Digits
类中为实例变量value
(因为value
是私有的)创建一个getter方法
- 如示例所示执行比较检查(假设实现了
值的getter):
例如:
segment2.incrementValue();
if (segment2.getValue() == 0) {
//Do work....
segment1.setValue(segment1.getValue() + 1);
}
在if
语句中的setIncrement()
函数中缺少一个“=”符号。它应该是“==”。此外,堆栈跟踪也会很有用。防止我提到的错误的一个技巧是颠倒比较顺序。因此if(0==var)
而不是if(var==0)
。这样你就不会在if语句中得到错误的赋值。@Swaranga Sarma,我们说的是Jon Skeet:)他是如此的编译器和调试器!Lol不知什么原因,虽然现在我遇到了一个不能使用VOID的错误?是的…当其他人都在忙着获取第一个答案时,Jon Skeet编写了最完整的一个。@jtm22…您已经声明了您的段。increment()作为返回void…那将不起作用。你需要做的是,一旦你增加了值,你就需要返回它。或者使用另一种方法,如:getValue()。@jtm22,请参阅我对你的void
问题的回答。在OP的问题中,segment2.incrementValue()
的类型为void
。在OP的问题中,segment2.incrementValue()
的类型为void
。我认为该值是私有的,因此不起作用,但我确实创建了一个名为getValue的方法,它只是以数字形式返回值。现在,当我使用您的建议时,它说找不到符号变量getValue??您的getValue()的实现在哪里
method?它与public int getValue(){return value;}
完全一样吗?它在Digits类中,是的,它与Digits类完全一样,我甚至尝试在它自己的类中测试它,它工作了!!重新编译并测试它是否解决了您的问题。否则,更新您的问题。看@my answer,您有如果(segment2.getValue==0){
没有()
(而我有我的)。如果你做segmen2.getValue()
,编译器正在寻找一个公共int-getValue;
变量而不是一个方法。既然你的是一个方法,那么就做segment2.getValue()
.setValue不做我在这个类中需要它做的事情。我不希望他们设置值,我希望它从0开始,每次递增。我创建了一个名为getValue的方法,它只是返回值;以数字表示,但不起作用。有什么想法吗?@jtm22:jsut get和set的基本递增。segment1.setValue(segment1.getValue()+1)