小白提问,传参:读取文件的字符串

dollylly 云南大学 2017-11-24 01:22:02
我想从文件里读取字符串计算式,然后在程序里计算结果再写到文件里。
我将读取得到的字符串传到普通函数里,提示不能把静态内容传入,把这个函数声明为静态之后就可以了。
后面发现声明一个类,把读取的字符串传到这个类的对象的调用函数却没有提示不能传静态内容可以正常运行,但是这个类里的函数我也没有声明为静态,为什么就可以直接传呢? 求大佬指教。。

import java.io.*;
import static java.lang.System.out;

public class calculate {

public static void main(String[] args) throws java.io.IOException //用于异常信息处理
{
String br;
int result;
process pro = new process();

File infile = new File("calculate.txt");
File outfile = new File("resul.txt");
BufferedWriter writer = new BufferedWriter(new FileWriter(outfile));


BufferedReader reader = new BufferedReader(new FileReader(infile));
// //从一个面向字符的输入流中读取一行文本。如果其中不再有数据,返回null
while ((br = reader.readLine()) != null)
{
result = pro.calculater(br);
writer.write(br+"=");
writer.write(Integer.toString(result));
writer.newLine();
}

reader.close();

writer.close();

}
}

public class process {
/**
*传入文件扫描字符串
*
* @param line
* @return
*/
int calculater(String line) {

int i,j =0,k=0,result = 0;
int length=line.length();
int[] num = new int[10];
char[] oprand=new char[10];
char expends[] = line.toCharArray();

for(i=0;i<length;i++) {
if (expends[i] >='0'&& expends[i]<='9')
{num[j] = expends[i]-'0';
j++; }

if(expends[i]=='+'||expends[i]=='-'||expends[i]=='*'||expends[i]=='/')
{oprand[k]=expends[i];
k++; }
}


k=0;
for(i=0;i<j;i++)
{
if(oprand[k]=='+')
num[i+1]+=num[i];
else if(oprand[k]=='-')
num[i+1]=num[i]-num[i+1];
else if(oprand[k]=='*')
num[i+1]*=num[i];
else if(oprand[k]=='/')
num[i+1]=num[i]/num[i+1];
k++;
}
result=num[i-1];
return result;
}
}
...全文
195 9 点赞 打赏 收藏 举报
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
dollylly 2017-11-24
引用 8 楼 abc_cba_aaa 的回复:
把int calculater(String line) 方法写成static int calculater(String line) ,main方法是static的,再static的main中调用其他方法,那么其他方法也要是static的
谢谢谢谢,这个方法我之前试过了,我想问的是声明一个类,类里有一个调用String的函数,把读取的字符串传到这个类的对象的调用函数可以正常运行,但是这个类里的函数我也没有声明为静态,为什么就可以直接传呢
  • 打赏
  • 举报
回复
昔小年 2017-11-24
把int calculater(String line) 方法写成static int calculater(String line) ,main方法是static的,再static的main中调用其他方法,那么其他方法也要是static的
  • 打赏
  • 举报
回复
dollylly 2017-11-24
引用 6 楼 abc_cba_aaa 的回复:
报的什么错,贴代码
import java.io.*;
import static java.lang.System.out;

public class calculate {
 int calculater(String line) {return 0};

    public static void main(String[] args) throws java.io.IOException //用于异常信息处理
    {
        String br;
        int result;
        File infile = new File("calculate.txt");
        File outfile = new File("resul.txt");
        BufferedWriter writer = new BufferedWriter(new FileWriter(outfile));


            BufferedReader reader = new BufferedReader(new FileReader(infile));
            // //从一个面向字符的输入流中读取一行文本。如果其中不再有数据,返回null
            while ((br = reader.readLine()) != null)
            {
                result = calculater(br);
                writer.write(br+"=");
                writer.write(Integer.toString(result));
                writer.newLine();
            }
            reader.close();
        writer.close();
    }
}
声明的函数是这个 int calculater(String line) 调用 result = calculater(br); 报错 non-static:方法 calculater(String line) ,line不是static的
  • 打赏
  • 举报
回复
昔小年 2017-11-24
报的什么错,贴代码
  • 打赏
  • 举报
回复
dollylly 2017-11-24
引用 4 楼 abc_cba_aaa 的回复:
main方法是程序的入口,是static的,public static void main(String[] args)是main方法的固定写法,你不用static,程序从哪里开始执行你写的代码
那我在这个类中声明一个 int f(String line) 把读取的文件的字符串传入然后出错,是因为从这个包含main函数的类中读取了文件,所以得到的是静态的字符串变量的原因吗 噗原谅我实在太小白。。
  • 打赏
  • 举报
回复
昔小年 2017-11-24
main方法是程序的入口,是static的,public static void main(String[] args)是main方法的固定写法,你不用static,程序从哪里开始执行你写的代码
  • 打赏
  • 举报
回复
dollylly 2017-11-24
引用 1 楼 abc_cba_aaa 的回复:
你的main方法是static的
main不是个接口吗 我声明为不是静态的以后,就提示main 方法不是类中的static, 请将 main 方法定义为:public static void main(String[] args)
  • 打赏
  • 举报
回复
昔小年 2017-11-24
你的main方法是static的
  • 打赏
  • 举报
回复
相关推荐
发帖
Java
加入

4.8w+

社区成员

Java相关技术讨论
申请成为版主
帖子事件
创建了帖子
2017-11-24 01:22
社区公告
暂无公告