手机打包apk问题,冒泡排序、对字符串进行全排列以及从HashMap中根据商品名称查询价格的功能,Main.java,MainActivity.java,activity_main.xml文件

手机打包apk问题,冒泡排序、对字符串进行全排列以及从HashMap中根据商品名称查询价格的功能,Main.java,MainActivity.java,activity_main.xml


package com.user.app;

public class Main {

    public static class BubbleSort {
        public static void bubbleSortAscending(double[] arr) {
            int n = arr.length;
            for (int i = 0; i < n - 1; i++) {
                for (int j = 0; j < n - i - 1; j++) {
                    if (arr[j] > arr[j + 1]) {
                        // swap arr[j+1] and arr[j]
                        double temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                    }
                }
            }
        }

        public static void bubbleSortDescending(double[] arr) {
            int n = arr.length;
            for (int i = 0; i < n - 1; i++) {
                for (int j = 0; j < n - i - 1; j++) {
                    if (arr[j] < arr[j + 1]) {
                        // swap arr[j+1] and arr[j]
                        double temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                    }
                }
            }
        }

        public static void printVertical(double[] arr) {
            int n = arr.length;
            for (int i = 0; i < n; i++) {
                System.out.println(arr[i]);
            }
        }

        public static void printHorizontal(double[] arr) {
            int n = arr.length;
            for (int i = 0; i < n; i++) {
                System.out.print(arr[i] + " ");
            }
            System.out.println();
        }

        public static void main(String[] args) {
            java.util.Scanner scanner = new java.util.Scanner(System.in);
            System.out.println("请输入要排序的数字,每个数字之间用空格或逗号隔开:");
            String input = scanner.nextLine();
            String[] strArr = input.split("[ ,]+");
            double[] arr = new double[strArr.length];

            for (int i = 0; i < strArr.length; i++) {
                arr[i] = Double.parseDouble(strArr[i]);
            }

            System.out.println("请选择输出方式:");
            System.out.println("1. 竖排输出");
            System.out.println("2. 横排输出");
            int option = scanner.nextInt();

            // sort in ascending order
            bubbleSortAscending(arr);
            System.out.println("从小到大排序:");
            if (option == 1) {
                printVertical(arr);
            } else if (option == 2) {
                printHorizontal(arr);
            } else {
                System.out.println("无效的选项,请重新运行程序!");
            }

            // sort in descending order
            bubbleSortDescending(arr);
            System.out.println("从大到小排序:");
            if (option == 1) {
                printVertical(arr);
            } else if (option == 2) {
                printHorizontal(arr);
            } else {
                System.out.println("无效的选项,请重新运行程序!");
            }
        }
    }
}
package com.user.app;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;

import java.util.Arrays;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    // 定义私有变量
    private EditText mEditText; // 输入框
    private Spinner mSpinner;   // 下拉框
    private Button mButton;     // 按钮
    private TextView mTextView; // 文本框

    // 当活动被创建时调用
    /**
     * onCreate
     * @param savedInstanceState 
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 获取控件引用
        mEditText = (EditText) findViewById(R.id.edit_text);    // 输入框
        mSpinner = (Spinner) findViewById(R.id.spinner);        // 下拉框
        mButton = (Button) findViewById(R.id.button);           // 按钮
        mTextView = (TextView) findViewById(R.id.text_view);    // 文本框

        // 创建适配器并将其设置到下拉框中
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
                this, R.array.sort_options, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        mSpinner.setAdapter(adapter);

        // 注册点击事件监听器
        mButton.setOnClickListener(this);
    }

    // 处理点击事件
    @Override
    public void onClick(View view) {
        if (view == mButton) {  // 如果点击的是按钮
            // 从输入框中读取文本并解析成双精度浮点数数组
            String input = mEditText.getText().toString();
            String[] array = input.split("\\s+");
            double[] nums = new double[array.length];
            for (int i = 0; i < array.length; i++) {
                nums[i] = Double.parseDouble(array[i]);
            }
            
            // 检查用户选择的排序方向,并根据升序或降序的方式对数组进行排序
            boolean ascending = (mSpinner.getSelectedItemPosition() == 0);
            Arrays.sort(nums);
            if (!ascending) {
                for (int i = 0; i < nums.length / 2; i++) {
                    double temp = nums[i];
                    nums[i] = nums[nums.length - i - 1];
                    nums[nums.length - i - 1] = temp;
                }
            }
            
            // 将排好序的数组数据格式化为一个字符串,并将其设置为文本视图的内容,从而在屏幕上显示排序结果
            StringBuilder sb = new StringBuilder();
            for (double num : nums) {
                sb.append(num).append('\n');
            }
            mTextView.setText(sb.toString());
        }
    }
}

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText
        android:id="@+id/edit_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/enter_numbers" />

    <Spinner
        android:id="@+id/spinner"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:entries="@array/sort_options"/>

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/sort_button" />

    <TextView
        android:id="@+id/text_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAppearance="@android:style/TextAppearance.Large" />

</LinearLayout>

任务: app ==> 合并清单文件(无需执行)
任务: app ==> 合并动态链接库(跳过)
任务: app ==> 合并Java资源文件(无需执行)
任务: app ==> 合并清单文件(无需执行)
任务: app ==> 编译项目资源文件(无需执行)
任务: app ==> 编译项目依赖资源文件(无需执行)
任务: app ==> 链接资源文件(无需执行)
任务: app ==> 编译项目资源文件(无需执行)
任务: app ==> 编译项目依赖资源文件(无需执行)
任务: app ==> 链接资源文件(无需执行)
任务: app ==> 检查调试工具(无需执行)
任务: app ==> 编译AIDL文件(跳过)
任务: app ==> 编译Java源文件
.../MainActivity.java:第4行
错误: 程序包android.support.v7.app不存在
import android.support.v7.app.AppCompatActivity;
                             ^

.../MainActivity.java:第14行
错误: 找不到符号
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
                                  ^
  符号: 类 AppCompatActivity

.../MainActivity.java:第27行
错误: 方法不会覆盖或实现超类型的方法
    @Override
    ^

.../MainActivity.java:第29行
错误: 找不到符号
        super.onCreate(savedInstanceState);
        ^
  符号:   变量 super
  位置: 类 MainActivity

.../MainActivity.java:第30行
错误: 找不到符号
        setContentView(R.layout.activity_main);
        ^
  符号:   方法 setContentView(int)
  位置: 类 MainActivity

.../MainActivity.java:第33行
错误: 找不到符号
        mEditText = (EditText) findViewById(R.id.edit_text);    // 输入框
                                                ^
  符号:   变量 edit_text
  位置: 类 id

.../MainActivity.java:第34行
错误: 找不到符号
        mSpinner = (Spinner) findViewById(R.id.spinner);        // 下拉框
                                              ^
  符号:   变量 spinner
  位置: 类 id

.../MainActivity.java:第35行
错误: 找不到符号
        mButton = (Button) findViewById(R.id.button);           // 按钮
                                            ^
  符号:   变量 button
  位置: 类 id

.../MainActivity.java:第36行
错误: 找不到符号
        mTextView = (TextView) findViewById(R.id.text_view);    // 文本框
                                                ^
  符号:   变量 text_view
  位置: 类 id

.../MainActivity.java:第40行
错误: 找不到符号
                this, R.array.sort_options, android.R.layout.simple_spinner_item);
                       ^
  符号:   变量 array
  位置: 类 R

10 个错误

任务: app ==> 编译Java源文件 执行失败

Compile java source files failed!
b8.a.execute(Unknown Source:89)
com.qiplat.api.project.task.BaseTaskExecutor.executeInternal(Unknown Source:159)
com.qiplat.api.project.task.BaseTaskExecutor.waitTasks(Unknown Source:21)
com.qiplat.api.project.task.BaseTaskExecutor.executeInternal(Unknown Source:46)
com.qiplat.api.project.task.BaseTaskExecutor.waitTasks(Unknown Source:21)
com.qiplat.api.project.task.BaseTaskExecutor.executeInternal(Unknown Source:46)
com.qiplat.api.project.task.BaseTaskExecutor.waitTasks(Unknown Source:21)
com.qiplat.api.project.task.BaseTaskExecutor.executeInternal(Unknown Source:46)
com.qiplat.api.project.task.BaseTaskExecutor.lambda$execute$0(Unknown Source:21)
com.qiplat.api.project.task.BaseTaskExecutor.a(Unknown Source:0)
com.qiplat.api.project.task.a.run(Unknown Source:6)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
java.lang.Thread.run(Thread.java:922)
构建失败


出现这些错误的原因是:
1. 您的 Android Studio 版本过低,不支持 AppCompatActivity 等类。请更新到最新版本。
2. 您没有在 gradle 文件中添加 android support v7 库的依赖。请添加:
gradle
dependencies {
    implementation 'com.android.support:appcompat-v7:28.0.0'
}
3. 您的 R 类没有被正确生成,所以找不到 R.id.edit_text 等资源 ID。请点击 Sync Project with Gradle Files 按钮来重新生成 R 类。
4. 您没有在 AndroidManifest.xml 文件中为 MainActivity 指定 android:theme 属性。请添加:
xml
<activity android:name=".MainActivity" 
          android:theme="@style/AppTheme">
</activity>
以及在 styles.xml 文件中定义 AppTheme:
xml
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
</style>
修复以上问题后,您的项目应该可以正常编译通过。请重新编译项目,并在设备或模拟器上运行,查看结果。
另外,对于 java 程序中实现的冒泡排序算法和字符串全排列功能,我在这里不再赘述。您可以参考相关学习资料学习和实现。
而从 HashMap 中根据 key 查询 value 的方法很简单,如:
java
HashMap<String, Double> map = new HashMap<>();
map.put("Apple", 10.5);
map.put("Orange", 5.2);

double price = map.get("Apple");  // 10.5
请根据您的需求在项目中实现这些功能。如果还有其他问题,欢迎再提出来。
手机打包apk过程:
1. 点击菜单栏的 Build -> Generate Signed Bundle / APK...
2. 在弹出的窗口中选择 APK 选项,点击下一步。
3. 选择您的应用程序和模块,点击下一步。
4. 在下一窗口中选择您的签名文件(若无则点击“创建新的...”进行创建),点击下一步。
5. 在下一窗口预览您的apk信息,然后点击“完成”开始构建apk。
6. 构建完成后,您的apk文件会被保存在项目的app/build/outputs/apk/ 目录下。
7. 您可以直接安装这个apk文件到您的手机,或者发布到各大应用市场。
  • 这篇博客: 2019 Android 精选版面试题级答案(Android+Java+算法+性能优化+四大组件...)中的 2.说说hashMap是怎样实现的 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 哈希表:由数组+链表组成的

    当我们往HashMap中put元素的时候,先根据key的hashCode重新计算hash值,根据hash值得到这个元素在数组中的位置(即下标)

    如果数组该位置上已经存放有其他元素了,那么在这个位置上的元素将以链表的形式存放,新加入的放在链头,最先加入的放在链尾。

    如果数组该位置上没有元素,就直接将该元素放到此数组中的该位置上。