我正处于初级编程课程中,其中很多对我来说都是有意义的,直到现在我们开始使用方法并且我不完全确定我理解“静态”,“无效,“和”返回“陈述。
特别是对于这个任务,我认为我已经弄明白了,但它说主要方法中的行“找不到符号直方图”,尽管我明确地从另一个方法返回它。有人能帮帮我吗?
作业:“您可能会在编写程序时经常需要直方图,因此您决定使用程序310a2直方图。您可以添加到此程序或将其用作课程。您还可以编写课程(或方法)将生成各种范围的随机数。您可能希望星号代表不同的值(1,100或1000单位)。您可能还希望使用星号以外的字符,例如$ to表示图表的单位。运行程序足够多次以说明程序的各种能力。
所需语句:输出,循环控制,决策制定,类(可选),方法。
示例输出:
10月销售
日每日销售额表
2 37081 *************************************
3 28355 ****************************
4 39158 ***************************************
5 24904 ************************
6 28879 ****************************
7 13348 ************* “
这就是我所拥有的:
import java.util.Random;
public class prog310t
{
public static int randInt(int randomNum) //determines the random value for the day
{
Random rand = new Random();
randomNum = rand.nextInt((40000 - 1000) + 1) + 10000;
return randomNum;
}
public String histogram (int randomNum) //creates the histogram string
{
String histogram = "";
int roundedRandom = (randomNum/1000);
int ceiling = roundedRandom;
for (int k = 1; k < ceiling; k++)
{
histogram = histogram + "*";
}
return histogram;
}
public void main(String[] Args)
{
System.out.println("Sales for October\n");
System.out.println("Day Daily Sales Graph");
for (int k = 2; k < 31; k++)
{
if (k == 8 || k == 15 || k == 22 || k == 29)
{
k++;
}
System.out.print(k + " ");
int randomNum = 0;
randInt(randomNum);
System.out.print(randomNum + " ");
histogram (randomNum);
System.out.print(histogram + "\n");
}
}
}
编辑:多谢你们,现在我已经弄明白静态意味着什么了。现在我遇到了一个新问题;程序运行,但直方图返回为空。有人可以帮我理解为什么吗?新法典:
import java.util.Random;
public class prog310t
{
public static int randInt(int randomNum) //determines the random value for the day
{
Random rand = new Random();
randomNum = rand.nextInt((40000 - 1000) + 1) + 10000;
return randomNum;
}
public static String histogram (int marketValue) //creates the histogram string
{
String histogram = "";
int roundedRandom = (marketValue/1000);
int ceiling = roundedRandom;
for (int k = 1; k < ceiling; k++)
{
histogram = histogram + "*";
}
return histogram;
}
public static void main(String[] Args)
{
System.out.println("Sales for October\n");
System.out.println("Day Daily Sales Graph");
for (int k = 2; k < 31; k++)
{
if (k == 8 || k == 15 || k == 22 || k == 29)
{
k++;
}
System.out.print(k + " ");
int randomNum = 0;
int marketValue = randInt(randomNum);
System.out.print(marketValue + " ");
String newHistogram = histogram (randomNum);
System.out.print(newHistogram + "\n");
}
}
}
答案 0 :(得分:4)
您确定问题的根源在于不了解static
。这方面有很多资源,但在这里可以说static
属于类,而不是静态的东西属于特定的实例。这意味着
public class A{
public static int b;
public int x;
public int doStuff(){
return x;
}
public static void main(String[] args){
System.out.println(b); //Valid. Who's b? A (the class we are in)'s b.
System.out.println(x); //Error. Who's x? no instance provided, so we don't know.
doStuff(); //Error. Who are we calling doStuff() on? Which instance?
A a = new A();
System.out.println(a.x); //Valid. Who's x? a (an instance of A)'s x.
}
}
与此相关的是,您的方法histogram
不是static
,因此您需要一个实例来调用它。你不应该需要一个实例;只需将方法设为静态:
将public String histogram(int randomNum)
更改为public static String histogram(int randomNum)
。
完成后,行histogram(randomNum);
变为有效。但是,您仍会在System.out.print(histogram + "\n");
上收到错误,因为此处定义的histogram
是函数,而不是变量。这与return
语句有关。当某些内容显示return x
时(对于x
的任何值),它表示终止当前方法调用并向调用该方法的任何人提供值x
。
例如,考虑表达式2 + 3
。如果您要说int x = 2 + 3
,那么您希望x
之后有值5
。现在考虑一种方法:
public static int plus(int a, int b){
return a + b;
}
声明:int x = plus(2, 3);
。同样,我们希望x
之后有值5
。计算完成后,等待该值(类型int
)的任何人接收并使用该值,但是将使用该类型的单个值代替它。例如:
int x = plus(plus(1,2),plus(3,plus(4,1));
- &gt; x
的值为11。
回到你的例子:你需要为从histogram(randomNum);
返回的String值分配一个变量,如下:
将histogram(randomNum)
更改为String s = histogram(randomNum)
。
这将使它全部编译,但你会遇到最后的障碍:事情不会运行!这是因为可运行的main
方法需要是静态的。因此,更改主要方法以获得签名:
public static void main(String[] args){...}
然后点击绿色按钮!
答案 1 :(得分:2)
首先,你的主要方法应该是静态的:
public static void main(String[] Args)
如果没有它们所属的类的实例,则无法调用实例方法,而在没有实例的情况下可以调用静态方法。因此,如果要在main方法中调用其他方法,除非创建类型为prog310t
的对象,然后使用该对象调用方法示例,否则它们也必须是静态的:
public static void main(String[] Args)
{
prog310t test = new prog310t();
test.histogram(1);
}
但在你的情况下你可能想要这样做:
public static String histogram (int randomNum)
public static void main(String[] Args)
{
histogram(1);
}
另外你没有在main方法中捕获histogram()方法的返回,你应该这样做:
System.out.print(histogram(randomNum) + "\n");
或者
String test = histogram(randomNum);
System.out.print(test + "\n");
静态方法是类的一部分,可以在没有实例的情况下调用,但实例方法只能从实例示例中调用:
public class Test
{
public static void main(String[] args)
{
getNothingStatic();// this is ok
getNothing(); // THIS IS NOT OK IT WON'T WORK NEEDS AN INSTANCE
Test test = new Test();
test.getNothing(); // this is ok
getString(); // this is ok but you are not capturing the return value
String myString = getString(); // now the return string is stored in myString for later use
}
public void getNothing()
{
}
public static void getNothingStatic()
{
}
public static String getString()
{
return "hello";
}
}
Void意味着该方法不会返回任何正在进行某些处理的东西。您可以返回原始或对象类型来代替void,但是如果不使用void,则必须在方法中指定返回。
答案 2 :(得分:0)
在调用histogrom (randomNum)
之前,您需要使直方图静态或声明具有直方图的对象作为方法
例如
prog310t myClass = new prog310t();
myClass.histogram()