私はプログラミングクラスを始めたばかりですが、メソッドの操作を開始するこの時点まで、これの多くは私にとって理にかなっており、「静的」、「無効」を完全に理解しているとは言えません。および「return」ステートメント。
特にこの課題については、すべて理解できたと思いましたが、別のメソッドから明確に返しているのに、mainメソッドの行に「シンボルヒストグラムが見つかりません」と表示されています。誰か私を助けることができますか?
割り当て:「プログラムを作成する際にヒストグラムが頻繁に必要になることがあるので、このプログラムでプログラム310a2ヒストグラムを使用することにします。このプログラムに追加するか、クラスとして使用できます。クラス(またはメソッド)も作成します。 )さまざまな範囲で乱数を生成します。アスタリスクで異なる値(1、100、または1000単位)を表すこともできます。また、アスタリスク以外の文字($など)を使用して単位を表すこともできます。プログラムのさまざまな能力を説明するのに十分な回数、プログラムを実行します。
必要なステートメント:出力、ループ制御、意思決定、クラス(オプション)、メソッド。
サンプル出力:
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");
}
}
}
あなたの問題は理解していないことに根ざしているというのは正しいです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));
->x
値は11です。
例に戻ります。から返される文字列値に変数を割り当てる必要がありますhistogram(randomNum);
。
に変更histogram(randomNum)
しString s = histogram(randomNum)
ます。
これですべてコンパイルされますが、最後の障害になります。それは実行されません。これは、実行可能なmain
メソッドが静的である必要があるためです。したがって、mainメソッドを変更して署名を付けます。
public static void main(String[] args){...}
次に、緑色のボタンを押します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加