我在大學,我對資料結構和演算法有這個任務,這就是專案:“開發一個程式,要求用戶輸入美國州的首都。收到用戶輸入后,程式會報告用戶是否輸入是正確的。對于這個應用程式,50個州及其首都按州名順序存盤在一個二維陣列中。顯示陣列的當前內容然后使用冒泡排序將內容按大寫排序。接下來,提示用戶輸入所有州首府的答案,然后顯示正確總數。用戶的答案不區分大小寫。
這是我到目前為止所做的
import java.util.Scanner;
import java.util.Arrays;
import java.lang.String;
public class Assignment {
// It begins with the creation of the two dimension array that includes state and capital.
public static void main (String[] args) {
String[][] StateAndCapital = {
{"Alabama", "Montgomery"},
{"Alaska", "Juneau"},
{"Arizona", "Phoenix"},
{"Arkansas", "Little Rock"},
{"California", "Sacramento"},
{"Colorado", "Denver"},
{"Connecticut", "Hartford"},
{"Delaware", "Dover"},
{"Florida", "Tallahassee"},
{"Georgia", "Atlanta"},
{"Hawaii", "Honolulu"},
{"Idaho", "Boise"},
{"Illinois", "Springfield"},
{"Indiana", "Indianapolis"},
{"Iowa", "Des Moines"},
{"Kansas", "Topeka"},
{"Kentucky", "Frankfort"},
{"Louisiana", "Baton Rouge"},
{"Maine", "Augusta"},
{"Maryland", "Annapolis"},
{"Massachusetts", "Boston"},
{"Michigan", "Lansing"},
{"Minnesota", "Saint Paul"},
{"Mississippi", "Jackson"},
{"Missouri", "Jefferson City"},
{"Montana", "Helena"},
{"Nebraska", "Lincoln"},
{"Nevada", "Carson City"},
{"New Hampshire", "Concord"},
{"New Jersey", "Trenton"},
{"New Mexico", "Santa Fe"},
{"New York", "Albany"},
{"North Carolina", "Raleigh"},
{"North Dakota", "Bismarck"},
{"Ohio", "Columbus"},
{"Oklahoma", "Oklahoma City"},
{"Oregon", "Salem"},
{"Pennsylvania", "Harrisburg"},
{"Rhode Island", "Providence"},
{"South Carolina", "Columbia"},
{"South Dakota", "Pierre"},
{"Tennessee", "Nashville"},
{"Texas", "Austin"},
{"Utah", "Salt Lake City"},
{"Vermont", "Montpelier"},
{"Virginia", "Richmond"},
{"Washington", "Olympia"},
{"West Virginia", "Charleston"},
{"Wisconsin", "Madison"},
{"Wyoming", "Cheyenne"}
};
到目前為止,我已經創建了二維陣列,我需要一個 for 回圈,以便系統通過陣列。但我不確定如何為二維陣列創建 for 回圈,我已經觀看了氣泡排序的視頻(作業需要)以及我的課程提到的內容,但它們主要展示了如何在單維陣列上執行此操作。
for (int i = 1; i < array.length; i ) {
for (int j = i; j > 0; j--) {
if (array[j] < array [j - 1]) {
temp = array[j];
array[j] = array[j - 1];
array[j - 1] = temp;
那是上一課,使用單個陣列,但不知道如何使用二維陣列。
我還研究了如何將字串轉換為布林值,因此每當用戶回答時,系統都會說“正確答案”或“錯誤答案”。如果我能得到一些建議,我開始了,這可能是一個愚蠢的問題。
我嘗試將字串值更改為布林值,因此每當我回復系統時,我都會根據分配給僅狀態陣列的真/假值得到“正確”或“錯誤”的答案,但無論如何,所有答案似乎都是真的我的輸入,這很奇怪。我仍在尋找一種驗證字串值的方法。我使用掃描儀掃描用戶給出的答案,查看布爾程式以查看是否可以看到我可以使用但嘗試使其基于字串的內容。
uj5u.com熱心網友回復:
"2D"您可以像陣列一樣對陣列進行排序"1D"。你有50行和2列。假設您知道如何對"1D"陣列進行排序并使用i and j您將:
- 比較按大寫
arr[i][1]排序a[j][1] - 然后,當時間交換
arr[i][1] and arr[j][1]和交換時arr[i][0] and arr[j][0]。(或者就像您的示例排序一樣,但您需要交換同一行上的兩列以將每個州及其首都保持在一起)。
對于測驗,如果提出一個州要求其首都,只需提示輸入首都并與正確答案進行比較。類似地呈現首都并要求狀態。我建議您使用小寫來比較所有內容,以避免比較時出現問題。
查看String類以獲取有關使用compareToand toLowerCaseor的資訊toUpperCase。
更新
一路測驗是一個好主意,因此為了確保您正確地迭代它們,請執行以下操作:
for (int i = 0; i < stateAndCapitals.length; i ){
System.out.println(Arrays.toString(stateAndCapitals[i]));
}
uj5u.com熱心網友回復:
(1) Java 有原語和參考型別。關系運算子<, <=, >,>=用于原語。關系運算子==和!=可用于基元或參考型別。對于原語,它們按預期比較值。對于參考型別,它們不比較值。他們回答了“運算元是否相同參考,即相同Object?”的問題。
要比較參考型別的值,可以使用.equalsor.compareTo等??方法。String是參考型別。兩個Objects 值(不是參考)的比較通常如下所示:
Foo foo1, foo2;
...
if (foo1.equals (foo2)) ...
有時,需要對值進行大于或小于比較。如果一個類implements Comparable,物件有一個compareTo方法。該compareTo方法回傳 a int,它將負數、零或正數指示哪個具有更高的值,或者它們相等。
if (foo1.compareTo(foo2) < 0) {
System.out.println ("Foo1 is less than Foo2");
...
String確實執行Comparable。
StringAPI提供了一些比較方法:
.equals (String other).equalsIgnoreCase (String other).compareTo (String other).compareToIgnoreCase (String other)
(2a) 對于二維陣列,如array[j]參考一整行的運算式array,即array[j][0],array[j][1],array[j][2],array[j][3] , ...
(2b) 要訪問單個元素,您需要指定每個下標。
System.out.println ("The capital of " stateAndCapital[i][0]
" is " stateAndCapital[i][1] ".");
(3) 您想按第 1 列排序。因此,將一個stateAndCapital[x][1]與另一個進行比較stateAndCapital[y][1]。
(記住 (2b):指定兩個下標)。
使用String.compareTo或String.compareToIgnoreCase:
if (stateAndCapital[m][1].compareToIgnoreCase (stateAndCapital[n][1] < 0) {
System.out.println (stateAndCapital[n][1]
" comes before " stateAndCapital[m][1]);
當您需要交換時,您需要為索引行交換第 1 列和第 0 列。
您只有兩列要交換。有一個快捷方式,列越多就越有用:交換整行,就像交換兩個物件一樣。一種方法是制作temp一維陣列String:
String[] temp;
...
temp = stateAndCapital[j];
stateAndCapital[j] = stateAndCapital[j - 1];
stateAndCapital[j - 1] = temp;
為什么這行得通?記住 (2a):陣列是參考型別。二維陣列實際上是基本型別陣列的陣列。
至少出于測驗目的,請執行以下操作:
- 使用上述 3 個問題修復冒泡排序。
- 列印原始陣列中的州名和大寫字母。
- 做冒泡排序。
- 再次列印州名和大寫字母。
注意:我使用stateAndCapital而不是StateAndCapital符合 Java 命名約定。
uj5u.com熱心網友回復:
另一種方法是創建一個類,因此每個物件都有一個州名和首都名稱。
public class StateAndCapital implements CompareTo {
private String stateName;
private String capitalName;
public StateAndCapital (String state, String capital) {
stateName = state;
capitalName = capital;
}
public String getStateName () { return stateName; }
public String getCapitalName () { return capitalName; }
public int compareTo (StateAndCapital other) {
int i = this.capital.compareTo (other.capital);
if (i == 0) {
i = this.stateName.compareTo (other.stateName );
}
return i;
}
}
然后,您將擁有一個一維陣列。
public static void main (String[] args) {
StateAndCapital [] stateCapital = {
new StateAndCapital ("Alabama", "Montgomery"),
new StateAndCapital ("Alaska", "Juneau"),
new StateAndCapital ("Arizona", "Phoenix"),
new StateAndCapital ("Arkansas", "Little Rock"),
...
};
...
}
然后,在冒泡排序代碼中,使用陣列的實際名稱,并進行如下比較:
if (stateCapital[j].compareTo(stateCapital [j - 1])) ...
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/529923.html
上一篇:C編程int驗證
