Java課後習題總結

棉花堂發表於2024-09-28

1,第一個問題是關於列舉迭代的:
private enum MyEnum{
ONE, TWO, THREE
}
public static void main(String[] args) {
for(MyEnum value:MyEnum.values()){
System.out.println(value);
}
}
這段程式碼的執行結果是遍歷了陣列包含 ONE、TWO 和 THREE三個元素,並逐個輸出列舉常量的值,這種foreach列舉迭代,無需知道具體列舉的數量,直接就可以按序列舉

2,第二個問題關於兩數相加的對話方塊顯示:
這是我第一次瞭解可以展示對話方塊的類,內容程式碼如下:
class Addition {
public static void main( String args[] )
{
String firstNumber, secondNumber;
int number1,number2, sum;
firstNumber = JOptionPane.showInputDialog( "Enter first integer" );
secondNumber = JOptionPane.showInputDialog( "Enter second integer" );

    number1 = Integer.parseInt( firstNumber );
    number2 = Integer.parseInt( secondNumber );
    sum = number1 + number2;
    
    JOptionPane.showMessageDialog(
            null, "The sum is " + sum, "Results",
            JOptionPane.PLAIN_MESSAGE );

    System.exit( 0 );   // terminate the program
}

}
這段程式碼的關鍵就在於JOptionPane類與Integer.parseInt方法,JOptionPane類的作用是能將對話方塊顯示出來,而Integer.parseInt則是能將字串轉化為整形
3.那麼接下來就到了字元轉換時的精度損失了,強制型別轉換時,可能會引起資訊的損失
程式碼如下:
public class try {
public static void main(String[] args) {
double number1 = 123456789;
float number2 = (float) number1;
System.out.println(number1);
System.out.println(number2);
}
}
嘗試了一下強制型別的字元轉換,並出現了精度的損失第一次的輸出為1.23456789E8
第二次的輸出為1.23456792E8
那麼可得在整形資料例如int,long一類資料與浮點型資料例如float,double一類的資料之間轉換時,會出現精度的缺失
那麼就能嘗試Int Long long型別轉化成float和double型別的精度損失的問題
內容如下:class TestDouble {

public static void main(String args[]) {
    System.out.println("0.05 + 0.01 = " + (0.05 + 0.01));
    System.out.println("1.0 - 0.42 = " + (1.0 - 0.42));
    System.out.println("4.015 * 100 = " + (4.015 * 100));
    System.out.println("123.3 / 100 = " + (123.3 / 100));
}

}
結果如下:
0.05 + 0.01 = 0.060000000000000005
1.0 - 0.42 = 0.5800000000000001
4.015 * 100 = 401.49999999999994
123.3 / 100 = 1.2329999999999999
我想在計算機中所有的資料都是以二進位制的方式儲存的,所有的浮點型資料都是近似的值,所以在小數類的計算時,精度是無法保證的
那麼嘗試改變精度:
class TestBigDecimal
{
public static void main(String[] args)
{
BigDecimal f1 = new BigDecimal("0.05");
BigDecimal f2 = BigDecimal.valueOf(0.01);
BigDecimal f3 = new BigDecimal(0.05);
//下面使用String作為BigDecimal構造器引數的計算結果:
System.out.println("0.05 + 0.01 = " + f1.add(f2));
System.out.println("0.05 - 0.01 = " + f1.subtract(f2));
System.out.println("0.05 * 0.01 = " + f1.multiply(f2));
System.out.println("0.05 / 0.01 = " + f1.divide(f2));
//下面使用double作為BigDecimal構造器引數的計算結果:
System.out.println("0.05 + 0.01 = " + f3.add(f2));
System.out.println("0.05 - 0.01 = " + f3.subtract(f2));
System.out.println("0.05 * 0.01 = " + f3.multiply(f2));
System.out.println("0.05 / 0.01 = " + f3.divide(f2));
}
}

字串構造BigDecimal:f1被初始化為"0.05",而f2透過BigDecimal.valueOf(0.01)生成。

使用double值構造BigDecimal:f3透過浮點數0.05初始化。此時進行的計算與使用字串時相同,但由於浮點數的精度問題,可能會產生不確定的結果。BigDecimal提供了一種解決浮點數精度問題的有效方法,尤其是在需要進行多個數學運算時。使用字串初始化BigDecimal將提供比直接使用double更高的精度保障。
最後的輸出結果:系統輸出展示了兩組運算的結果,清晰地表明瞭不同構造方式帶來的精度差異。
4,字串連結的相關注意:
public class Line {
public static void main(String[] args)
{
int X = 100;
int Y = 200;
System.out.println("X+Y="+X+Y);
System.out.println(X+Y+"= X+Y");
}
}

System.out.println("X+Y=" + X + Y);
這裡"X+Y="是一個字串,X(值為100)直接被轉換為字串形式並與前面的字串連線。連線的結果是"X+Y=100",接著與Y(值為200)繼續連線,結果為"X+Y=100200"。
System.out.println(X + Y + "= X+Y");
在此行中,由於X和Y都是整數,首先執行X + Y的運算,得到300。然後再將300與"= X+Y"字串連線,最終輸出結果為"300= X+Y"。
5,隨機數的生成:
這裡主要就是random的運用了,黑馬程式設計師裡有比較詳細的解說
程式碼如下:
import java.util.Random;
public class MathQuiz {
private static final int NUMBER_OF_QUESTIONS = 30;
private static final int MAX_RANDOM_NUMBER = 10;
private static final int OPERATIONS_COUNT = 4;
public static void main(String[] args) {
Random random = new Random();
for (int i = 0; i < NUMBER_OF_QUESTIONS; i++) {
generateQuestion(random); }
}
private static void generateQuestion(Random random) {
int number1 = random.nextInt(MAX_RANDOM_NUMBER) + 1;
int number2;
int operation = random.nextInt(OPERATIONS_COUNT); // 確保當操作為除法時,number2 不為零
if (operation == 3) {
number2 = random.nextInt(MAX_RANDOM_NUMBER) + 1; // 除法運算,number2 不能為零
}
else {
number2 = random.nextInt(MAX_RANDOM_NUMBER + 1);
}
switch (operation) {
case 0: System.out.println(number1 + " + " + number2 + " = ?"); break; case 1: System.out.println(number1 + " - " + number2 + " = ?"); break; case 2: System.out.println(number1 + " * " + number2 + " = ?"); break; case 3: System.out.println(number1 + " / " + number2 + " = ?"); break;
}
}
}

相關文章