以下是我目前遇到问题的程序的要求:
该程序必须能够打开任何由用户指定的文本文件,并分析文字中口头滴答的频率。由于有许多不同种类的口头滴答(如“喜欢”、“嗯”、“嗯”、“你知道”等),所以程序必须问用户要寻找什么滴答。用户可以输入多个滴答,用逗号分隔。
程序应该输出:
这是我的节目:
public class TextfileHW2 {
// initiate(
public static int[] initiate(int[] values){
for (int z=0; z<keys.length; z++){
values[z] = 0;
}
return values;
processing(values);
}
// processing(values)
public static int[] processing(int[] valuez){
while (input.hasNext()){
String next = input.next();
totalwords++;
for (int x = 0; x<keys.length; x++){
if (next.toLowerCase().equals(keys[x])){
valuez[x]+=1;
}
}
return valuez;
output();
}
for (Integer u : valuez){
totalticks += u;
}
}
public static void output(){
System.out.println("Total number of tics :"+totalticks);
System.out.printf("Density of tics (in percent): %.2f \n", ((totalticks/totalwords)*100));
System.out.println(".........Tick Breakdown.......");
for (int z = 0; z<keys.length; z++){
System.out.println(keys[z] + " / "+ values[z]+" occurences /" + (values[z]*100/totalticks) + "% of all tics");
}
sc.close();
input.close();
}
public static void main(String[] args) throws FileNotFoundException {
static double totalwords = 0; // double so density (totalwords/totalticks) returned can be double
static int totalticks = 0;
System.out.println("What file would you like to open?");
static Scanner sc = new Scanner(System.in);
static String files = sc.nextLine();
static Scanner input = new Scanner(new File(files));
System.out.println("What words would you like to search for? (please separate with a comma)");
static String ticks = sc.nextLine(), tics = ticks.toLowerCase();
static String[] keys = tics.split(",");
static int[] values = new int[keys.length];
initiate(values);
}我的程序应该在逻辑上是正确的,因为我写了它并在上周成功地运行了一段时间,但与这个程序的不同之处(它不起作用)是,我必须对分析的每个组件使用不同的方法,考虑到程序之前的工作,这应该不会太困难,所以我自然地尝试将我的程序分开,这样我就可以调用我的第一个方法(我称之为启动),然后我的第二个和第三个方法称为处理和输出。
首先,static的真正含义是什么?我记得我的老师说它代表一个全局变量,我可以在程序中的任何地方使用它。如您所见,我将每个变量更改为static,以使我的任务更容易。
此外,如果要更改某些内容,是否严格需要使用返回的public static +类型?
假设我想改变数组的值(就像我在程序中做的那样,使用公共静态空),我需要返回一些东西来实际更改数组的值,还是可以使用公共静态空值?
如果有人对我的方法有任何一般性的建议,我会很感激的。
发布于 2014-02-23 19:11:17
您的问题在于您的initiate方法:
return values;
processing(values);一旦调用return,您的方法就停止了。如果您正在使用Eclipse (我强烈推荐使用Eclipse),您应该会遇到一个错误:“不可访问的代码”,因为程序根本无法执行您的processing方法。
我还在您的output方法中看到了这个缺陷。
发布于 2014-02-23 19:11:33
首先,
static的真正含义是什么?我记得我的老师说它代表一个全局变量,我可以在程序中的任何地方使用它。如您所见,我将每个变量更改为static,以使我的任务更容易。
这取决于背景。这里有一个很好的整体描述。当应用于方法、字段和类时,含义是不同的。说它使变量“全局”是有点简化了。
此外,如果要更改某些内容,是否严格需要使用返回的
public static+类型?
我有点搞不懂你的意思。声明为public static *return_type*的方法有三个独立的特性:
public:任何其他类都可以访问它。static:它不需要类的实例来运行(参见上面的链接)。*return_type*:这当然是返回类型。这些属性与“改变某些东西”并没有真正的关系。除非我误解了您的问题,否则答案是:不,方法说明符和返回类型对其更改某些内容的能力没有影响,除非static方法不能修改非static字段或调用this的非static方法( static方法中没有this )。
假设我想改变数组的值(就像我在程序中做的那样,使用公共静态空),我需要返回一些东西来实际更改数组的值,还是可以使用公共静态空值?
您在函数中所做的工作完全独立于它的访问说明符和static-ness (除了上面提到的this不存在于static方法之外)。如果您的函数有任何副作用,比如更改数组中的值(或任何相应的值),那么不管public、static或其返回类型如何,它都会这样做。
查看官方语言教程的更多关于课程的内容部分。它简明扼要,写得很好,应该能帮助你更好地理解你要问的一般概念。如果你愿意的话,也可以看看其他一些教程。
https://stackoverflow.com/questions/21973000
复制相似问题