从类getValue调用Java

从类getValue调用Java,java,Java,好的,我正在尝试创建一个名为:setIncrement()的方法。我有两个我正在使用的类,FourDigit,它包含我制作的两个两位数的对象。我把每一个都称为分段1和分段2。他们的关系是:分段1.2。此方法将递增分段2,当其重置为零时,该方法将递增分段1 问题就在这段代码中: public void setIncrement(){ segment2.incrementValue(); if(segment2.getValue == 0){ segment1.va

好的,我正在尝试创建一个名为:setIncrement()的方法。我有两个我正在使用的类,FourDigit,它包含我制作的两个两位数的对象。我把每一个都称为分段1和分段2。他们的关系是:分段1.2。此方法将递增分段2,当其重置为零时,该方法将递增分段1

问题就在这段代码中:

 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)