我必须计算以下功能:
f(x)=x^3-x-1
我创建了一个名为“Function”的类,在其中,我有一个计算上述函数的方法。
我的代码来了:
double function(double num)
{
BigDecimal first,second;
double a,b,c,b_copy;
a = Math.pow(num, 3);
b=(double)a-num;
first=new BigDecimal(b);
second=new BigDecimal("1.0");
first.min(second);
b_copy=first.doubleValue();
return b_copy ;
}
我实际上对这两行代码有一些问题:
first.min(second);
b_copy=first.doubleValue();
例如当num
为0时b_copy
必须为-1,但它为0.为什么会这样?
答案 0 :(得分:4)
public class MainActivity extends ListActivity {
private static final int EDITOR_ACTIVITY_REQUEST = 1001;
private static final int MENU_DELETE_ID = 1002;
private int currentNoteId;
private NotesDataSource datasource;
List<NoteItem> notesList;
int count = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
datasource = new NotesDataSource(this);
refreshDisplay();
TextView tv = (TextView) findViewById(R.id.textView1);
tv.setText(""+count);
}
private void refreshDisplay() {
notesList = datasource.findAll();
ArrayAdapter<NoteItem> adapter =
new ArrayAdapter<NoteItem>(this, R.layout.list_item_layout, notesList);
setListAdapter(adapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.action_create) {
createNote(null);
}
return super.onOptionsItemSelected(item);
}
public void createNote(View v) {
NoteItem note = NoteItem.getNew();
Intent intent = new Intent(this, NoteEditorActivity.class);
intent.putExtra(NoteItem.KEY, note.getKey());
intent.putExtra(NoteItem.TEXT, note.getText());
startActivityForResult(intent, EDITOR_ACTIVITY_REQUEST);
int defaultValue = getPreferences(MODE_PRIVATE).getInt("count_key", count);
++defaultValue;
getPreferences(MODE_PRIVATE).edit().putInt("count_key", defaultValue).commit();
count = getPreferences(MODE_PRIVATE).getInt("count_key", count);
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
NoteItem note = notesList.get(position);
Intent intent = new Intent(this, NoteEditorActivity.class);
intent.putExtra(NoteItem.KEY, note.getKey());
intent.putExtra(NoteItem.TEXT, note.getText());
startActivityForResult(intent, EDITOR_ACTIVITY_REQUEST);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == EDITOR_ACTIVITY_REQUEST && resultCode == RESULT_OK) {
NoteItem note = new NoteItem();
note.setKey(data.getStringExtra(NoteItem.KEY));
note.setText(data.getStringExtra(NoteItem.TEXT));
datasource.update(note);
refreshDisplay();
}
}
}
方法返回min(...)
,但不会对其进行修改。
试试这个:
BigDecimal
此外,如果您想从first = first.min(second);
的值中减去1
(如公式所示),请使用first
方法,因为subtract(...)
实际上返回的是最小值两个min(...)
s。
BigDecimal
答案 1 :(得分:4)
BigDecimal类是不可变的。一旦创建,你就无法改变。
当您更改该对象时,它始终返回一个新对象。
@echo off
setlocal enabledelayedexpansion
set J=1
for /R "D:\TEST" %%I in (*.txt) do (
if not "%%~nxI"=="test.txt" (
set XCOUNT_!J!=%%I
set /a J+=1
)
)
要接收新创建的对象,可以编写
first=new BigDecimal(b); // you created an object
second=new BigDecimal("1.0");
first.min(second); // you just modifying it. Hence a new object returned and you never received.
当您编写此内容时,您将分配第一个修改后的first = first.min(second);
返回
不仅BigDecimal
,如果你在BigDecimal上执行任何操作,你需要重新分配它。