gpt4 book ai didi

java - main 中的方法不会调用对象实例的方法?

转载 作者:行者123 更新时间:2023-12-01 14:53:50 25 4
gpt4 key购买 nike

这是一个包含 3 个类文件的 java 作业。问题是当我在 main.c 中调用“doOperations”方法时。 if 语句正确读取文件,但对象方法不起作用(例如 tv.on、tv.volumeUp tv.setChannel(scan.nextInt() 等))。

有人能看出我哪里出了问题吗?谢谢。

电视类文件。

import java.io.*;
import java.util.Scanner;

public class TV {
boolean on;
boolean subscribe;
int currentchannel;
int indexChan;
int volume;
File chanList;
Scanner chanScan;
TVChannel[] channels;
final int MaxChannel = 100;

public TV(){
on = false;
currentchannel = 1;
volume = 1;
channels = new TVChannel[MaxChannel]; //Create object of an array, default value = null.
subscribe = false;

}

public void turnOn(){
on = true;
}
public void turnOff(){
on = false;
}
public void channelUp(){
currentchannel++;
}
public void channelDown(){
currentchannel--;
}
public void volumeUp(){
volume++;
}
public void volumeDown(){
volume--;
}
public TVChannel getChannel(){
return channels[currentchannel];
}
public void setChannel(int c){
if(channels[c]!= null)
currentchannel = c;
}
public boolean subscribe(String provider) throws IOException{
chanList = new File(provider);
chanScan = new Scanner(chanList);

if(chanList.exists()){
while(chanScan.hasNext()){

indexChan = chanScan.nextInt();
channels[indexChan] = new TVChannel(indexChan, chanScan.nextLine());

}
chanScan.close();
return true;
}
else return false;
}

public void printAll(){
for(int i = 0; i < MaxChannel; i++){

if(channels[i]!= null)
System.out.println(channels[i].channelNumber+"\t"+channels[i].channelName);
}
}

public void displayChannel(int c){
if(channels[c]!= null)
System.out.println(channels[c].getChannel()+"\t"+channels[c].getName());
}
public void displayCurrentChannel(){
if(channels[currentchannel] != null)
System.out.println(channels[currentchannel].getChannel() +" "+ channels[currentchannel].getName());
}
}

主要功能

import java.io.File;
import java.io.IOException;
import java.util.Scanner;


public class TestTV {

public static void main(String[] args) throws IOException{


TV tv = new TV();
tv.subscribe("chan.txt");

if(tv.subscribe = true){
tv.printAll();
doOperations("operations.txt", tv);

}

}
//Static means only one instance of object.
public static void doOperations(String opFileName, TV tv) throws IOException{
File op = new File(opFileName);
Scanner scan = new Scanner(op);
String opa = scan.next();

while(scan.hasNext()){
System.out.println(scan.next());

if(opa.equals("on")) tv.turnOn();
else if(opa.equals("off")) tv.turnOff();
else if(opa.equals("channelUp")) tv.channelUp();
else if(opa.equals("channelDown")) tv.channelDown();
else if(opa.equals("volumeUp")) tv.volumeUp();
else if(opa.equals("volumeDown")) tv.volumeDown();
else if(opa.equals("showChannel")) tv.displayCurrentChannel();
else if(opa.equals("setChannel"))tv.setChannel(scan.nextInt()); //Error
}
scan.close();
}

}

最佳答案

你忘了把这个String opa = scan.next(); while 循环内部。当然,您需要在每个 token 上存储结果。

while(scan.hasNext()){
opa = scan.next();
System.out.println(opa); //don't just call scan.next()
//and discard the result. Unless that's really what you want?
.....
}

关于java - main 中的方法不会调用对象实例的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14507111/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com