[英]How to access a string value in a while loop, outside of a while loop, all while inside a method
該程序本身應該接受用戶輸入,然后在設置Mad Lib的設置中將其讀取。 用戶輸入名詞,動詞,形容詞等,然后全部以故事形式打印到控制台。
import java.util.Scanner;
public class CSFacts {
//first method
public static String Noun(int on) { //Start first user input, start with noun
String noun1;
Scanner input=new Scanner(System.in);
while (on==1) {
System.out.println("Please enter a Noun."); //prompt user to input a noun to be used in the main program
noun1=input.nextLine();
on=on-1;}
while (on==0) {
noun1=input.nextLine(); }
return noun1;
//return the noun as a string to be used in the main program
}
public static void main(String[] args) {
Noun(1);
System.out.println("Be kind to your "+Noun(0));
}
我面臨的問題是名詞1不會與我合作,盡管它不會從一個參數傳遞到另一個參數。 我需要名詞1從on = 1到on = 0進行攜帶,以便在第二次調用該方法時顯示為“對您的(插入名詞1)好一些”。 我似乎無法弄清楚如何將其保留下來。 這只是我實驗的一部分,但是如果我能弄清楚如何做到這一點,則可以將其包含在其他方法中。
您似乎有一個無限循環:
while (on==0) {
noun1=input.nextLine(); }
你叫你的方法, Noun(1)
這樣on
為1.您的第一個循環運行一次,然后結束,設定on
為0,然后你的第二個循環將永遠運行,因為它永遠不會改變on
,但一直走,直到它被改變,這將永遠不會發生。
為了回答您的實際問題, noun1
是在方法Noun()
定義的,因此它是一個局部變量,不能在其他任何地方使用。 為了解決這個問題,您可以將其定義為Noun()
之外的靜態變量,如下所示:
static String noun1;
另一種選擇是在您的main方法中使用從Noun()
返回的值,而不是像這樣做那樣將其丟棄:
String noun1 = Noun(1);
程序的控制流程似乎有些混亂。 請記住,您的程序是一系列指令 。 如果您仔細地逐步跟蹤控制流,則會發現一些問題。 我將幫助您詳細說明您的程序的工作方式,然后由您自行決定。
public static void main(String[] args) {
Noun(1); // (0)
System.out.println("Be kind to your "+Noun(0)); // (1)
}
我添加了注釋以標記每個語句。 您的程序始終從main
方法和第一條語句開始。 這是main
功能。
(0)
以on = 1
呼叫Noun
,轉到(1)
(1)
on = 0
Noun
,將結果存儲在tmp1
tmp1
的字符串追加到“對tmp1
”,存儲在tmp1
tmp1
的字符串 我在(1)
添加了更多細節,並發明了變量名tmp1
來簡化解釋-您的程序會將數據存儲在某個地方。
重要的是要注意,調用函數會產生對該函數的控制。 這意味着在被調用者執行完所有語句之前,調用者才執行下一條語句。
public static String Noun(int on) {
String noun1; // (0)
Scanner input = new Scanner(System.in); // (1)
while (on == 1) { // (2)
System.out.println("Please enter a Noun."); // (3)
noun1 = input.nextLine(); // (4)
on = on - 1; // (5)
}
while (on == 0) { // (6)
noun1 = input.nextLine(); // (7)
}
return noun1; // (8)
}
這是Noun
功能的作用。
(0)
將noun1
(1)
初始化為null
,轉到(1)
(1)
構造一個新的Scanner
對象並將其存儲在input
,轉到(2)
(2)
如果on == 1
轉到(3)
否則轉到(6)
(3)
打印“請輸入名詞。”,轉到(4)
(4)
讀取一行輸入並將其存儲到noun1
,轉到(5)
(5)
存放on - 1
on
,轉到(2)
(6)
如果on == 0
轉到(7)
否則轉到(8)
(7)
讀一行輸入並將其存儲到noun1
,轉到(6)
(8)
暫停並返回noun1
的值 請注意,僅考慮Noun
本身存在一些問題。 我將只重點介紹一個以幫助您入門。
如果on
不等於0或1,那么Noun
將返回null
,這就是IDE提示您的原因。 為什么? 要回答這個問題,我們只需要假設on
既不是0也不是1的情況,然后手動執行Noun
函數。
為簡單起見,我會選擇on
為3。我將保留所有變量的狀態跟蹤該函數執行。 在狀態的左側,我將指示我正在執行的語句,僅通過執行程序即可確定該語句。
(0)
on = 3, noun1 = null
(1)
on = 3, noun1 = null, input = new Scanner(System.in)
(2)
轉到(6)
因為on
不等於1 on = 3, noun1 = null, input = new Scanner(System.in)
(6)
轉到(8)
因為on
不等於0 on = 3, noun1 = null, input = new Scanner(System.in)
(8)
停止並返回noun1
on = 3, noun1 = null, input = new Scanner(System.in)
值on = 3, noun1 = null, input = new Scanner(System.in)
我懷疑變量范圍也會引起混淆。 這表明變量的生存期。 我將簡要地提及一下,當函數暫停(返回值或引發異常)時,在函數中聲明的變量將被破壞(超出范圍)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.