簡體   English   中英

(JAVA)如何將雙精度從列表轉換為整數

[英](JAVA) How to convert a double from a list to an int

我制作了一個名為 list 的list和兩個名為WeightAge的雙打

然后我嘗試從這樣的列表中獲取一個元素list.get((Age * 2) - 1) ,但它告訴我我不能在get() function 中放一個雙精度,所以我嘗試這樣做(int)(Age-1)但是當我將那段代碼放在if()命令中時,像這樣if(list.get((int) ((Age * 2) - 1)) > Weight.intValue())但隨后出於某種原因,它給了我這個例外:

operator ">" cannot be applied to "java.lang.Object","int"

為什么,為什么!

總的來說,這是我的代碼(請注意,我用一些額外的 android 庫編寫了它)

package com.example.ademapp;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.TextView;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final Button button = (Button) findViewById(R.id.Start);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            EditText text = (EditText)findViewById(R.id.Weight);
            EditText text3 = (EditText)findViewById(R.id.Age);
            Double Weight = Double.parseDouble(text.getText().toString());
            EditText text2 = (EditText)findViewById(R.id.Height);
            Double Height = Double.parseDouble(text2.getText().toString());
            Double IMC = Weight/Height/Math.pow(Height/100,2);
            TextView Result=(TextView)findViewById(R.id.Result);
            List list = Arrays.asList(15,19,14.5,16.5,14,16,13.75,17.5,13.5,17.5,13,17.5,13,18,13,18.5,13.25,19,13.5,20,13.75,20.5,14,21,14.5,22,15,22.5,15.5,23,16,24,16.5,24.5,17,25);
            Double Age = Double.parseDouble(text3.getText().toString());
            RadioButton Adult = (RadioButton) findViewById(R.id.Adult);
            RadioButton Kid = (RadioButton) findViewById(R.id.Kid);
            if(Adult.isChecked())
            {
                if (IMC<18.5)
                {
                    Result.setText("Tu est Trop Maigre!");
                }
                else if (IMC>30)
                {
                    Result.setText("Tu est Trop Gras!");
                }
                else
                {
                    Result.setText("Bravo! Tu est en bonne santée!");
                }
            }
            else if (Kid.isChecked())
            {

                if(list.get((int) ((Age * 2) - 1)) > Weight.intValue())
            }

        }
    });
}
}

tl;博士

使用<Double>聲明列表內容的類型。

List < Double > inputDoubles = List.of( 15,19,14.5,16.5,14,16,13.75,17.5,13.5,17.5,13,17.5,13,18,13,18.5,13.25,19,13.5,20,13.75,20.5,14,21,14.5,22,15,22.5,15.5,23,16,24,16.5,24.5,17,25 ) ;

使用 generics

正如 khelwood 評論的那樣,請參閱:什么是原始類型,為什么我們不應該使用它? .

使用 Java 的generics 功能,您可以在其中指定List集合要保存的數據類型。 如果不指定要保存的類型< Double > ,則列表不知道檢索到的元素的類型。

如果沒有 generics,當您調用list.get( … )時,編譯器只會看到Object object 而不是Double Your code > Weight.intValue() is asking to compare an Object object to a int primitive which makes no sense because an Object object is not a number.

而不是這個:

List list = Arrays.asList(15,19,14.5,16.5,14,16,13.75,17.5,13.5,17.5,13,17.5,13,18,13,18.5,13.25,19,13.5,20,13.75,20.5,14,21,14.5,22,15,22.5,15.5,23,16,24,16.5,24.5,17,25);
        

…將< Double >添加到您的List聲明中,如下所示:

List < Double > list = Arrays.asList(15,19,14.5,16.5,14,16,13.75,17.5,13.5,17.5,13,17.5,13,18,13,18.5,13.25,19,13.5,20,13.75,20.5,14,21,14.5,22,15,22.5,15.5,23,16,24,16.5,24.5,17,25);

您剛剛告訴編譯器這個特殊的List object 是一個Double對象的列表。 DayOfWeekDogInvoice object 放入該列表的代碼將無法編譯。 相反,當從列表中檢索元素時,編譯器肯定知道檢索到的元素是正確的預期類型,即Double 所以不需要鑄造

而且,順便說一句,我們現在使用List.of有了更方便的文字語法。 結果是一個不可修改的列表

通常最好在變量上使用更具描述性的名稱,例如inputDoubles而不是list

List < Double > inputDoubles = List.of( 15,19,14.5,16.5,14,16,13.75,17.5,13.5,17.5,13,17.5,13,18,13,18.5,13.25,19,13.5,20,13.75,20.5,14,21,14.5,22,15,22.5,15.5,23,16,24,16.5,24.5,17,25 ) ;

您使用非通用列表。

 List list = Arrays.asList(15,19, ... , 25)

如果列表不是通用的,則它包含 Objects。(Java 中最常見的 class)您將 int 和 double 存儲在一起,因此您需要由它們的父級對其進行通用

List<? extends Number> list = Arrays.asList(15,19, ... , 25)

然后取它的 double 值,雖然你不能將 double 轉換為 int,但可以將 int 轉換為 double

if(list.get((int) ((Age * 2) - 1)).doubleValue() > Weight.intValue())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM