Android Studio Java-购物车应用程序,共有问题
对于我的uni任务,我必须修改一段代码,我们将创建一个应用程序,该应用程序将项目的总成本相加并用Java显示出来,我对移动开发非常陌生。除了合计和显示成本之外,我们还收到了所有代码。我在顶部添加了几个变量和一个Android Studio Java-购物车应用程序,共有问题,java,android,Java,Android,对于我的uni任务,我必须修改一段代码,我们将创建一个应用程序,该应用程序将项目的总成本相加并用Java显示出来,我对移动开发非常陌生。除了合计和显示成本之外,我们还收到了所有代码。我在顶部添加了几个变量和一个total()方法 目前,当应用程序运行时,它将从项目中获取所有价格,并根据需要添加/减去它们,但它添加和减去的金额是错误的(所有内容都会添加和减去1.5,而不是创建对象时定义的价格),我不确定原因。有什么想法吗 如果你还需要其他课程的信息,请告诉我 谢谢 编辑:我希望这个应用程序有4行,
total()
方法
目前,当应用程序运行时,它将从项目中获取所有价格,并根据需要添加/减去它们,但它添加和减去的金额是错误的(所有内容都会添加和减去1.5,而不是创建对象时定义的价格),我不确定原因。有什么想法吗
如果你还需要其他课程的信息,请告诉我
谢谢
编辑:我希望这个应用程序有4行,每行包含一个与甜点对象相关的图像,显示甜点的文本,然后是一个增减数量的按钮。我还想显示当前选择的所有甜点的总成本,例如,如果选择了1个甜甜圈,选择了2个饼干,预计总成本应显示为3.88英镑。无论何时添加或减去另一个甜点,总数都应更新
我收到的代码具有列表功能以及递增和递减功能,因此我的任务是向对象添加价格,并使其合计
代码:
Main-Acitvity.java
package com.example.annascott.buttondemo;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
// quantity of desert
int desertNumber;
Dessert currentDessert;
double totalAmount = 0;
// Create an ArrayList of Dessert objects
final ArrayList<Dessert> desserts = new ArrayList<Dessert>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//CREATE THE DESSERT OBJECTS
desserts.add(new Dessert("Donut", 0, R.drawable.doughnut, 1.99));
desserts.add(new Dessert("Cookie", 0, R.drawable.cookie, 0.99));
desserts.add(new Dessert("PieceOfCake", 0, R.drawable.piece_of_cake, 2.99));
desserts.add(new Dessert("Pastry", 0, R.drawable.pastry, 1.50));
// Create an {@link DessertAdapter}, whose data source is a list of
// {@link Dessert}s. The adapter knows how to create list item views for each item
// in the list.
DesertAdapter flavorAdapter = new DesertAdapter(this, desserts);
// Get a reference to the ListView, and attach the adapter to the listView.
ListView listView = (ListView) findViewById(R.id.listview_dessert);
listView.setAdapter(flavorAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
switch (i) {
case 0:
Intent donut = new Intent(MainActivity.this, Donut.class);
startActivity(donut);
break;
case 1:
Intent cookie = new Intent(MainActivity.this, Cookie.class);
startActivity(cookie);
break;
case 2:
Intent pieceOfCake = new Intent(MainActivity.this, PieceOfCake.class);
startActivity(pieceOfCake);
break;
case 3:
Intent pastry = new Intent(MainActivity.this, Pastry.class);
startActivity(pastry);
break;
}
}
});
}
public void Decrement(View view) {
LinearLayout parentRow = (LinearLayout) view.getParent();
TextView quantityView = (TextView) parentRow.findViewById(R.id.dessert_number);
String quantityString = quantityView.getText().toString();
desertNumber = Integer.parseInt(quantityString);
desertNumber -= 1;
if (desertNumber < 0) {
desertNumber = 0;
Toast.makeText(MainActivity.this, "Can not be less than 0",
Toast.LENGTH_SHORT).show();
}
quantityView.setText(String.valueOf(desertNumber));
total(false);
}
public void Increment(View view) {
// Set the dessert amount to the text view
LinearLayout parentRow = (LinearLayout) view.getParent();
TextView quantityView = (TextView) parentRow.findViewById(R.id.dessert_number);
String quantityString = quantityView.getText().toString();
desertNumber = Integer.parseInt(quantityString);
desertNumber += 1;
quantityView.setText(String.valueOf(desertNumber));
total(true);
}
// Add the total cost of the items to be bought
public void total(boolean change) {
//get all of the desserts
for (int i = 0; i < desserts.size(); i++) {
currentDessert = desserts.get(i);
}
// if increment add price else subtract
TextView shoppingCartView = (TextView) findViewById(R.id.shopping_cart);
if (change) {
totalAmount += currentDessert.getMyPrice();
} else {
totalAmount -= currentDessert.getMyPrice();
}
shoppingCartView.setText(Double.toString(totalAmount));
}
}
您的错误可能在total函数中
//get all of the desserts
for (int i = 0; i < desserts.size(); i++) {
currentDessert = desserts.get(i);
}
//把所有的甜点都拿来
对于(int i=0;i
将最后一个条目分配给变量currentSweart,即值为1.5的油酥糕点,类似这样的情况如何:
// Add the total cost of the items to be bought
public void total(boolean change) {
//get all of the desserts
for (int i = 0; i < desserts.size(); i++) {
currentDessert = desserts.get(i);
if (change) {
totalAmount += currentDessert.getMyPrice();
} else {
totalAmount -= currentDessert.getMyPrice();
}
}
// if increment add price else subtract
TextView shoppingCartView = (TextView) findViewById(R.id.shopping_cart);
shoppingCartView.setText(Double.toString(totalAmount));
}
//添加要购买的项目的总成本
公共无效总计(布尔值更改){
//把所有的甜点都拿来
对于(int i=0;i
但老实说,我不知道你们想做什么,你们有什么问题,或者某个输入的预期输出
话虽如此,我不知道你的代码出了什么问题,因为我不知道它首先应该做什么。如果/在寻求调试帮助时,请记下一些示例输入和预期输出。您正在搜索total函数中的所有甜点 因此,您需要找到一种方法指定要将价格加成的价格
我会在代码前面的switch case语句中为每个按钮添加一个单击的布尔变量,但这不是唯一的方法。是的,这似乎是问题所在,有没有解决方法?你试过调试它吗?我试过了,它会显示所有加在一起的项目价格的总和。很抱歉,缺少信息,我将编辑问题以添加更多信息我仍然不太明白需要做什么。。。如果你的意思是“总量(总和)所有数量大于0的物品的价格”,那么就这样说吧,但实际上,你的代码没有“保持每种沙漠类型的数量”的功能,因此我只能建议一个hashmap,其中每个甜点的数量都保存在甜点键下,这个
total()
函数被更改为遍历hashmap,并对值为>0
的键的价格进行汇总(off
似乎处于关闭状态。除沙子外,沙漠价格可能更高。)搜索所有
实际上是无条件迭代。看到问题中的两个cookie的数量
,为每个按钮“单击”一个布尔变量就不行了。
// Add the total cost of the items to be bought
public void total(boolean change) {
//get all of the desserts
for (int i = 0; i < desserts.size(); i++) {
currentDessert = desserts.get(i);
if (change) {
totalAmount += currentDessert.getMyPrice();
} else {
totalAmount -= currentDessert.getMyPrice();
}
}
// if increment add price else subtract
TextView shoppingCartView = (TextView) findViewById(R.id.shopping_cart);
shoppingCartView.setText(Double.toString(totalAmount));
}